1 19 20 package org.netbeans.modules.xml.wsdl.ui.view.grapheditor.widget; 21 22 import java.awt.Color ; 23 import java.awt.Dialog ; 24 import java.awt.Insets ; 25 import java.awt.event.ActionEvent ; 26 import java.awt.event.ActionListener ; 27 import java.beans.PropertyChangeEvent ; 28 import java.beans.PropertyChangeListener ; 29 import java.util.HashMap ; 30 import java.util.Map ; 31 32 import org.netbeans.api.project.FileOwnerQuery; 33 import org.netbeans.api.project.Project; 34 import org.netbeans.api.visual.border.Border; 35 import org.netbeans.api.visual.widget.LabelWidget; 36 import org.netbeans.api.visual.widget.Scene; 37 import org.netbeans.api.visual.widget.Widget; 38 import org.netbeans.modules.xml.schema.model.GlobalElement; 39 import org.netbeans.modules.xml.schema.model.GlobalType; 40 import org.netbeans.modules.xml.schema.model.SchemaComponent; 41 import org.netbeans.modules.xml.wsdl.model.Part; 42 import org.netbeans.modules.xml.wsdl.model.WSDLModel; 43 import org.netbeans.modules.xml.wsdl.ui.netbeans.module.Utility; 44 import org.netbeans.modules.xml.wsdl.ui.view.ElementOrType; 45 import org.netbeans.modules.xml.wsdl.ui.view.ElementOrTypeChooserEditorPanel; 46 import org.netbeans.modules.xml.wsdl.ui.view.ElementOrTypeChooserPanel; 47 import org.netbeans.modules.xml.wsdl.ui.view.grapheditor.border.FilledBorder; 48 import org.netbeans.modules.xml.wsdl.ui.view.grapheditor.layout.LeftRightLayout; 49 import org.netbeans.modules.xml.xam.ModelSource; 50 import org.netbeans.modules.xml.xam.dom.AbstractDocumentComponent; 51 import org.openide.DialogDescriptor; 52 import org.openide.DialogDisplayer; 53 import org.openide.filesystems.FileObject; 54 import org.openide.util.NbBundle; 55 56 60 public class PartTypeChooserWidget extends Widget implements ActionListener { 61 62 private LabelWidget partTypeLabel; 63 private ButtonWidget showPartTypeChooserButton; 64 private Part part; 65 66 public PartTypeChooserWidget(Scene scene, Part part) { 67 super(scene); 68 69 this.part = part; 70 71 partTypeLabel = new LabelWidget(scene, 72 MessagesUtils.getPartTypeOrElementString(part)); 73 partTypeLabel.setFont(scene.getDefaultFont()); 74 75 showPartTypeChooserButton = new ButtonWidget(scene, "..."); 76 showPartTypeChooserButton.setMargin(new Insets (1, 2, 1, 2)); 77 showPartTypeChooserButton.setActionListener(this); 78 79 addChild(partTypeLabel); 80 addChild(showPartTypeChooserButton); 81 82 setLayout(new LeftRightLayout(8)); 83 setBorder(BORDER); 84 } 85 86 87 ButtonWidget getPartTypeChooserButton() { 88 return showPartTypeChooserButton; 89 } 90 91 public void actionPerformed(ActionEvent event) { 92 WSDLModel wsdlModel = part.getModel(); 93 ModelSource modelSource = wsdlModel.getModelSource(); 94 FileObject wsdlFile = (FileObject) modelSource.getLookup().lookup(FileObject.class); 95 if(wsdlFile != null) { 96 Project project = FileOwnerQuery.getOwner(wsdlFile); 97 if(project != null) { 98 Map <String , String > namespaceToPrefixMap = new HashMap <String , String >(); 99 Map <String , String > map = ((AbstractDocumentComponent)wsdlModel.getDefinitions()).getPrefixes(); 100 for (String prefix : map.keySet()) { 101 namespaceToPrefixMap.put(map.get(prefix), prefix); 102 } 103 104 SchemaComponent comp = part.getElement() == null ? null : part.getElement().get(); 105 if (comp == null) { 106 comp = part.getType() == null ? null : part.getType().get(); 107 } 108 109 final ElementOrTypeChooserPanel panel = new ElementOrTypeChooserPanel(project, namespaceToPrefixMap, wsdlModel, comp); 110 final DialogDescriptor descriptor = new DialogDescriptor(panel , NbBundle.getMessage(ElementOrTypeChooserEditorPanel.class, "ElementOrTypeChooserEditorPanel.Dialog.title"), true, null); 111 final PropertyChangeListener pcl = new PropertyChangeListener () { 112 public void propertyChange(PropertyChangeEvent evt) { 113 if(evt.getSource()== panel && evt.getPropertyName(). 114 equals(ElementOrTypeChooserPanel.PROP_ACTION_APPLY)) { 115 descriptor.setValid(((Boolean ) evt.getNewValue()).booleanValue()); 116 } 117 } 118 }; 119 panel.addPropertyChangeListener(pcl); 120 ActionListener al = new ActionListener () { 122 public void actionPerformed(ActionEvent evt) { 123 if (evt.getSource().equals(DialogDescriptor.OK_OPTION) || 124 evt.getSource().equals(DialogDescriptor.CANCEL_OPTION) || 125 evt.getSource().equals(DialogDescriptor.CLOSED_OPTION)) { 126 panel.removePropertyChangeListener(pcl); 127 } 128 if (evt.getSource().equals(DialogDescriptor.OK_OPTION)) { 129 panel.apply(); 130 SchemaComponent comp1 = panel.getSelectedSchemaComponent(); 131 if (comp1 == null) return; 132 WSDLModel model = part.getModel(); 133 if (comp1 instanceof GlobalType) { 134 try { 135 if (model.startTransaction()) { 136 Utility.addSchemaImport(comp1, model); 137 Utility.addNamespacePrefix(comp1.getModel().getSchema(), model, null); 138 part.setType(model.getDefinitions().createSchemaReference( 139 (GlobalType) comp1, GlobalType.class)); 140 part.setElement(null); 141 } 142 } finally { 143 model.endTransaction(); 144 } 145 } else if (comp1 instanceof GlobalElement) { 146 try { 147 if (model.startTransaction()) { 148 Utility.addSchemaImport(comp1, model); 149 Utility.addNamespacePrefix(comp1.getModel().getSchema(), model, null); 150 part.setElement(model.getDefinitions().createSchemaReference( 151 (GlobalElement) comp1, GlobalElement.class)); 152 part.setType(null); 153 } 154 } finally { 155 model.endTransaction(); 156 } 157 } 158 159 } 160 } 161 }; 162 descriptor.setButtonListener(al); 163 descriptor.setValid(false); 164 Dialog dialog = DialogDisplayer.getDefault().createDialog(descriptor); 165 dialog.setVisible(true); 166 dialog.toFront(); 167 } 168 } 169 } 170 171 172 public static final Border BORDER = new FilledBorder( 173 new Insets (0, 0, 0, 0), new Insets (1, 8, 1, 1), null, Color.WHITE); 174 175 } 176 | Popular Tags |