1 19 20 25 26 package org.netbeans.modules.xml.schema.ui.nodes.categorized.customizer; 27 28 import java.io.IOException ; 29 import java.beans.PropertyChangeEvent ; 30 import java.beans.PropertyChangeListener ; 31 import org.netbeans.modules.xml.schema.model.AttributeGroupReference; 32 import org.netbeans.modules.xml.schema.model.AttributeReference; 33 import org.netbeans.modules.xml.schema.model.ElementReference; 34 import org.netbeans.modules.xml.schema.model.GlobalAttribute; 35 import org.netbeans.modules.xml.schema.model.GlobalAttributeGroup; 36 import org.netbeans.modules.xml.schema.model.GlobalElement; 37 import org.netbeans.modules.xml.schema.model.GlobalGroup; 38 import org.netbeans.modules.xml.schema.model.GroupReference; 39 import org.netbeans.modules.xml.schema.model.ReferenceableSchemaComponent; 40 import org.netbeans.modules.xml.schema.model.SchemaComponent; 41 import org.netbeans.modules.xml.schema.model.SchemaComponentReference; 42 import org.netbeans.modules.xml.schema.model.visitor.DefaultSchemaVisitor; 43 import org.netbeans.modules.xml.schema.ui.basic.editors.SchemaComponentSelectionPanel; 44 import org.netbeans.modules.xml.xam.ui.customizer.MessageDisplayer; 45 import org.openide.util.HelpCtx; 46 47 52 public class ReferenceCustomizer<T extends SchemaComponent> 53 extends AbstractSchemaComponentCustomizer<T> 54 implements PropertyChangeListener { 55 56 static final long serialVersionUID = 1L; 57 58 61 public ReferenceCustomizer(SchemaComponentReference<T> reference, 62 SchemaComponent parent) { 63 super(reference, parent); 64 this.refVisitor = new ReferenceVisitor(reference.get()); 65 initComponents(); 66 reset(); 67 } 68 69 public void applyChanges() throws IOException { 70 if(canApply()) { 71 setRef(); 72 } 73 } 74 75 public void reset() { 76 initializeModel(); 77 initializeUISelection(); 78 if(hasParent()||getUIRef()==null) { 79 setSaveEnabled(false); 80 } else { 81 setSaveEnabled(true); 82 } 83 setResetEnabled(false); 84 } 85 86 89 protected ReferenceableSchemaComponent getRef() { 90 return refVisitor.getRef(); 91 } 92 93 96 protected void initializeModel(){}; 97 98 102 protected void setRef(){ 103 refVisitor.setRef(getUIRef()); 104 }; 105 106 109 private void selectModelNode() { 110 refVisitor.getComponentSelectionPanel().removePropertyChangeListener(this); 111 refVisitor.reset(); 112 refVisitor.getComponentSelectionPanel().addPropertyChangeListener(this); 113 } 114 115 119 private void initializeTypeView() { 120 refVisitor.getComponentSelectionPanel().addPropertyChangeListener(this); 121 typePanel.add(refVisitor.getComponentSelectionPanel().getTypeSelectionPanel(), 122 java.awt.BorderLayout.CENTER); 123 refVisitor.getComponentSelectionPanel().getTypeSelectionPanel(). 124 getAccessibleContext().setAccessibleParent(typePanel); 125 } 126 127 private void initializeUISelection() { 128 getMessageDisplayer().clear(); 129 selectModelNode(); 130 } 131 132 137 protected ReferenceableSchemaComponent getUIRef() { 138 return refVisitor.getComponentSelectionPanel().getCurrentSelection(); 139 } 140 141 147 private void initComponents() { 149 typePanel = new javax.swing.JPanel (); 150 mPanel = new javax.swing.JPanel (); 151 152 typePanel.setLayout(new java.awt.BorderLayout ()); 153 154 initializeTypeView(); 155 156 mPanel.setLayout(new java.awt.BorderLayout ()); 157 158 mPanel.add(getMessageDisplayer().getComponent(),java.awt.BorderLayout.CENTER); 159 160 org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); 161 this.setLayout(layout); 162 layout.setHorizontalGroup( 163 layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 164 .add(org.jdesktop.layout.GroupLayout.TRAILING, mPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) 165 .add(layout.createSequentialGroup() 166 .add(10, 10, 10) 167 .add(typePanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE) 168 .addContainerGap()) 169 ); 170 layout.setVerticalGroup( 171 layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 172 .add(layout.createSequentialGroup() 173 .addContainerGap() 174 .add(typePanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 407, Short.MAX_VALUE) 175 .add(0, 0, 0) 176 .add(mPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 37, Short.MAX_VALUE)) 177 ); 178 } 180 186 public void propertyChange(PropertyChangeEvent event) { 187 if (event.getPropertyName().equals(SchemaComponentSelectionPanel.PROPERTY_SELECTION)) { 188 determineValidity(); 189 } 190 } 191 192 196 private void determineValidity() { 197 getMessageDisplayer().clear(); 198 ReferenceableSchemaComponent ref = getUIRef(); 199 if(ref!=null) { 200 if(getRef()==ref) { 201 setResetEnabled(false); 202 setSaveEnabled(!hasParent()); 203 } else { 204 setResetEnabled(true); 205 setSaveEnabled(true); 206 } 207 } else { 208 setResetEnabled(getRef()!=null); 209 setSaveEnabled(false); 210 getMessageDisplayer().annotate(org.openide.util.NbBundle. 211 getMessage(ReferenceCustomizer.class, 212 "MSG_Reference_Error"), 213 MessageDisplayer.Type.ERROR); 214 } 215 } 216 217 public HelpCtx getHelpCtx() { 218 return new HelpCtx(ReferenceCustomizer.class); 219 } 220 221 222 public javax.swing.JPanel mPanel; 224 public javax.swing.JPanel typePanel; 225 227 private transient ReferenceVisitor refVisitor; 228 229 private static class ReferenceVisitor extends DefaultSchemaVisitor { 230 private SchemaComponent component; 231 private OPERATION operation; 232 private static enum OPERATION {GET,SET}; 233 private ReferenceableSchemaComponent ref; 234 private SchemaComponentSelectionPanel<? extends ReferenceableSchemaComponent> 235 componentSelectionPanel; 236 public ReferenceVisitor(SchemaComponent component) { 237 this.component = component; 238 this.operation = null; 239 component.accept(this); 240 } 241 public void visit(ElementReference reference) { 242 if(operation==null) { 243 if(componentSelectionPanel==null) { 244 componentSelectionPanel = new SchemaComponentSelectionPanel 245 <GlobalElement>(reference.getModel(), GlobalElement.class, 246 (GlobalElement)getRef(), null, false); 247 } 248 } else if (operation==OPERATION.GET) { 249 if(reference.getRef()!=null) { 250 ref = reference.getRef().get(); 251 } 252 } else if (operation==OPERATION.SET) { 253 reference.setRef(reference.getModel().getFactory(). 254 createGlobalReference((GlobalElement)ref, 255 GlobalElement.class,reference)); 256 } 257 } 258 259 public void visit(AttributeReference reference) { 260 if(operation==null) { 261 componentSelectionPanel = new SchemaComponentSelectionPanel<GlobalAttribute>( 262 reference.getModel(), GlobalAttribute.class, 263 (GlobalAttribute)getRef(), null, false); 264 } else if (operation==OPERATION.GET) { 265 if(reference.getRef()!=null) { 266 ref = reference.getRef().get(); 267 } 268 } else if (operation==OPERATION.SET) { 269 reference.setRef(reference.getModel().getFactory(). 270 createGlobalReference((GlobalAttribute)ref, 271 GlobalAttribute.class,reference)); 272 } 273 } 274 275 public void visit(GroupReference reference) { 276 if(operation==null) { 277 componentSelectionPanel = new SchemaComponentSelectionPanel<GlobalGroup>( 278 reference.getModel(), GlobalGroup.class, 279 (GlobalGroup)getRef(), null, false); 280 } else if (operation==OPERATION.GET) { 281 if(reference.getRef()!=null) { 282 ref = reference.getRef().get(); 283 } 284 } else if (operation==OPERATION.SET) { 285 reference.setRef(reference.getModel().getFactory(). 286 createGlobalReference((GlobalGroup)ref, 287 GlobalGroup.class,reference)); 288 } 289 } 290 291 public void visit(AttributeGroupReference reference) { 292 if(operation==null) { 293 componentSelectionPanel = new SchemaComponentSelectionPanel<GlobalAttributeGroup>( 294 reference.getModel(), GlobalAttributeGroup.class, 295 (GlobalAttributeGroup)getRef(), null, false); 296 } else if (operation==OPERATION.GET) { 297 if(reference.getGroup()!=null) { 298 ref = reference.getGroup().get(); 299 } 300 } else if (operation==OPERATION.SET) { 301 reference.setGroup(reference.getModel().getFactory(). 302 createGlobalReference((GlobalAttributeGroup)ref, 303 GlobalAttributeGroup.class,reference)); 304 } 305 } 306 307 public SchemaComponentSelectionPanel<? extends ReferenceableSchemaComponent> 308 getComponentSelectionPanel() { 309 return componentSelectionPanel; 310 } 311 312 public ReferenceableSchemaComponent getRef() { 313 operation=OPERATION.GET; 314 ref = null; 315 component.accept(this); 316 return ref; 317 } 318 319 public void setRef(ReferenceableSchemaComponent ref) { 320 operation=OPERATION.SET; 321 this.ref = ref; 322 component.accept(this); 323 } 324 325 public void reset() { 326 } 327 } 328 } 329 | Popular Tags |