1 19 20 package org.openide.src.nodes; 21 22 import java.io.IOException ; 23 import java.beans.*; 24 import java.lang.reflect.InvocationTargetException ; 25 import java.text.MessageFormat ; 26 27 import org.openide.ErrorManager; 28 import org.openide.explorer.propertysheet.editors.ModifierEditor; 29 import org.openide.src.*; 30 import org.openide.nodes.*; 31 import org.openide.util.Utilities; 32 33 37 public abstract class MemberElementNode extends ElementNode { 38 44 public MemberElementNode(MemberElement element, Children children, boolean writeable) { 45 super(element, children, writeable); 46 superSetName(element.getName().getName()); 47 } 48 49 57 public void setName(final String str) { 58 try { 59 if (testJavaId(str)) { 60 SourceEditSupport.invokeAtomicAsUser(element, new SourceEditSupport.ExceptionalRunnable() { 61 public void run() throws SourceException { 62 ((MemberElement)element).setName(Identifier.create(str)); 63 superSetName(str); 64 } 65 }); 66 } 67 } 68 catch (IOException e) { 69 MessageFormat fmt = new MessageFormat (bundle.getString("MSG_ElementCantRename")); 70 String [] params = new String [] { ((MemberElement)element).getName().toString(), e.getMessage() }; 71 if (params[1] == null) 72 params[1] = ""; 74 IllegalArgumentException ex = new IllegalArgumentException ("Invalid name"); ErrorManager.getDefault().annotate(ex, ErrorManager.USER, 76 null, fmt.format(params), e, null); 77 throw ex; 78 } 79 } 80 81 85 boolean testJavaId(String str) throws IllegalArgumentException { 86 boolean ok = Utilities.isJavaIdentifier(str); 87 if (!ok) { 88 IllegalArgumentException ex = new IllegalArgumentException ("Invalid identifier"); ErrorManager.getDefault().annotate(ex, ErrorManager.USER, 90 null, bundle.getString("MSG_Not_Valid_Identifier"), null, null); 91 throw ex; 92 } 93 return ok; 94 } 95 96 103 protected Node.Property createModifiersProperty(boolean canW) { 104 Node.Property p = new ElementProp(PROP_MODIFIERS, Integer .class, canW) { 105 106 public Object getValue () { 107 return new Integer (((MemberElement) element).getModifiers()); 108 } 109 110 111 public void setValue(final Object val) throws IllegalArgumentException , 112 IllegalAccessException , InvocationTargetException { 113 super.setValue(val); 114 115 if (!(val instanceof Integer )) 116 throw new IllegalArgumentException (); 117 118 runAtomic(element, new SourceEditSupport.ExceptionalRunnable() { 119 public void run() throws SourceException { 120 ((MemberElement)element).setModifiers(((Integer )val).intValue()); 121 } 122 }); 123 } 124 125 126 public PropertyEditor getPropertyEditor () { 127 return new ModifierEditor(((MemberElement)element).getModifiersMask()); 128 } 129 }; 130 p.setValue("changeImmediate" ,Boolean.FALSE); return p; 132 } 133 134 138 protected Node.Property createNameProperty(boolean canW) { 139 return new ElementProp(ElementProperties.PROP_NAME, String .class, canW) { 140 141 public Object getValue () { 142 return ((MemberElement)element).getName().getName(); 143 } 144 145 146 public void setValue(final Object val) throws IllegalArgumentException , 147 IllegalAccessException , InvocationTargetException { 148 super.setValue(val); 149 if (!(val instanceof String )) 150 throw new IllegalArgumentException (); 151 152 runAtomic(element, new SourceEditSupport.ExceptionalRunnable() { 153 public void run() throws SourceException { 154 String sourceName = ((String ) val).trim(); 155 String fullName = sourceName; 156 157 String prevName = ((MemberElement)element).getName().getFullName(); 158 int dot = prevName.lastIndexOf("."); if (dot != -1) { 160 fullName = prevName.substring(0, dot + 1) + sourceName; 161 } 162 163 if (testJavaId(sourceName)) { 164 ((MemberElement)element).setName(Identifier.create(fullName, sourceName)); 165 } 166 } 167 }); 168 } 169 }; 170 } 171 } 172 | Popular Tags |