1 19 20 package org.netbeans.modules.xml.schema.ui.nodes.schema; 21 22 import java.beans.FeatureDescriptor ; 23 import java.beans.PropertyChangeEvent ; 24 import java.beans.PropertyEditor ; 25 import java.beans.PropertyEditorSupport ; 26 import java.lang.reflect.InvocationTargetException ; 27 import java.util.regex.Pattern ; 28 import javax.swing.Action ; 29 import org.netbeans.modules.xml.schema.ui.basic.SchemaSettings; 30 import org.openide.actions.CustomizeAction; 31 32 import org.openide.nodes.Children; 33 import org.openide.nodes.Node; 34 import org.openide.nodes.Sheet; 35 import org.openide.util.NbBundle; 36 import org.openide.ErrorManager; 37 import org.openide.explorer.propertysheet.ExPropertyEditor; 38 import org.openide.explorer.propertysheet.PropertyEnv; 39 40 import org.netbeans.modules.xml.schema.model.Documentation; 41 import org.netbeans.modules.xml.schema.model.SchemaComponentReference; 42 import org.netbeans.modules.xml.xam.ui.customizer.Customizer; 43 import org.netbeans.modules.xml.xam.ui.customizer.CustomizerProvider; 44 import org.netbeans.modules.xml.schema.ui.basic.editors.StringEditor; 45 import org.netbeans.modules.xml.schema.ui.nodes.ReadOnlyCookie; 46 import org.netbeans.modules.xml.schema.ui.nodes.SchemaComponentNode; 47 import org.netbeans.modules.xml.schema.ui.nodes.SchemaModelFlushWrapper; 48 import org.netbeans.modules.xml.schema.ui.nodes.SchemaUIContext; 49 import org.netbeans.modules.xml.schema.ui.nodes.categorized.customizer.DocumentationCustomizer; 50 import org.netbeans.modules.xml.schema.ui.nodes.schema.properties.BaseSchemaProperty; 51 import org.netbeans.modules.xml.schema.ui.nodes.schema.properties.NamespaceProperty; 52 import org.openide.nodes.PropertySupport; 53 import org.openide.util.actions.SystemAction; 54 55 61 public class DocumentationNode extends SchemaComponentNode<Documentation> { 62 66 public DocumentationNode(SchemaUIContext context, 67 SchemaComponentReference<Documentation> reference, 68 Children children) { 69 super(context,reference,children); 70 71 setIconBaseWithExtension( 72 "org/netbeans/modules/xml/schema/ui/nodes/resources/documentation.png"); 73 } 74 75 76 public String getHtmlDisplayName() { 77 String language = getReference().get().getLanguage(); 78 String retValue = super.getDefaultDisplayName(); 79 if(language!=null) { 80 retValue = retValue +" <font color='#999999'>"+"(" + language + ")"+"</font>"; 81 } 82 return retValue; 83 } 84 85 89 @Override 90 public String getTypeDisplayName() { 91 return NbBundle.getMessage(DocumentationNode.class, 92 "LBL_DocumentationNode_TypeDisplayName"); } 94 95 96 public void propertyChange(PropertyChangeEvent event) { 97 if(!isValid()) return; 98 super.propertyChange(event); 99 String property = event.getPropertyName(); 100 if(Documentation.LANGUAGE_PROPERTY.equals(event.getPropertyName()) && 101 event.getSource() == getReference().get() ) { 102 fireDisplayNameChange(null,getDisplayName()); 103 } 104 } 105 106 @Override 107 protected Sheet createSheet() { 108 Sheet sheet = null; 109 sheet = Sheet.createDefault(); 111 Sheet.Set props = sheet.get(Sheet.PROPERTIES); 112 Sheet.Set set=sheet.get(Sheet.PROPERTIES); 113 set.put( 114 new PropertySupport("kind",String .class, 115 NbBundle.getMessage(SchemaComponentNode.class, 116 "PROP_SchemaComponentNode_Kind"), 117 "",true,false) { 118 public Object getValue() { 119 return getTypeDisplayName(); 120 } 121 122 public void setValue(Object value) { 123 } 125 }); 126 if (props == null) { 127 props = Sheet.createPropertiesSet(); 128 sheet.put(props); 129 } 130 131 try { 132 Node.Property uriProp = new NamespaceProperty( 134 getReference().get(), 135 Documentation.SOURCE_PROPERTY, NbBundle.getMessage(DocumentationNode.class,"PROP_URI_DisplayName"), NbBundle.getMessage(DocumentationNode.class,"HINT_URI") ,null) { 139 @Override 140 public java.beans.PropertyEditor getPropertyEditor() { 141 return new StringEditor(); 142 } 143 }; 144 props.put(new SchemaModelFlushWrapper(getReference().get(), uriProp)); 145 146 Node.Property langProp = new BaseSchemaProperty( 148 getReference().get(), 149 String .class, Documentation.LANGUAGE_PROPERTY, NbBundle.getMessage(DocumentationNode.class,"PROP_Language_DisplayName"), NbBundle.getMessage(DocumentationNode.class,"HINT_Language") , LanguageEditor.class) { 154 public void setValue(Object o) throws 155 IllegalAccessException , InvocationTargetException { 156 if(o==null) { 157 super.setValue(null); 158 return; 159 } 160 if(o instanceof String ) { 161 String lang = (String )o; 162 if(Pattern.matches( 163 "([a-zA-Z]{2}|[iI]-[a-zA-Z]+|[xX]-[a-zA-Z]{1,8})(-[a-zA-Z]{1,8})*" 164 ,lang)) { 165 super.setValue(o); 166 SchemaSettings.getDefault().setLanguage(lang); 167 return; 168 } 169 } 170 String msg = NbBundle.getMessage(DocumentationNode.class, 171 "MSG_Invalid_Language",o); IllegalArgumentException iae = new IllegalArgumentException (msg); 173 ErrorManager.getDefault().annotate(iae, ErrorManager.USER, 174 msg, msg, null, new java.util.Date ()); 175 throw iae; 176 } 177 }; 178 179 props.put(new SchemaModelFlushWrapper(getReference().get(),langProp)); 180 181 Node.Property textProp = new BaseSchemaProperty( 183 getReference().get(), 184 String .class, Documentation.CONTENT_PROPERTY, NbBundle.getMessage(DocumentationNode.class,"PROP_Text_DisplayName"), NbBundle.getMessage(DocumentationNode.class,"HINT_Text") , null) { 189 public Object getValue() { 190 return getReference().get().getContentFragment(); 191 } 192 public PropertyEditor getPropertyEditor() { 193 if (hasCustomizer()) { 194 return new PropertyEditorSupport () { 195 public boolean supportsCustomEditor() { 196 return true; 197 } 198 public java.awt.Component getCustomEditor() { 199 return getCustomizer(); 200 } 201 202 }; 203 } 204 return super.getPropertyEditor(); 205 } 206 }; 207 208 props.put(new SchemaModelFlushWrapper(getReference().get(),textProp)); 209 210 props.remove("structure"); 211 212 } catch (NoSuchMethodException nsme) { 213 assert false:"properties must be defined"; 214 } 215 return sheet; 216 } 217 218 @Override 219 public Action getPreferredAction() { 220 ReadOnlyCookie roc = (ReadOnlyCookie) getContext().getLookup().lookup( 221 ReadOnlyCookie.class); 222 if (roc == null || !roc.isReadOnly()) { 223 return SystemAction.get(CustomizeAction.class); 224 } 225 return super.getPreferredAction(); 226 } 227 228 229 protected CustomizerProvider getCustomizerProvider() { 230 return new CustomizerProvider() { 231 public Customizer getCustomizer() { 232 return new DocumentationCustomizer(getReference()); 233 } 234 }; 235 } 236 237 public boolean hasCustomizer() { 238 return isEditable(); 239 } 240 241 public static class LanguageEditor extends StringEditor 242 implements ExPropertyEditor { 243 246 public LanguageEditor() { 247 } 248 249 private static String [] languages = {"en","en-US","en-GB"}; 250 public String [] getTags() { 251 return languages; 252 } 253 254 public boolean isPaintable() { 255 return false; 256 } 257 262 public void attachEnv(PropertyEnv env ) { 263 FeatureDescriptor desc = env.getFeatureDescriptor(); 264 desc.setValue("canEditAsText", Boolean.TRUE); } 267 } 268 } 269 | Popular Tags |