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.SchemaNodeFactory; 49 import org.netbeans.modules.xml.schema.ui.nodes.categorized.CategorizedSchemaNodeFactory; 50 import org.netbeans.modules.xml.wsdl.model.Import; 51 import org.netbeans.modules.xml.wsdl.model.Part; 52 import org.netbeans.modules.xml.wsdl.model.Types; 53 import org.netbeans.modules.xml.wsdl.model.WSDLComponent; 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.ImportFolderNode; 57 import org.netbeans.modules.xml.wsdl.ui.view.treeeditor.MessageFolderNode; 58 import org.netbeans.modules.xml.wsdl.ui.view.treeeditor.NodesFactory; 59 import org.netbeans.modules.xml.wsdl.ui.wsdl.nodes.XSDBuiltInTypeFolderNode; 60 import org.netbeans.modules.xml.wsdl.ui.wsdl.nodes.XSDTypesNode; 61 import org.openide.explorer.ExplorerManager; 62 import org.openide.explorer.propertysheet.PropertyEnv; 63 import org.openide.explorer.view.BeanTreeView; 64 import org.openide.nodes.AbstractNode; 65 import org.openide.nodes.Children; 66 import org.openide.nodes.FilterNode; 67 import org.openide.nodes.Node; 68 import org.openide.util.Lookup; 69 import org.openide.util.NbBundle; 70 71 72 73 79 public class ElementOrTypeOrMessagePartPropertyPanel extends JPanel { 80 81 private PropertyEnv mEnv; 82 83 private WsdlPartnerLinkTypeTreeView mTreeView; 84 85 private Node mSelectedNode; 86 87 private WSDLModel mModel; 88 89 private ElementOrTypeOrMessagePartProvider mProv; 90 91 92 public ElementOrTypeOrMessagePartPropertyPanel(ElementOrTypeOrMessagePartProvider prov, PropertyEnv env) { 93 this.mProv = prov; 94 this.mEnv = env; 95 this.mEnv.setState(PropertyEnv.STATE_INVALID); 96 97 this.mModel = mProv.getModel(); 98 99 initGUI(); 100 } 101 102 private void initGUI() { 103 this.setLayout(new BorderLayout ()); 104 ElementOrTypeOrMessagePart elementOrTypeOrMessagePart = mProv.getValue(); 105 106 this.mTreeView = new WsdlPartnerLinkTypeTreeView(elementOrTypeOrMessagePart); 107 this.add(BorderLayout.CENTER, this.mTreeView); 108 } 109 110 111 @Override 112 public void removeNotify() { 113 if (mEnv.getState().equals(PropertyEnv.STATE_VALID)) { 114 if (mSelectedNode != null) { 115 ElementOrTypeOrMessagePart elementOrTypeOrMessagePart = null; 116 WSDLComponent comp = (WSDLComponent) mSelectedNode.getLookup().lookup(WSDLComponent.class); 117 if (comp != null) { 118 if (comp instanceof Part) { 119 elementOrTypeOrMessagePart = new ElementOrTypeOrMessagePart((Part) comp, mProv.getModel()); 120 } 121 } else { 122 SchemaComponent sc = null; 123 SchemaComponentReference reference = (SchemaComponentReference) mSelectedNode.getLookup().lookup(SchemaComponentReference.class); 124 if (reference != null) { 125 sc = reference.get(); 126 } 127 if (sc == null) { 128 sc = (SchemaComponent) mSelectedNode.getLookup().lookup(SchemaComponent.class); 129 } 130 131 if (sc != null) { 132 if (sc instanceof GlobalType) { 133 elementOrTypeOrMessagePart = createType((GlobalType) sc); 134 } else if (sc instanceof GlobalElement) { 135 elementOrTypeOrMessagePart = createElement((GlobalElement) sc); 136 } 137 } 138 } 139 140 141 142 if(elementOrTypeOrMessagePart != null) { 143 this.firePropertyChange(ElementOrTypePropertyEditor.PROP_NAME, null, elementOrTypeOrMessagePart); 144 } 145 146 } 147 148 } else { 149 } 150 super.removeNotify(); 151 } 152 153 private ElementOrTypeOrMessagePart createElement(GlobalElement element) { 154 return new ElementOrTypeOrMessagePart(element, mProv.getModel()); 155 } 156 157 private ElementOrTypeOrMessagePart createType(GlobalType type) { 158 return new ElementOrTypeOrMessagePart(type, mProv.getModel()); 159 } 160 161 private class WsdlPartnerLinkTypeTreeView 162 extends JPanel implements ExplorerManager.Provider { 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 ElementOrTypeOrMessagePart previousSelection; 178 179 180 181 182 public WsdlPartnerLinkTypeTreeView(ElementOrTypeOrMessagePart 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(ElementOrTypeOrMessagePartPropertyPanel.class, "ElementOrTypeOrMessagePartPropertyPanel.btv.name")); btv.getAccessibleContext().setAccessibleName(NbBundle.getMessage(ElementOrTypeOrMessagePartPropertyPanel.class, "ElementOrTypeOrMessagePartPropertyPanel.btv.AccessibleContext.accessibleName")); btv.getAccessibleContext().setAccessibleDescription(NbBundle.getMessage(ElementOrTypeOrMessagePartPropertyPanel.class, "ElementOrTypeOrMessagePartPropertyPanel.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 MessageFolderNode msgFolderNode = new MessageFolderNode(mModel.getDefinitions()); 235 mRootNode.getChildren().add(new Node[] {new EnabledNode(msgFolderNode)}); 236 237 ImportFolderNode impFolderNode = new ImportFolderNode(mModel.getDefinitions()); 239 mRootNode.getChildren().add(new Node[] {new EnabledNode(impFolderNode)}); 240 241 242 Types types = mModel.getDefinitions().getTypes(); 244 if(types != null) { 245 XSDTypesNode typesNode = new XSDTypesNode(NodesFactory.getInstance().create(types), types.getSchemas()); 246 mRootNode.getChildren().add(new Node[] {new EnabledNode(typesNode)}); 247 } 248 249 XSDBuiltInTypeFolderNode builtInTypes = new XSDBuiltInTypeFolderNode(); 251 mRootNode.getChildren().add(new Node[] {new EnabledNode(builtInTypes)}); 252 253 List <Class <? extends SchemaComponent>> filters = new ArrayList <Class <? extends SchemaComponent>>(); 255 filters.add(GlobalSimpleType.class); 256 filters.add(GlobalComplexType.class); 257 filters.add(GlobalElement.class); 258 filters.add(SchemaModelReference.class); 259 Collection <Import> importedSchemas = mModel.getDefinitions().getImports(); 260 for (Import imp : importedSchemas) { 261 List list = imp.getModel().findSchemas(imp.getNamespace()); 262 if (list != null && list.size() > 0) { 263 Schema schema = (Schema) list.get(0); 264 SchemaNodeFactory factory = new CategorizedSchemaNodeFactory( 265 schema.getModel(), filters, Lookup.EMPTY); 266 Node node = factory.createNode(schema); 267 mRootNode.getChildren().add(new Node[] { new EnabledNode(node) }); 268 } 269 } 270 271 } 272 273 274 275 class ExplorerPropertyChangeListener implements PropertyChangeListener { 276 277 public void propertyChange(PropertyChangeEvent evt) { 278 if(evt.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) { 279 Node[] nodes = (Node[]) evt.getNewValue(); 280 if(nodes.length > 0) { 281 Node node = nodes[0]; 282 mSelectedNode = null; 284 mEnv.setState(PropertyEnv.STATE_INVALID); 285 286 WSDLComponent comp = (WSDLComponent) node.getLookup().lookup(WSDLComponent.class); 287 if (comp != null && comp instanceof Part) { 288 mSelectedNode = node; 289 mEnv.setState(PropertyEnv.STATE_VALID); 290 return; 291 } 292 SchemaComponent sc = null; 293 SchemaComponentReference reference = (SchemaComponentReference) node.getLookup().lookup(SchemaComponentReference.class); 294 if (reference != null) { 295 sc = reference.get(); 296 } 297 if (sc == null) { 298 sc = (SchemaComponent) node.getLookup().lookup(SchemaComponent.class); 299 } 300 301 if (sc != null && (sc instanceof GlobalType || sc instanceof GlobalElement)) { 302 mSelectedNode = node; 303 mEnv.setState(PropertyEnv.STATE_VALID); 304 } 305 } 306 } 307 } 308 } 309 } 310 311 314 public static class EnabledNode extends FilterNode { 315 private static Pattern pattern = Pattern.compile("(^<font.*>)(.*)(<.*>$)"); 316 317 public EnabledNode(Node node) { 318 super(node, new EnabledChildren(node)); 319 } 320 321 @Override 322 public String getHtmlDisplayName() 323 { 324 String retValue = super.getHtmlDisplayName(); 326 if(retValue == null) retValue = getDisplayName(); 327 328 329 if(retValue != null) { 330 Matcher matcher = pattern.matcher(retValue); 331 if (matcher.find()) { 332 return matcher.group(2); 333 } 334 } 335 return retValue; 336 } 337 338 339 } 340 341 private static class EnabledChildren extends FilterNode.Children { 342 343 public EnabledChildren(Node node) { 344 super(node); 345 } 346 347 @Override 348 protected Node[] createNodes(Node n) { 349 return new Node[] {new EnabledNode(n)}; 350 } 351 352 } 353 354 355 } 356 357 | Popular Tags |