1 19 20 package org.netbeans.modules.xml.schema.abe.wizard; 21 22 import java.awt.Component ; 23 import java.util.HashMap ; 24 import java.util.HashSet ; 25 import java.util.Iterator ; 26 import java.util.List ; 27 import java.util.Set ; 28 import javax.swing.event.ChangeEvent ; 29 import javax.swing.event.ChangeListener ; 30 import org.netbeans.modules.xml.axi.AXIModel; 31 import org.netbeans.modules.xml.axi.AXIModelFactory; 32 import org.netbeans.modules.xml.axi.Element; 33 import org.netbeans.modules.xml.axi.SchemaGenerator; 34 import org.netbeans.modules.xml.axi.SchemaGeneratorFactory; 35 import org.netbeans.modules.xml.schema.model.SchemaModel; 36 import org.openide.WizardDescriptor; 37 import org.openide.util.HelpCtx; 38 import org.openide.util.NbBundle; 39 import org.openide.util.RequestProcessor; 40 41 public class SchemaTransformPatternSelection implements WizardDescriptor.Panel, ChangeListener { 42 private static final long serialVersionUID = 1L; 43 44 SchemaGenerator.Pattern inferedPattern; 45 46 RequestProcessor.Task transformTask = null; 47 48 HashMap <SchemaGenerator.Pattern,SchemaGeneratorFactory.TransformHint> hintMap = 50 new HashMap <SchemaGenerator.Pattern,SchemaGeneratorFactory.TransformHint>(); 51 52 List <Element> ges = null; 53 54 58 private SchemaTransformPatternSelectionUI component; 59 60 private WizardDescriptor wizard = null; 61 62 public SchemaTransformPatternSelection(SchemaGenerator.Pattern inferedPattern) { 63 this.inferedPattern = inferedPattern; 64 } 65 66 public Component getComponent() { 71 if (component == null) { 72 component = new SchemaTransformPatternSelectionUI(inferedPattern); 73 component.addChangeListener(this); 74 75 transformTask = RequestProcessor.getDefault().create(new Runnable () { 80 public void run() { 81 try { 82 isValid(); 83 } catch(Throwable th) { 84 transformTask.schedule(300); 85 } 86 } 87 }); 88 transformTask.schedule(200); 89 } 90 return component; 91 } 92 93 public HelpCtx getHelp() { 94 return new HelpCtx(SchemaTransformPatternSelection.class); } 96 97 public boolean isValid() { 98 SchemaModel sm = (SchemaModel) 99 wizard.getProperty(SchemaTransformWizard.SCHEMA_MODEL_KEY); 100 SchemaGenerator.Pattern inferedPattern = (SchemaGenerator.Pattern) 101 wizard.getProperty(SchemaTransformWizard.INFERED_DESIGN_PATTERN_KEY); 102 SchemaGenerator.Pattern selectedPattern = (SchemaGenerator.Pattern) 103 wizard.getProperty(SchemaTransformWizard.SELECTED_DESIGN_PATTERN_KEY); 104 if(inferedPattern != null && selectedPattern != null) { 105 SchemaGeneratorFactory.TransformHint hint = 106 SchemaGeneratorFactory.TransformHint.OK; 107 try { 108 if(ges == null) ges = SchemaGeneratorFactory.getDefault(). 110 findMasterGlobalElements( 111 AXIModelFactory.getDefault().getModel(sm)); 112 hint = canTransformSchema(sm, inferedPattern, selectedPattern, ges); 113 } 114 catch(Throwable th) { 115 hint = SchemaGeneratorFactory.TransformHint.INVALID_SCHEMA; 116 } 117 if(hint != SchemaGeneratorFactory.TransformHint.OK) { 118 if(inferedPattern == selectedPattern || 119 hint == SchemaGeneratorFactory.TransformHint.INVALID_SCHEMA || 120 hint == SchemaGeneratorFactory.TransformHint.NO_GLOBAL_ELEMENTS || 121 hint == SchemaGeneratorFactory.TransformHint. 122 GLOBAL_ELEMENTS_HAVE_NO_CHILD_ELEMENTS|| 123 hint == SchemaGeneratorFactory.TransformHint. 124 GLOBAL_ELEMENTS_HAVE_NO_CHILD_ATTRIBUTES|| 125 hint == SchemaGeneratorFactory.TransformHint. 126 GLOBAL_ELEMENTS_HAVE_NO_CHILD_ELEMENTS_AND_ATTRIBUTES|| 127 hint == SchemaGeneratorFactory.TransformHint. 128 GLOBAL_ELEMENTS_HAVE_NO_GRAND_CHILDREN) { 129 setErrorMessage("MSG_SchemaTransform_Error_"+hint.toString(), 130 new Object []{NbBundle.getMessage( 131 SchemaTransformPatternSelectionUI.class, 132 "LBL_SchemaTransform_"+selectedPattern.toString())}); 133 return false; 134 } else if(hint == SchemaGeneratorFactory.TransformHint. 135 CANNOT_REMOVE_GLOBAL_ELEMENTS) { 136 SchemaGenerator.Pattern other = SchemaGenerator.Pattern.SALAMI_SLICE; 137 if(inferedPattern == SchemaGenerator.Pattern.SALAMI_SLICE) 138 other = SchemaGenerator.Pattern.GARDEN_OF_EDEN; 139 setErrorMessage("MSG_SchemaTransform_Error_"+hint.toString(), 140 new Object []{NbBundle.getMessage( 141 SchemaTransformPatternSelectionUI.class, 142 "LBL_SchemaTransform_"+selectedPattern.toString()), 143 NbBundle.getMessage( 144 SchemaTransformPatternSelectionUI.class, 145 "LBL_SchemaTransform_"+other.toString())}); 146 return false; 147 } else { 148 String warningMsgKey = "MSG_SchemaTransform_Warning_"+hint.toString(); 149 setErrorMessage(warningMsgKey, 150 new Object []{NbBundle.getMessage( 151 SchemaTransformPatternSelectionUI.class, 152 "LBL_SchemaTransform_"+selectedPattern.toString())}); 153 return true; 154 } 155 } 156 } 157 setErrorMessage(null); 158 return true; 159 } 165 166 private SchemaGeneratorFactory.TransformHint canTransformSchema( 167 final SchemaModel sm, final SchemaGenerator.Pattern inferedPattern, 168 final SchemaGenerator.Pattern selectedPattern, List <Element> ges) { 169 SchemaGeneratorFactory.TransformHint hint = hintMap.get(selectedPattern); 170 if(hint == null) { 171 hint = SchemaGeneratorFactory.getDefault().canTransformSchema( 172 sm, inferedPattern, selectedPattern, ges); 173 hintMap.put(selectedPattern, hint); 174 } 175 return hint; 176 } 177 178 private void setErrorMessage(String key) { 179 if ( key == null ) { 180 setLocalizedErrorMessage(""); } else { 182 setLocalizedErrorMessage( 183 NbBundle.getMessage(SchemaTransformPatternSelection.class, key)); } 185 } 186 187 private void setErrorMessage(String key, Object [] params) { 188 if ( key == null ) { 189 setLocalizedErrorMessage(""); } else { 191 setLocalizedErrorMessage( 192 NbBundle.getMessage(SchemaTransformPatternSelection.class, key, params)); } 194 } 195 196 private void setLocalizedErrorMessage(String message) { 197 wizard.putProperty("WizardPanel_errorMessage", message); } 199 200 private final Set <ChangeListener > listeners = new HashSet <ChangeListener >(1); 201 public final void addChangeListener(ChangeListener l) { 202 synchronized (listeners) { 203 listeners.add(l); 204 } 205 } 206 public final void removeChangeListener(ChangeListener l) { 207 synchronized (listeners) { 208 listeners.remove(l); 209 } 210 } 211 protected final void fireChangeEvent() { 212 Iterator <ChangeListener > it; 213 synchronized (listeners) { 214 it = new HashSet <ChangeListener >(listeners).iterator(); 215 } 216 ChangeEvent ev = new ChangeEvent (this); 217 while (it.hasNext()) { 218 it.next().stateChanged(ev); 219 } 220 } 221 222 public void readSettings(Object settings) { 227 wizard = (WizardDescriptor) settings; 228 Boolean isSingleGlobalElementSelected = 229 (Boolean ) wizard.getProperty(SchemaTransformWizard.SINGLE_GLOBAL_ELEMENT_KEY); 230 if(isSingleGlobalElementSelected != null) 231 component.setSingleGlobalElementSelected( 232 isSingleGlobalElementSelected.booleanValue()); 233 234 Boolean isTypeReuseSelected = 235 (Boolean ) wizard.getProperty(SchemaTransformWizard.TYPE_REUSE_KEY); 236 if(isTypeReuseSelected != null) 237 component.setTypeReuseSelected(isTypeReuseSelected.booleanValue()); 238 } 239 240 public void storeSettings(Object settings) { 241 wizard = (WizardDescriptor) settings; 242 wizard.putProperty(SchemaTransformWizard.SINGLE_GLOBAL_ELEMENT_KEY, 243 Boolean.valueOf(component.isSingleGlobalElementSelected())); 244 wizard.putProperty(SchemaTransformWizard.TYPE_REUSE_KEY, 245 Boolean.valueOf(component.isTypeReuseSelected())); 246 } 247 248 public void stateChanged(ChangeEvent e) { 249 if(wizard != null) 250 wizard.putProperty(SchemaTransformWizard.SELECTED_DESIGN_PATTERN_KEY, 251 component.getSelectedDesignPattern()); 252 fireChangeEvent(); 253 } 254 255 } 256 257 | Popular Tags |