001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * If you wish your version of this file to be governed by only the CDDL
025: * or only the GPL Version 2, indicate your decision by adding
026: * "[Contributor] elects to include this software in this distribution
027: * under the [CDDL or GPL Version 2] license." If you do not indicate a
028: * single choice of license, a recipient has the option to distribute
029: * your version of this file under either the CDDL, the GPL Version 2 or
030: * to extend the choice of license to its licensees as provided above.
031: * However, if you add GPL Version 2 code and therefore, elected the GPL
032: * Version 2 license, then the option applies only if the new code is
033: * made subject to such option by the copyright holder.
034: *
035: * Contributor(s):
036: *
037: * Portions Copyrighted 2008 Sun Microsystems, Inc.
038: */
039: package org.netbeans.modules.compapp.casaeditor.nodes.actions;
040:
041: import java.awt.event.ActionEvent;
042: import java.util.ArrayList;
043: import java.util.List;
044: import javax.swing.Action;
045: import javax.swing.JMenu;
046: import javax.swing.JMenuItem;
047: import javax.swing.JSeparator;
048: import javax.swing.SwingUtilities;
049: import javax.xml.namespace.QName;
050: import org.netbeans.modules.compapp.casaeditor.model.casa.CasaComponent;
051: import org.netbeans.modules.compapp.casaeditor.model.casa.CasaExtensibilityElement;
052: import org.netbeans.modules.compapp.casaeditor.model.casa.CasaWrapperModel;
053: import org.netbeans.modules.compapp.casaeditor.nodes.CasaNode;
054: import org.openide.awt.Actions;
055: import org.openide.util.actions.Presenter;
056:
057: /**
058: * Action to clear configuration extensions.
059: *
060: * This action only serves for presenting purpose.
061: *
062: * @see ClearConfigExtensionAction
063: *
064: * @author jqian
065: */
066: public class ClearConfigExtensionsAction extends NodeAbstractAction
067: implements Presenter.Popup {
068:
069: public ClearConfigExtensionsAction(String displayName, CasaNode node) {
070: super (displayName, node);
071: }
072:
073: public void actionPerformed(ActionEvent e) {
074: // do nothing
075: }
076:
077: public JMenuItem getPopupPresenter() {
078: CasaComponent casaComponent = (CasaComponent) getData();
079: List<QName> extensionQNames = getExtensionQNames(casaComponent);
080:
081: JMenu menu = new JMenu((String) getValue(Action.NAME));
082:
083: if (extensionQNames.size() > 1) {
084: Action clearAllQoSExtensionsAction = new ClearConfigExtensionAction(
085: (CasaNode) getNode(), null);
086:
087: JMenuItem menuItem = new JMenuItem();
088: Actions
089: .connect(menuItem, clearAllQoSExtensionsAction,
090: true);
091: menu.add(menuItem);
092:
093: menu.add(new JSeparator());
094: }
095:
096: for (QName extensionQName : extensionQNames) {
097: Action clearQoSExtensionAction = new ClearConfigExtensionAction(
098: (CasaNode) getNode(), extensionQName);
099:
100: JMenuItem menuItem = new JMenuItem();
101: Actions.connect(menuItem, clearQoSExtensionAction, true);
102: menu.add(menuItem);
103: }
104:
105: return menu;
106: }
107:
108: private List<QName> getExtensionQNames(CasaComponent casaComponent) {
109: List<QName> ret = new ArrayList<QName>();
110:
111: for (CasaExtensibilityElement ee : casaComponent
112: .getExtensibilityElements()) {
113: ret.add(ee.getQName());
114: }
115:
116: return ret;
117: }
118: }
119:
120: /**
121: * Real action to clear one particular type of config configuration.
122: */
123: class ClearConfigExtensionAction extends NodeAbstractAction {
124:
125: private QName qName;
126:
127: /**
128: * Constructs a ClearConfigExtensionAction.
129: *
130: * @param node a CASA node
131: * @param qName QName for the configuration extension element;
132: * or <code>null</code> for all extension elements.
133: * For example: {http://www.sun.com/jbi/qos/redelivery}redelivery
134: */
135: public ClearConfigExtensionAction(CasaNode node, QName qName) {
136: super (qName == null ? "All" : qName.getLocalPart(), node);
137: this .qName = qName;
138: }
139:
140: public void actionPerformed(ActionEvent e) {
141: CasaComponent casaComponent = (CasaComponent) getData();
142:
143: CasaWrapperModel model = getModel();
144: for (CasaExtensibilityElement ee : casaComponent
145: .getExtensibilityElements()) {
146: if (qName == null || ee.getQName().equals(qName)) {
147: model.removeExtensibilityElement(casaComponent, ee);
148: if (qName != null) {
149: break;
150: }
151: }
152: }
153:
154: // FIXME: not working as expected
155: ((CasaNode) getNode()).refresh(); // refresh the property sheet
156: }
157: }
|