1 19 20 package org.netbeans.modules.xml.schema.ui.nodes.categorized.customizer; 21 22 import java.util.Collection ; 23 import org.netbeans.modules.xml.retriever.catalog.Utilities; 24 import org.netbeans.modules.xml.schema.model.Schema; 25 import org.netbeans.modules.xml.schema.model.SchemaModel; 26 import org.netbeans.modules.xml.schema.model.SchemaModelReference; 27 import org.netbeans.modules.xml.schema.ui.basic.NameGenerator; 28 import org.netbeans.modules.xml.xam.Model; 29 import org.netbeans.modules.xml.xam.locator.CatalogModelException; 30 import org.netbeans.modules.xml.xam.ui.customizer.AbstractReferenceCustomizer; 31 import org.netbeans.modules.xml.xam.ui.customizer.AbstractReferenceDecorator; 32 import org.netbeans.modules.xml.xam.ui.customizer.ExternalReferenceDataNode; 33 import org.netbeans.modules.xml.xam.ui.customizer.ExternalReferenceNode; 34 import org.openide.nodes.Node; 35 import org.openide.util.NbBundle; 36 37 42 public class SchemaReferenceDecorator extends AbstractReferenceDecorator { 43 44 private AbstractReferenceCustomizer customizer; 45 46 private int prefixCounter; 47 48 53 public SchemaReferenceDecorator(AbstractReferenceCustomizer customizer) { 54 this.customizer = customizer; 55 } 56 57 public String validate(ExternalReferenceNode node) { 58 if (node.hasModel()) { 59 Model model = node.getModel(); 60 if (model == null) { 61 return NbBundle.getMessage(SchemaReferenceDecorator.class, 63 "LBL_SchemaReferenceDecorator_NoModel"); 64 } 65 Model componentModel = customizer.getComponentModel(); 66 if (model.equals(componentModel)) { 67 return NbBundle.getMessage(SchemaReferenceDecorator.class, 68 "LBL_SchemaReferenceDecorator_SameModel"); 69 } 70 if (componentModel instanceof SchemaModel) { 72 SchemaModel sm = (SchemaModel) componentModel; 73 Collection <SchemaModelReference> references = 74 sm.getSchema().getSchemaReferences(); 75 for (SchemaModelReference ref : references) { 78 try { 79 SchemaModel otherModel = ref.resolveReferencedModel(); 80 if (model.equals(otherModel)) { 81 return NbBundle.getMessage(SchemaReferenceDecorator.class, 82 "LBL_SchemaReferenceDecorator_AlreadyRefd"); 83 } 84 } catch (CatalogModelException cme) { 85 } 87 } 88 } 89 } 90 String ns = node.getNamespace(); 91 String namespace = customizer.getTargetNamespace(); 92 if (customizer.mustNamespaceDiffer()) { 93 if (ns != null && !Utilities.NO_NAME_SPACE.equals(ns) && 96 namespace != null && namespace.equals(ns)) { 97 return NbBundle.getMessage(SchemaReferenceDecorator.class, 98 "LBL_SchemaReferenceDecorator_SameNamespace"); 99 } 100 } else { 101 if (ns != null && !Utilities.NO_NAME_SPACE.equals(ns) && 104 namespace != null && !namespace.equals(ns)) { 105 return NbBundle.getMessage(SchemaReferenceDecorator.class, 106 "LBL_SchemaReferenceDecorator_DifferentNamespace"); 107 } 108 } 109 return null; 110 } 111 112 public ExternalReferenceDataNode createExternalReferenceNode(Node original) { 113 return customizer.createExternalReferenceNode(original); 114 } 115 116 protected String generatePrefix(Model model) { 117 Model ourModel = customizer.getComponentModel(); 118 if (ourModel instanceof SchemaModel) { 119 return NameGenerator.getInstance().generateNamespacePrefix( 120 null, (SchemaModel) ourModel, prefixCounter++); 121 } 122 return ""; 123 } 124 125 public Utilities.DocumentTypesEnum getDocumentType() { 126 return Utilities.DocumentTypesEnum.schema; 127 } 128 129 public String getHtmlDisplayName(String name, ExternalReferenceNode node) { 130 if (validate(node) != null) { 131 return "<s>" + name + "</s>"; 132 } 133 return name; 134 } 135 136 public String getNamespace(Model model) { 137 if (model instanceof SchemaModel) { 138 SchemaModel sm = (SchemaModel) model; 139 Schema schema = sm.getSchema(); 140 if (schema != null) { 141 return schema.getTargetNamespace(); 142 } 143 } 144 return null; 145 } 146 } 147 | Popular Tags |