1 19 20 26 package org.netbeans.modules.xml.wsdl.ui.api.property; 27 28 import java.awt.Component ; 29 import java.beans.FeatureDescriptor ; 30 import java.beans.PropertyChangeEvent ; 31 import java.beans.PropertyChangeListener ; 32 import java.beans.PropertyEditorSupport ; 33 import java.util.HashMap ; 34 import java.util.Map ; 35 36 import org.netbeans.api.project.FileOwnerQuery; 37 import org.netbeans.api.project.Project; 38 import org.netbeans.modules.xml.schema.model.GlobalElement; 39 import org.netbeans.modules.xml.schema.model.GlobalType; 40 import org.netbeans.modules.xml.schema.model.SchemaComponent; 41 import org.netbeans.modules.xml.wsdl.model.WSDLModel; 42 import org.netbeans.modules.xml.wsdl.ui.view.ElementOrTypeChooserPanel; 43 import org.netbeans.modules.xml.xam.ModelSource; 44 import org.netbeans.modules.xml.xam.dom.AbstractDocumentComponent; 45 import org.netbeans.modules.xml.xam.ui.XAMUtils; 46 import org.openide.explorer.propertysheet.ExPropertyEditor; 47 import org.openide.explorer.propertysheet.PropertyEnv; 48 import org.openide.filesystems.FileObject; 49 50 51 52 58 public class ElementOrTypePropertyEditor extends PropertyEditorSupport 59 implements ExPropertyEditor, PropertyChangeListener { 60 61 62 public static final String PROP_NAME = "ElementOrType"; 64 65 private PropertyEnv mEnv; 66 67 private ElementOrTypeProvider mElementOrTypeProvider; 68 69 70 public ElementOrTypePropertyEditor(ElementOrTypeProvider elementOrTypeProvider) { 71 this.mElementOrTypeProvider = elementOrTypeProvider; 72 } 73 74 79 public void attachEnv(PropertyEnv env) { 80 this.mEnv = env; 81 FeatureDescriptor desc = env.getFeatureDescriptor(); 82 desc.setValue("canEditAsText", Boolean.FALSE); } 85 86 87 88 89 90 @Override 91 public String [] getTags() { 92 return null; 93 } 94 95 96 @Override 97 public boolean supportsCustomEditor () { 98 return XAMUtils.isWritable(mElementOrTypeProvider.getModel()); 99 } 100 101 102 @Override 103 public Component getCustomEditor () { 104 WSDLModel model = mElementOrTypeProvider.getModel(); 105 ModelSource modelSource = model.getModelSource(); 106 FileObject wsdlFile = (FileObject) modelSource.getLookup().lookup(FileObject.class); 107 if(wsdlFile != null) { 108 Project project = FileOwnerQuery.getOwner(wsdlFile); 109 if(project != null) { 110 111 Map <String , String > namespaceToPrefixMap = new HashMap <String , String >(); 112 Map <String , String > map = ((AbstractDocumentComponent)model.getDefinitions()).getPrefixes(); 113 for (String prefix : map.keySet()) { 114 namespaceToPrefixMap.put(map.get(prefix), prefix); 115 } 116 ElementOrType eot = mElementOrTypeProvider.getElementOrType(); 117 SchemaComponent comp = eot.getElement(); 118 if (comp == null) { 119 comp = eot.getType(); 120 } 121 122 final ElementOrTypeChooserPanel panel = new ElementOrTypeChooserPanel(project, namespaceToPrefixMap, model, comp); 123 124 panel.setEnvForPropertyEditor(mEnv); 125 mEnv.setState(PropertyEnv.STATE_INVALID); 126 final PropertyChangeListener pcl = new PropertyChangeListener () { 127 public void propertyChange(PropertyChangeEvent evt) { 128 if(evt.getSource()== panel && evt.getPropertyName(). 129 equals(ElementOrTypeChooserPanel.PROP_ACTION_APPLY)) { 130 Boolean b = (Boolean ) evt.getNewValue(); 131 mEnv.setState(b.booleanValue() ? PropertyEnv.STATE_VALID : PropertyEnv.STATE_INVALID); 132 } 133 } 134 }; 135 panel.addPropertyChangeListener(ElementOrTypeChooserPanel.PROP_ACTION_APPLY, pcl); 136 panel.addPropertyChangeListener(PROP_NAME, this); 137 return panel; 138 } 139 } 140 return null; 141 } 142 146 public void propertyChange(PropertyChangeEvent evt) { 147 Object comp = evt.getNewValue(); 148 if (comp instanceof GlobalType) { 149 setValue(new ElementOrType((GlobalType) comp, mElementOrTypeProvider.getModel())); 150 } else if (comp instanceof GlobalElement){ 151 setValue(new ElementOrType((GlobalElement) comp, mElementOrTypeProvider.getModel())); 152 } 153 } 154 } 155 156 157 | Popular Tags |