blob: f092b1c5e4da2f98e93fa72a1f0957cbfa2f10e3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.beans;
import javax.lang.model.element.Element;
import javax.swing.Action;
import org.netbeans.api.java.source.ElementHandle;
import org.openide.nodes.AbstractNode;
import org.openide.util.actions.SystemAction;
import org.openide.actions.NewAction;
import org.openide.actions.PropertiesAction;
import org.openide.actions.ToolsAction;
import static org.netbeans.modules.beans.BeanUtils.*;
/** Subnodes of this node are nodes representing source code patterns i.e.
* PropertyPatternNode or EventSetPatternNode.
*
* @author Petr Hrebejk
*/
public final class PatternGroupNode extends AbstractNode {
/** Pattern types */
static final int PATTERN_KIND_PROPERTY = 0;
static final int PATTERN_KIND_IDX_PROPERTY = 1;
static final int PATTERN_KIND_UC_EVENT_SET = 2;
static final int PATTERN_KIND_MC_EVENT_SET = 3;
// Is the node writable?
private boolean isWritable = true;
/** Array of the actions of the java methods, constructors and fields. */
private static final Action[] DEFAULT_ACTIONS = new Action[] {
// SystemAction.get(GenerateBeanInfoAction.class),
null,
SystemAction.get(NewAction.class),
null,
SystemAction.get(ToolsAction.class),
SystemAction.get(PropertiesAction.class),
};
/** Array of the actions of the java methods, constructors and fields. */
private static final Action[] DEFAULT_ACTIONS_NON_WRITEABLE = new Action[] {
// SystemAction.get(GenerateBeanInfoAction.class),
null,
SystemAction.get(ToolsAction.class),
SystemAction.get(PropertiesAction.class),
};
private static final String ICON_BASE =
"org/netbeans/modules/beans/resources/patternGroup.gif"; // NOI18N
public PatternGroupNode(PatternChildren children) {
this(children, true);
}
public PatternGroupNode(PatternChildren children, boolean isWriteable) {
super(children);
this.isWritable = isWriteable;
setName(getString("Patterns"));
setShortDescription (getString("Patterns_HINT"));
setIconBaseWithExtension(ICON_BASE);
// CookieSet cs = getCookieSet();
// cs.add(children.getPatternAnalyser());
}
@Override
public Action[] getActions(boolean context) {
return isWritable ? DEFAULT_ACTIONS : DEFAULT_ACTIONS_NON_WRITEABLE;
}
public PatternNode getNodeForElement( ElementHandle<Element> eh ) {
throw new UnsupportedOperationException("Tudle Nudlde.");
}
// ================= NewTypes ====================================
// /* Get the new types that can be created in this node.
// * For example, a node representing a Java package will permit classes to be added.
// * @return array of new type operations that are allowed
// */
// public NewType[] getNewTypes() {
// //if (writeable) {
// return new NewType[] {
// createNewType(getString("MENU_CREATE_PROPERTY"), PATTERN_KIND_PROPERTY ),
// createNewType(getString("MENU_CREATE_IDXPROPERTY"), PATTERN_KIND_IDX_PROPERTY ),
// createNewType(getString("MENU_CREATE_UNICASTSE"), PATTERN_KIND_UC_EVENT_SET ),
// createNewType(getString("MENU_CREATE_MULTICASTSE"), PATTERN_KIND_MC_EVENT_SET ),
// };
// }
//
// /** Create one new type with the given name and the kind.
// */
// private NewType createNewType(final String name, final int kind) {
// return new NewType() {
// /** Get the name of the new type.
// * @return localized name.
// */
// public String getName() {
// return name;
// }
//
// /** Creates new element */
// public void create () throws IOException {
//
// try {
// JMIUtils.beginTrans(true);
// boolean rollback = true;
// try {
// createElement(kind);
// rollback = false;
// } finally {
// JMIUtils.endTrans(rollback);
// }
// } catch (Exception e) {
// IOException ioe = new IOException();
// ioe.initCause(e);
// throw ioe;
// }
//
// }
// };
// }
//
// /** Creates elements of the given kind
// * @param kind The kind of the element to create.
// * @exception JmiException if action is not allowed.
// */
// private void createElement(int kind) throws JmiException, GenerateBeanException {
// DialogDescriptor dd;
// Dialog dialog;
// boolean forInterface = false;
//
// PatternAnalyser pa = (PatternAnalyser)this.getCookie( PatternAnalyser.class );
// if ( pa != null )
// forInterface = pa.getClassElementHandle() == null ? false : pa.getClassElementHandle().isInterface();
//
// switch (kind) {
// case PATTERN_KIND_PROPERTY:
// PropertyPatternPanel propertyPanel;
//
// dd = new DialogDescriptor( (propertyPanel = new PropertyPatternPanel()),
// getString( "CTL_TITLE_NewProperty"), // Title
// true, // Modal
// propertyPanel );
// dd.setHelpCtx (new HelpCtx (HelpCtxKeys.BEAN_PROPERTIES_HELP));
// dd.setClosingOptions( new Object[]{} );
//
// dialog = DialogDisplayer.getDefault().createDialog( dd );
// propertyPanel.setDialog( dialog );
// propertyPanel.setForInterface( forInterface );
// propertyPanel.setGroupNode( this );
// dialog.setVisible(true);
//
// if ( dd.getValue().equals( NotifyDescriptor.OK_OPTION ) ) {
// PropertyPatternPanel.Result result = propertyPanel.getResult();
//
// PropertyPattern.create( getPatternAnalyser(),
// Introspector.decapitalize( result.name ),
// result.type, result.mode,
// result.bound, result.constrained,
// result.withField, result.withReturn, result.withSet,
// result.withSupport);
//
// }
// return;
// case PATTERN_KIND_IDX_PROPERTY:
// IdxPropertyPatternPanel idxPropertyPanel;
//
// dd = new DialogDescriptor( (idxPropertyPanel = new IdxPropertyPatternPanel()),
// getString( "CTL_TITLE_NewIdxProperty"), // Title
// true, // Modal
// NotifyDescriptor.OK_CANCEL_OPTION, // Option list
// NotifyDescriptor.OK_OPTION, // Default
// DialogDescriptor.BOTTOM_ALIGN, // Align
// new HelpCtx (HelpCtxKeys.BEAN_PROPERTIES_HELP), // Help // NOI18N
// idxPropertyPanel );
// dd.setClosingOptions( new Object[]{} );
//
// dialog = DialogDisplayer.getDefault().createDialog( dd );
// idxPropertyPanel.setDialog( dialog );
// idxPropertyPanel.setForInterface( forInterface );
// idxPropertyPanel.setGroupNode( this );
// dialog.setVisible(true);
//
// if ( dd.getValue().equals( NotifyDescriptor.OK_OPTION ) ) {
//
//
//
// IdxPropertyPatternPanel.Result result = idxPropertyPanel.getResult();
// IdxPropertyPattern.create( getPatternAnalyser(),
// Introspector.decapitalize( result.name ),
// result.type, result.mode,
// result.bound, result.constrained,
// result.withField, result.withReturn, result.withSet,
// result.withSupport,
// result.niGetter, result.niWithReturn,
// result.niSetter, result.niWithSet );
// }
// return;
// case PATTERN_KIND_UC_EVENT_SET:
// UEventSetPatternPanel uEventSetPanel;
//
// dd = new DialogDescriptor( (uEventSetPanel = new UEventSetPatternPanel( getPatternAnalyser())),
// getString( "CTL_TITLE_NewUniCastES"), // Title
// true, // Modal
// NotifyDescriptor.OK_CANCEL_OPTION, // Option list
// NotifyDescriptor.OK_OPTION, // Default
// DialogDescriptor.BOTTOM_ALIGN, // Align
// new HelpCtx (HelpCtxKeys.BEAN_EVENTSETS_HELP), // Help // NOI18N
// uEventSetPanel );
// dd.setClosingOptions( new Object[]{} );
//
// dialog = DialogDisplayer.getDefault().createDialog( dd );
// uEventSetPanel.setDialog( dialog );
// uEventSetPanel.setForInterface( forInterface );
// uEventSetPanel.setGroupNode( this );
// dialog.setVisible(true);
//
// if ( dd.getValue().equals( NotifyDescriptor.OK_OPTION ) ) {
// UEventSetPatternPanel.Result result = uEventSetPanel.getResult();
// EventSetPattern.create( getPatternAnalyser(),
// result.type, result.implementation, result.firing,
// result.passEvent, true );
// }
// return;
// case PATTERN_KIND_MC_EVENT_SET:
// EventSetPatternPanel eventSetPanel;
//
// dd = new DialogDescriptor( (eventSetPanel = new EventSetPatternPanel( getPatternAnalyser() )),
// getString( "CTL_TITLE_NewMultiCastES"), // Title
// true, // Modal
// NotifyDescriptor.OK_CANCEL_OPTION, // Option list
// NotifyDescriptor.OK_OPTION, // Default
// DialogDescriptor.BOTTOM_ALIGN, // Align
// new HelpCtx (HelpCtxKeys.BEAN_EVENTSETS_HELP), // Help // NOI18N
// eventSetPanel );
// dd.setClosingOptions( new Object[]{} );
//
// dialog = DialogDisplayer.getDefault().createDialog( dd );
// eventSetPanel.setDialog( dialog );
// eventSetPanel.setForInterface( forInterface );
// eventSetPanel.setGroupNode( this );
// dialog.setVisible(true);
//
// if ( dd.getValue().equals( NotifyDescriptor.OK_OPTION ) ) {
// EventSetPatternPanel.Result result = eventSetPanel.getResult();
// EventSetPattern.create( getPatternAnalyser(),
// result.type, result.implementation, result.firing,
// result.passEvent, false );
// }
// return;
// }
// }
//
// /** Checks if there exists a pattern with given name in the class
// * @param name The name of the pattern
// * @return True if pattern with given name exists otherwise false.
// */
// boolean propertyExists( String name ) {
// Collection[] patterns = new Collection[2];
// String decapName = Introspector.decapitalize( name );
// PatternAnalyser pa = getPatternAnalyser();
// if (!pa.isAnalyzed()) {
// // XXX check threading here
// pa.analyzeAll();
// }
//
// patterns[0] = pa.getPropertyPatterns();
// patterns[1] = pa.getIdxPropertyPatterns();
//
// for ( int i = 0; i < patterns.length && patterns[i] != null; i++ ) {
// Iterator it = patterns[i].iterator();
// while( it.hasNext() ) {
// if ( ((Pattern)it.next()).getName().equals( decapName ) ) {
// return true;
// }
// }
// }
//
// return false;
// }
//
// /** Checks if there exists a pattern for given type
// * @param type type to query patern
// * @return event set pattern if pattern with given name exists otherwise null.
// */
// EventSetPattern findEventSetPattern( Type type ) throws JmiException {
// assert JMIUtils.isInsideTrans();
// if (!(type instanceof JavaClass)) {
// return null;
// }
// String name = Introspector.decapitalize( ((JavaClass) type).getSimpleName() );
//
// Collection/*<EventSetPattern>*/ eventSets = getPatternAnalyser().getEventSetPatterns();
// for (Iterator/*<EventSetPattern>*/ it = eventSets.iterator(); it.hasNext();) {
// EventSetPattern pattern = (EventSetPattern) it.next();
// if (name.equals(pattern.getName())) {
// return pattern;
// }
// }
//
// return null;
// }
//
// private PatternAnalyser getPatternAnalyser() {
// return (PatternAnalyser) getCookie(PatternAnalyser.class);
// }
//
}