1 19 20 package org.netbeans.modules.java.ui.nodes.elements; 21 22 import org.netbeans.jmi.javamodel.Attribute; 23 import org.netbeans.modules.javacore.internalapi.JavaMetamodel; 24 import org.netbeans.modules.java.ui.nodes.editors.TypeEditor; 25 import org.openide.nodes.Children; 26 import org.openide.nodes.Sheet; 27 import org.openide.nodes.Node; 28 import org.openide.src.ElementProperties; 29 import org.openide.ErrorManager; 30 import org.openide.util.NbBundle; 31 32 import javax.jmi.reflect.JmiException; 33 import java.lang.reflect.InvocationTargetException ; 34 import java.util.Map ; 35 import java.util.HashMap ; 36 37 41 public final class AnnotationTypeMethodNode extends ElementNode { 42 43 private static final Map mapAttributeName; 44 45 static { 46 mapAttributeName = new HashMap (); 47 mapAttributeName.put(PROP_MODIFIERS, PROP_MODIFIERS); 48 mapAttributeName.put(ElementProperties.PROP_NAME, ElementProperties.PROP_NAME); 49 mapAttributeName.put("typeName", PROP_RETURN); mapAttributeName.put("defaultValueText", PROP_DEFAULT_VALUE); } 52 53 57 public AnnotationTypeMethodNode(Attribute element, boolean writeable) { 58 super(element, Children.LEAF, writeable); 59 setElementFormat0(getElementFormatProperty()); 60 superSetName(element.getName()); 61 } 62 63 protected String resolveIconBase() { 64 return IconResolver.getIconBaseForAttribute(getMethod()); 65 } 66 67 protected ElementFormat getElementFormatProperty() { 68 return getSourceOptions().getAnnTypeMethodElementFormat(); 69 } 70 71 74 protected ElementFormat getHintElementFormat() { 75 return getSourceOptions().getAnnTypeMethodElementLongFormat(); 76 } 77 78 protected Map getAttributeNameMap() { 79 return mapAttributeName; 80 } 81 82 83 protected Sheet createSheet () { 84 Sheet sheet = Sheet.createDefault(); 85 Sheet.Set ps = sheet.get(Sheet.PROPERTIES); 86 ps.put(createModifiersProperty(writeable)); 87 ps.put(createNameProperty(getMethod())); 88 ps.put(createReturnProperty(writeable)); 89 ps.put(createDefaultValueProperty(writeable)); 90 return sheet; 91 } 92 93 97 protected Node.Property createDefaultValueProperty(boolean canW) { 98 return new ElementNode.ElementProp(PROP_DEFAULT_VALUE, String .class, canW) { 99 100 public Object getValue () { 101 String val = getMethod().getDefaultValueText(); 102 return val != null? val: ""; } 104 105 106 public void setValue(final Object val) throws IllegalArgumentException , 107 IllegalAccessException , InvocationTargetException { 108 109 super.setValue(val); 110 if (!(val instanceof String )) throw new IllegalArgumentException (); 111 112 boolean fail = true; 113 try { 114 JavaMetamodel.getDefaultRepository().beginTrans(true); 115 try { 116 getMethod().setDefaultValueText((String ) val); 117 fail = false; 118 } finally { 119 JavaMetamodel.getDefaultRepository().endTrans(fail); 120 } 121 } catch (JmiException e) { 122 IllegalArgumentException iae = new IllegalArgumentException (); 123 iae.initCause(e); 124 ErrorManager.getDefault().annotate(iae, ErrorManager.USER, null, 125 NbBundle.getMessage(AnnotationTypeMethodNode.class, "MSG_InvalidDefaultVal"), null, null); throw iae; 127 } 128 } 129 }; 130 } 131 132 136 private Node.Property createReturnProperty(boolean canW) { 137 Node.Property np = createTypeProperty(PROP_RETURN, getMethod(), canW); 138 np.setValue(TypeEditor.ANN_TYPE_EDITOR, Boolean.TRUE); 139 return np; 140 } 141 142 private Attribute getMethod() { 143 return (Attribute) this.element; 144 } 145 } 146 | Popular Tags |