1 19 20 package org.netbeans.modules.xml.schema.ui.nodes.schema; 21 22 import java.beans.PropertyEditor ; 23 import java.beans.PropertyEditorSupport ; 24 import org.netbeans.modules.xml.schema.model.Constraint; 25 import org.netbeans.modules.xml.schema.model.Element; 26 import org.netbeans.modules.xml.schema.model.KeyRef; 27 import org.netbeans.modules.xml.schema.model.SchemaComponent; 28 import org.netbeans.modules.xml.schema.model.SchemaComponentReference; 29 import org.netbeans.modules.xml.schema.model.visitor.FindReferredConstraintVisitor; 30 import org.netbeans.modules.xml.schema.ui.nodes.SchemaComponentNode; 31 import org.netbeans.modules.xml.schema.ui.nodes.SchemaModelFlushWrapper; 32 import org.netbeans.modules.xml.schema.ui.nodes.SchemaUIContext; 33 import org.netbeans.modules.xml.schema.ui.nodes.schema.properties.BaseSchemaProperty; 34 import org.openide.ErrorManager; 35 import org.openide.nodes.Node.Property; 36 import org.openide.nodes.Children; 37 import org.openide.nodes.Sheet; 38 import org.openide.util.NbBundle; 39 43 public class KeyRefNode extends SchemaComponentNode<KeyRef> 44 { 45 49 public KeyRefNode(SchemaUIContext context, 50 SchemaComponentReference<KeyRef> reference, 51 Children children) 52 { 53 super(context,reference,children); 54 setIconBaseWithExtension( 55 "org/netbeans/modules/xml/schema/ui/nodes/resources/keyRef.png"); 56 } 57 58 59 63 @Override 64 public String getTypeDisplayName() 65 { 66 return NbBundle.getMessage(KeyRefNode.class, 67 "LBL_KeyRefNode_TypeDisplayName"); } 69 70 @Override 71 protected Sheet createSheet() 72 { 73 Sheet sheet = super.createSheet(); 74 Sheet.Set props = sheet.get(Sheet.PROPERTIES); 75 if (props == null) 76 { 77 props = Sheet.createPropertiesSet(); 78 sheet.put(props); 79 } 80 try 81 { 82 Property refererProp = new BaseSchemaProperty( 84 getReference().get(), Constraint.class, KeyRef.REFERER_PROPERTY, NbBundle.getMessage(KeyRefNode.class,"PROP_KeyRef_Referer_DisplayName"), NbBundle.getMessage(KeyRefNode.class,"PROP_KeyRef_Referer_ShortDescription"), null ) 91 { 92 public boolean supportsDefaultValue() 93 { 94 return false; 95 } 96 97 public PropertyEditor getPropertyEditor() 98 { 99 return new ConstraintEditor(getReference().get()); 100 } 101 }; 102 props.put(new SchemaModelFlushWrapper(getReference().get(), refererProp)); 103 104 } 105 catch (NoSuchMethodException nsme) 106 { 107 assert false : "properties should be defined"; 108 } 109 110 return sheet; 111 } 112 113 public static class ConstraintEditor extends PropertyEditorSupport 114 { 115 private SchemaComponent component; 116 public ConstraintEditor(SchemaComponent component) 117 { 118 super(); 119 this.component = component; 120 } 121 122 public void setAsText(String text) throws IllegalArgumentException 123 { 124 SchemaComponent parent = findOutermostParentElement(); 125 FindReferredConstraintVisitor visitor = 126 new FindReferredConstraintVisitor(); 127 128 Constraint c = visitor.findReferredConstraint(parent, text); 129 if(c!=null) 130 { 131 setValue(c); 132 } 133 else 134 { 135 throwError(text); 136 } 137 } 138 139 public String getAsText() 140 { 141 Object val = getValue(); 142 if (val instanceof Constraint) 143 { 144 return ((Constraint)val).getName(); 145 } 146 return null; 147 } 148 149 private SchemaComponent findOutermostParentElement() 150 { 151 SchemaComponent element = null; 152 SchemaComponent sc = component.getParent(); 154 while(sc != null) 155 { 156 if(sc instanceof Element) 157 { 158 element = sc; 159 } 160 sc = sc.getParent(); 161 } 162 return element; 163 } 164 165 private void throwError(String text) 166 { 167 String msg = NbBundle.getMessage(KeyRefNode.class, "LBL_Illegal_Referer_Value", text); IllegalArgumentException iae = new IllegalArgumentException (msg); 169 ErrorManager.getDefault().annotate(iae, ErrorManager.USER, 170 msg, msg, null, new java.util.Date ()); 171 throw iae; 172 173 } 174 } 175 } 176 | Popular Tags |