1 19 20 26 package org.netbeans.modules.xml.wsdl.ui.api.property; 27 28 import java.awt.BorderLayout ; 29 import java.beans.PropertyChangeEvent ; 30 import java.beans.PropertyChangeListener ; 31 import java.beans.PropertyChangeSupport ; 32 import java.util.ArrayList ; 33 import java.util.Collection ; 34 import java.util.List ; 35 import java.util.regex.Matcher ; 36 import java.util.regex.Pattern ; 37 38 import javax.swing.JPanel ; 39 40 import org.netbeans.modules.xml.schema.model.GlobalComplexType; 41 import org.netbeans.modules.xml.schema.model.GlobalElement; 42 import org.netbeans.modules.xml.schema.model.GlobalSimpleType; 43 import org.netbeans.modules.xml.schema.model.GlobalType; 44 import org.netbeans.modules.xml.schema.model.Schema; 45 import org.netbeans.modules.xml.schema.model.SchemaComponent; 46 import org.netbeans.modules.xml.schema.model.SchemaComponentReference; 47 import org.netbeans.modules.xml.schema.model.SchemaModelReference; 48 import org.netbeans.modules.xml.schema.ui.nodes.SchemaComponentNode; 49 import org.netbeans.modules.xml.schema.ui.nodes.SchemaNodeFactory; 50 import org.netbeans.modules.xml.schema.ui.nodes.categorized.CategorizedSchemaNodeFactory; 51 import org.netbeans.modules.xml.schema.ui.nodes.categorized.ReadOnlySchemaComponentNode; 52 import org.netbeans.modules.xml.wsdl.model.Import; 53 import org.netbeans.modules.xml.wsdl.model.Types; 54 import org.netbeans.modules.xml.wsdl.model.WSDLModel; 55 import org.netbeans.modules.xml.wsdl.ui.netbeans.module.Utility; 56 import org.netbeans.modules.xml.wsdl.ui.view.treeeditor.NodesFactory; 57 import org.netbeans.modules.xml.wsdl.ui.wsdl.nodes.XSDBuiltInTypeFolderNode; 58 import org.netbeans.modules.xml.wsdl.ui.wsdl.nodes.XSDTypesNode; 59 import org.openide.explorer.ExplorerManager; 60 import org.openide.explorer.propertysheet.PropertyEnv; 61 import org.openide.explorer.view.BeanTreeView; 62 import org.openide.nodes.AbstractNode; 63 import org.openide.nodes.Children; 64 import org.openide.nodes.FilterNode; 65 import org.openide.nodes.Node; 66 import org.openide.util.Lookup; 67 import org.openide.util.NbBundle; 68 69 70 71 77 public class ElementOrTypePropertyPanel extends JPanel { 78 79 82 private static final long serialVersionUID = 2865334936262009560L; 83 84 private PropertyEnv mEnv; 85 86 private WsdlPartnerLinkTypeTreeView mTreeView; 87 88 private Node mSelectedNode; 89 90 private WSDLModel mModel; 91 92 private ElementOrTypeProvider mProv; 93 94 95 public ElementOrTypePropertyPanel(ElementOrTypeProvider prov, PropertyEnv env) { 96 this.mProv = prov; 97 this.mEnv = env; 98 this.mEnv.setState(PropertyEnv.STATE_INVALID); 99 100 this.mModel = mProv.getModel(); 101 102 initGUI(); 103 } 104 105 private void initGUI() { 106 this.setLayout(new BorderLayout ()); 107 ElementOrType elementOrType = mProv.getElementOrType(); 108 109 this.mTreeView = new WsdlPartnerLinkTypeTreeView(elementOrType); 110 this.add(BorderLayout.CENTER, this.mTreeView); 111 } 112 113 114 @Override 115 public void removeNotify() { 116 if (mEnv.getState().equals(PropertyEnv.STATE_VALID)) { 117 if (mSelectedNode != null) { 118 ElementOrType elementOrType = null; 119 SchemaComponent sc = null; 120 SchemaComponentReference reference = (SchemaComponentReference) mSelectedNode.getLookup().lookup(SchemaComponentReference.class); 121 if (reference != null) { 122 sc = reference.get(); 123 } 124 if (sc == null) { 125 sc = (SchemaComponent) mSelectedNode.getLookup().lookup(SchemaComponent.class); 126 } 127 128 if (sc != null) { 129 if (sc instanceof GlobalType) { 130 elementOrType = createType((GlobalType) sc); 131 } else if (sc instanceof GlobalElement) { 132 elementOrType = createElement((GlobalElement) sc); 133 } 134 } 135 136 137 if(elementOrType != null) { 138 this.firePropertyChange(ElementOrTypePropertyEditor.PROP_NAME, null, elementOrType); 139 } 140 141 } 142 143 } else { 144 } 145 super.removeNotify(); 146 } 147 148 private ElementOrType createElement(GlobalElement element) { 149 return new ElementOrType(element, mProv.getModel()); 150 } 151 152 private ElementOrType createType(GlobalType type) { 153 return new ElementOrType(type, mProv.getModel()); 154 } 155 156 private class WsdlPartnerLinkTypeTreeView 157 extends JPanel implements ExplorerManager.Provider { 158 159 162 private static final long serialVersionUID = -6287320647253756110L; 163 164 private BeanTreeView btv; 165 166 private ExplorerManager manager; 167 168 169 public static final String PROP_VALID_NODE_SELECTED = "PROP_VALID_NODE_SELECTED"; 171 public static final String PROP_DUPLICATE_NODE_SELECTED = "PROP_DUPLICATE_NODE_SELECTED"; 173 public PropertyChangeSupport pChangeSupport = new PropertyChangeSupport (this); 174 175 private Node mRootNode; 176 177 private ElementOrType previousSelection; 178 179 180 181 182 public WsdlPartnerLinkTypeTreeView(ElementOrType elementOrType) { 183 initGUI(); 184 previousSelection = elementOrType; 185 } 186 187 188 @Override 189 public void addPropertyChangeListener(PropertyChangeListener listener) { 190 pChangeSupport.addPropertyChangeListener(listener); 191 } 192 193 @Override 194 public void removePropertyChangeListener(PropertyChangeListener listener) { 195 pChangeSupport.removePropertyChangeListener(listener); 196 } 197 198 private void initGUI() { 199 this.setLayout(new BorderLayout ()); 200 201 manager = new ExplorerManager(); 202 manager.addPropertyChangeListener(new ExplorerPropertyChangeListener()); 203 204 mRootNode = new AbstractNode(new Children.Array()); 205 populateRootNode(); 206 manager.setRootContext( mRootNode ); 207 208 209 btv = new BeanTreeView(); 211 btv.setRootVisible( false ); 212 btv.setSelectionMode( javax.swing.tree.TreeSelectionModel.SINGLE_TREE_SELECTION ); 213 btv.setPopupAllowed( false ); 214 btv.expandNode(mRootNode); 215 btv.setDefaultActionAllowed(false); 216 Utility.expandNodes(btv, 4, mRootNode); 217 manager.setExploredContext(mRootNode); 218 this.add(btv, BorderLayout.CENTER); 219 btv.setName(NbBundle.getMessage(ElementOrTypePropertyPanel.class, "ElementOrTypePropertyPanel.btv.name")); btv.getAccessibleContext().setAccessibleName(NbBundle.getMessage(ElementOrTypePropertyPanel.class, "ElementOrTypePropertyPanel.btv.AccessibleContext.accessibleName")); btv.getAccessibleContext().setAccessibleDescription(NbBundle.getMessage(ElementOrTypePropertyPanel.class, "ElementOrTypePropertyPanel.btv.AccessibleContext.accessibleDescription")); } 223 224 public ExplorerManager getExplorerManager() { 225 return manager; 226 } 227 228 BeanTreeView getTreeView() { 229 return this.btv; 230 } 231 232 private void populateRootNode() { 233 Types types = mModel.getDefinitions().getTypes(); 235 if(types != null) { 236 XSDTypesNode typesNode = new XSDTypesNode(NodesFactory.getInstance().create(types), types.getSchemas()); 237 mRootNode.getChildren().add(new Node[] {new EnabledNode(typesNode)}); 238 } 239 240 XSDBuiltInTypeFolderNode builtInTypes = new XSDBuiltInTypeFolderNode(); 242 mRootNode.getChildren().add(new Node[] {new EnabledNode(builtInTypes)}); 243 244 List <Class <? extends SchemaComponent>> filters = new ArrayList <Class <? extends SchemaComponent>>(); 246 filters.add(GlobalSimpleType.class); 247 filters.add(GlobalComplexType.class); 248 filters.add(GlobalElement.class); 249 filters.add(SchemaModelReference.class); 250 Collection <Import> importedSchemas = mModel.getDefinitions().getImports(); 251 for (Import imp : importedSchemas) { 252 List list = imp.getModel().findSchemas(imp.getNamespace()); 253 if (list != null && list.size() > 0) { 254 Schema schema = (Schema) list.get(0); 255 SchemaNodeFactory factory = new CategorizedSchemaNodeFactory( 256 schema.getModel(), filters, Lookup.EMPTY); 257 Node node = factory.createNode(schema); 258 mRootNode.getChildren().add(new Node[] { new EnabledNode(node) }); 259 } 260 } 261 262 } 263 264 265 266 class ExplorerPropertyChangeListener implements PropertyChangeListener { 267 268 public void propertyChange(PropertyChangeEvent evt) { 269 if(evt.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) { 270 Node[] nodes = (Node[]) evt.getNewValue(); 271 if(nodes.length > 0) { 272 Node node = nodes[0]; 273 mSelectedNode = null; 275 mEnv.setState(PropertyEnv.STATE_INVALID); 276 SchemaComponent sc = null; 277 SchemaComponentReference reference = (SchemaComponentReference) node.getLookup().lookup(SchemaComponentReference.class); 278 if (reference != null) { 279 sc = reference.get(); 280 } 281 if (sc == null) { 282 sc = (SchemaComponent) node.getLookup().lookup(SchemaComponent.class); 283 } 284 285 if (sc != null && (sc instanceof GlobalType || sc instanceof GlobalElement)) { 286 mSelectedNode = node; 287 mEnv.setState(PropertyEnv.STATE_VALID); 288 } 289 } 290 } 291 } 292 } 293 } 294 295 298 public static class EnabledNode extends FilterNode { 299 private static Pattern pattern = Pattern.compile("(^<font.*>)(.*)(<.*>$)"); 300 301 public EnabledNode(Node node) { 302 super(node, new EnabledChildren(node)); 303 } 304 305 @Override 306 public String getHtmlDisplayName() 307 { 308 String retValue = super.getHtmlDisplayName(); 310 if(retValue == null) retValue = getDisplayName(); 311 312 313 if(retValue != null) { 314 Matcher matcher = pattern.matcher(retValue); 315 if (matcher.find()) { 316 return matcher.group(2); 317 } 318 } 319 return retValue; 320 } 321 322 323 } 324 325 private static class EnabledChildren extends FilterNode.Children { 326 327 public EnabledChildren(Node node) { 328 super(node); 329 } 330 331 @Override 332 protected Node[] createNodes(Node n) { 333 return new Node[] {new EnabledNode(n)}; 334 } 335 336 } 337 338 339 } 340 341 | Popular Tags |