KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > xml > wsdl > ui > view > grapheditor > widget > OperationParameterWidget


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19 /*
20  * LabelAndTextFieldWidget.java
21  *
22  * Created on August 21, 2006, 7:08 PM
23  *
24  * To change this template, choose Tools | Template Manager
25  * and open the template in the editor.
26  */

27
28 package org.netbeans.modules.xml.wsdl.ui.view.grapheditor.widget;
29
30 import java.awt.Color JavaDoc;
31 import java.awt.Font JavaDoc;
32 import java.awt.Point JavaDoc;
33 import java.awt.Rectangle JavaDoc;
34 import java.awt.datatransfer.DataFlavor JavaDoc;
35 import java.awt.datatransfer.Transferable JavaDoc;
36 import java.util.ArrayList JavaDoc;
37 import java.util.EnumSet JavaDoc;
38 import java.util.List JavaDoc;
39 import java.util.ListIterator JavaDoc;
40 import java.util.Vector JavaDoc;
41 import javax.swing.Action JavaDoc;
42 import javax.swing.BorderFactory JavaDoc;
43 import javax.swing.ComboBoxModel JavaDoc;
44 import javax.swing.DefaultComboBoxModel JavaDoc;
45 import org.netbeans.api.visual.action.ActionFactory;
46 import org.netbeans.api.visual.action.InplaceEditorProvider;
47 import org.netbeans.api.visual.action.TextFieldInplaceEditor;
48 import org.netbeans.api.visual.action.WidgetAction.WidgetDropTargetDragEvent;
49 import org.netbeans.api.visual.action.WidgetAction.WidgetDropTargetDropEvent;
50 import org.netbeans.api.visual.layout.Layout;
51 import org.netbeans.api.visual.layout.LayoutFactory;
52 import org.netbeans.api.visual.layout.LayoutFactory.SerialAlignment;
53 import org.netbeans.api.visual.widget.LabelWidget;
54 import org.netbeans.api.visual.widget.Scene;
55 import org.netbeans.api.visual.widget.Widget;
56 import org.netbeans.api.visual.widget.LabelWidget.Alignment;
57 import org.netbeans.api.visual.widget.LabelWidget.VerticalAlignment;
58 import org.netbeans.modules.xml.refactoring.ui.util.AnalysisUtilities;
59 import org.netbeans.modules.xml.wsdl.model.Definitions;
60 import org.netbeans.modules.xml.wsdl.model.Fault;
61 import org.netbeans.modules.xml.wsdl.model.Message;
62 import org.netbeans.modules.xml.wsdl.model.OperationParameter;
63 import org.netbeans.modules.xml.wsdl.model.WSDLModel;
64 import org.netbeans.modules.xml.wsdl.ui.netbeans.module.Utility;
65 import org.netbeans.modules.xml.wsdl.ui.view.grapheditor.actions.ComboBoxInplaceEditor;
66 import org.netbeans.modules.xml.wsdl.ui.view.grapheditor.actions.ComboBoxInplaceEditorProvider;
67 import org.netbeans.modules.xml.wsdl.ui.view.grapheditor.actions.HoverActionProvider;
68 import org.netbeans.modules.xml.wsdl.ui.view.treeeditor.MessageNode;
69 import org.netbeans.modules.xml.wsdl.ui.wsdl.util.DisplayObject;
70 import org.netbeans.modules.xml.xam.ui.XAMUtils;
71 import org.openide.actions.NewAction;
72 import org.openide.nodes.Node;
73 import org.openide.util.Lookup;
74 import org.openide.util.NbBundle;
75
76 /**
77  *
78  * @author radval
79  */

80 public class OperationParameterWidget extends AbstractWidget<OperationParameter>
81         implements DnDHandler {
82
83     private LabelWidget mParameterMessage;
84     private OperationParameter mParameter;
85     
86
87     /**
88      * Creates a new instance of LabelAndTextFieldWidget.
89      *
90      * @param scene the widget Scene.
91      * @param parameter the corresponding WSDL component.
92      * @param lookup the Lookup for this widget.
93      */

94     public OperationParameterWidget(Scene scene, OperationParameter parameter,
95             Lookup lookup) {
96         super(scene, parameter, lookup);
97
98         mParameter = parameter;
99         setLayout(LayoutFactory.createVerticalLayout(SerialAlignment.JUSTIFY, 1));
100         mParameterMessage = new LabelWidget (scene);
101         mParameterMessage.setBackground (Color.WHITE);
102         if (parameter.getMessage() != null &&
103                 parameter.getMessage().get() != null) {
104             mParameterMessage.setLabel(parameter.getMessage().get().getName());
105         } else {
106             mParameterMessage.setLabel(NbBundle.getMessage(OperationParameterWidget.class,
107                     "LBL_OperationParamterWidget_NoMessageSelected"));
108         }
109         mParameterMessage.setVerticalAlignment(VerticalAlignment.CENTER);
110         mParameterMessage.setAlignment(Alignment.CENTER);
111         
112         mParameterMessage.getActions().addAction(ActionFactory.createInplaceEditorAction(new ComboBoxInplaceEditorProvider(new ComboBoxInplaceEditor() {
113             public boolean isEnabled(Widget widget) {
114                 if (getWSDLComponent() != null) {
115                     return !isImported() && XAMUtils.isWritable(getWSDLComponent().getModel());
116                 }
117                 return false;
118             }
119
120
121             public boolean getEditable() {
122                 return false;
123             }
124
125             public ComboBoxModel JavaDoc getModel() {
126                 Vector JavaDoc<DisplayObject> list = getAllMessages(mParameter.getModel());
127                 DefaultComboBoxModel JavaDoc model = new DefaultComboBoxModel JavaDoc(list);
128                 if (getSelectedItem() != null) {
129                     if (getSelectedItem() != null) {
130                         DisplayObject selectedObject = null;
131                         for (DisplayObject dispObj : list) {
132                             if (dispObj.getValue().equals(getSelectedItem())) {
133                                 selectedObject = dispObj;
134                                 break;
135                             }
136                         }
137                         if (selectedObject != null)
138                             model.setSelectedItem(selectedObject);
139                     }
140                 }
141                 return model;
142             }
143
144             public Object JavaDoc getSelectedItem() {
145                 if (mParameter.getMessage() != null) {
146                     return mParameter.getMessage().get();
147                 }
148                 return null;
149             }
150
151             public void setSelectedItem(Object JavaDoc selectedItem) {
152                 WSDLModel model = mParameter.getModel();
153                 try {
154                     if (model.startTransaction()) {
155                         Message message = null;
156                         if (selectedItem instanceof DisplayObject) {
157                             DisplayObject dispObj = (DisplayObject) selectedItem;
158                             Object JavaDoc obj = dispObj.getValue();
159                             if (obj instanceof Message) {
160                                 message = (Message) obj;
161                             }
162                         } else if (selectedItem instanceof String JavaDoc) {
163                             message = model.getFactory().createMessage();
164                             message.setName((String JavaDoc) selectedItem);
165                             model.getDefinitions().addMessage(message);
166                         }
167                         if (message != null) {
168                             mParameter.setMessage(mParameter.createReferenceTo(
169                                     message, Message.class));
170                         }
171                     }
172                 } finally {
173                     model.endTransaction();
174                 }
175             }
176
177         }, EnumSet.<InplaceEditorProvider.ExpansionDirection>of (InplaceEditorProvider.ExpansionDirection.RIGHT))));
178         
179         if (parameter instanceof Fault) {
180             Widget widget = new Widget(scene);
181             widget.setLayout(new OperationParameterLayout(10));
182             addChild(widget);
183             
184             mParameter = parameter;
185             LabelWidget mLabel = new LabelWidget (scene);
186             mLabel.setBackground (Color.WHITE);
187             if (mParameter != null) {
188                 mLabel.setLabel (mParameter.getName());
189                 mLabel.getActions().addAction(ActionFactory.createInplaceEditorAction(new TextFieldInplaceEditor() {
190
191                     public void setText(Widget widget, String JavaDoc text) {
192                         if (getWSDLComponent() != null)
193                             AnalysisUtilities.locallyRenameRefactor(getWSDLComponent(), text);
194                     }
195
196                     public boolean isEnabled(Widget widget) {
197                         if (getWSDLComponent() != null) {
198                             return !isImported() && XAMUtils.isWritable(getWSDLComponent().getModel());
199                         }
200                         return false;
201                     }
202
203                     public String JavaDoc getText(Widget widget) {
204                         return mParameter.getName();
205                     }
206
207                 },
208                 EnumSet.<InplaceEditorProvider.ExpansionDirection>of (InplaceEditorProvider.ExpansionDirection.LEFT,
209                         InplaceEditorProvider.ExpansionDirection.RIGHT)));
210             }
211             mLabel.getActions().addAction(HoverActionProvider.getDefault(getScene()).getHoverAction());
212             Font JavaDoc font = scene.getDefaultFont ().deriveFont (Font.BOLD);
213             mLabel.setFont (font);
214             mLabel.setAlignment(Alignment.CENTER);
215             widget.addChild (mLabel);
216             widget.addChild(mParameterMessage);
217         } else {
218             addChild(mParameterMessage);
219         }
220         getActions().addAction(((PartnerScene) getScene()).getDnDAction());
221     }
222     
223     public void setText(String JavaDoc text) {
224         mParameterMessage.setLabel(text);
225     }
226     
227     public String JavaDoc getText() {
228         return this.mParameterMessage.getLabel();
229     }
230     
231     protected boolean isImported() {
232         if (getWSDLComponent() != null) {
233             return getModel() != getWSDLComponent().getModel();
234         }
235         return false;
236     }
237     
238     @Override JavaDoc
239     protected Node getNodeFilter(Node original) {
240         if (isImported()) return new ReadOnlyWidgetFilterNode(original);
241         
242         return super.getNodeFilter(original);
243     }
244     
245     private Vector JavaDoc<DisplayObject> getAllMessages(WSDLModel model) {
246         Vector JavaDoc<DisplayObject> list = new Vector JavaDoc<DisplayObject>();
247         
248         list.addAll(getAllAvailableMessages(model, model));
249         
250         for (WSDLModel imported : Utility.getImportedDocuments(model)) {
251             list.addAll(getAllAvailableMessages(model, imported));
252         }
253         
254         return list;
255         
256     }
257     
258     private static List JavaDoc<DisplayObject> getAllAvailableMessages(WSDLModel source, WSDLModel document) {
259         ArrayList JavaDoc<DisplayObject> portTypesList = new ArrayList JavaDoc<DisplayObject>();
260
261         Definitions definition = document.getDefinitions();
262         
263         for (Message message : definition.getMessages()) {
264             String JavaDoc name = message.getName();
265             String JavaDoc targetNamespace = document.getDefinitions().getTargetNamespace();
266             String JavaDoc prefix = Utility.getNamespacePrefix(targetNamespace, source);
267             if(name != null) {
268                 if(prefix != null) {
269                     String JavaDoc messageQNameStr = prefix + ":" + name;
270                     portTypesList.add(new DisplayObject(messageQNameStr, message));
271                 } else {
272                     portTypesList.add(new DisplayObject(name, message));
273                 }
274             }
275         }
276         
277         return portTypesList;
278     }
279
280     @Override JavaDoc
281     public void updateContent() {
282         String JavaDoc msg = null;
283         if (mParameter.getMessage() != null && mParameter.getMessage().get() != null) {
284             msg = mParameter.getMessage().get().getName();
285         }
286         if (msg != null && !msg.equals(getText())) {
287             setText(msg);
288         }
289     }
290
291     public class OperationParameterLayout implements Layout {
292
293         int mGap;
294         
295         public OperationParameterLayout(int gap) {
296             mGap = gap;
297         }
298
299         public void justify(Widget widget) {
300             Rectangle JavaDoc parentBounds = widget.getClientArea();
301             
302             List JavaDoc<Widget> children = widget.getChildren();
303             
304             Widget first = children.get(0);
305             Widget second = children.get(1);
306             
307             Point JavaDoc fPt = first.getLocation();
308             Point JavaDoc sPt = second.getLocation();
309             
310             
311             
312             int centerOfWidget = parentBounds.width / 2;
313             fPt.x = centerOfWidget - (mGap / 2) - first.getBounds().width;
314             
315             sPt.x = centerOfWidget + (mGap / 2);
316             
317             first.resolveBounds(fPt, first.getBounds());
318             second.resolveBounds(sPt, second.getBounds());
319         }
320
321         public void layout(Widget widget) {
322             List JavaDoc<Widget> children = widget.getChildren();
323             
324             Widget first = children.get(0);
325             Widget second = children.get(1);
326             
327             Point JavaDoc sPt = new Point JavaDoc(0, 0);
328             sPt.x = first.getPreferredBounds().width + mGap;
329             
330             
331             first.resolveBounds(new Point JavaDoc(), first.getPreferredBounds());
332             second.resolveBounds(sPt, second.getPreferredBounds());
333         }
334
335         public boolean requiresJustification(Widget widget) {
336             return true;
337         }
338
339     }
340
341     public void dragExit() {
342         setBorder(BorderFactory.createEmptyBorder());
343     }
344
345     public boolean dragOver(Point JavaDoc scenePoint, WidgetDropTargetDragEvent event) {
346         if (isImported()) return false;
347         Transferable JavaDoc transferable = event.getTransferable();
348
349         try {
350             if (transferable != null) {
351                 for (DataFlavor JavaDoc flavor : transferable.getTransferDataFlavors()) {
352                     Class JavaDoc repClass = flavor.getRepresentationClass();
353                     if (Node.class.isAssignableFrom(repClass)) {
354                         Node node = Node.class.cast(transferable.getTransferData(flavor));
355                         if (node instanceof MessageNode) {
356                             setBorder(BorderFactory.createLineBorder(WidgetConstants.HIT_POINT_BORDER, 2));
357                             event.acceptDrag(event.getDropAction());
358                             return true;
359                         }
360                     }
361                 }
362             }
363         } catch (Exception JavaDoc ex) {
364             //do nothing
365
}
366         
367         return false;
368     }
369
370     public boolean drop(Point JavaDoc scenePoint, WidgetDropTargetDropEvent event) {
371         if (isImported()) return false;
372         Transferable JavaDoc transferable = event.getTransferable();
373         try {
374             if (transferable != null) {
375                 for (DataFlavor JavaDoc flavor : transferable.getTransferDataFlavors()) {
376                     Class JavaDoc repClass = flavor.getRepresentationClass();
377                     Object JavaDoc data = transferable.getTransferData(flavor);
378                     if (Node.class.isAssignableFrom(repClass)) {
379                         Node node = (Node) data;
380                         if (node instanceof MessageNode) {
381                             setBorder(BorderFactory.createEmptyBorder());
382                             setMessage((MessageNode)node);
383                         }
384                         return true;
385                     }
386                 }
387             }
388         } catch (Exception JavaDoc ex) {
389             //do nothing
390
}
391         return false;
392     }
393
394     private void setMessage(MessageNode node) {
395         Message message = (Message) node.getWSDLComponent();
396         if (getModel().startTransaction()) {
397             try {
398             getWSDLComponent().setMessage(getWSDLComponent().createReferenceTo(message, Message.class));
399             } finally {
400                 getModel().endTransaction();
401             }
402         }
403         
404     }
405
406     public void expandForDragAndDrop() {}
407
408     public boolean isCollapsed() {
409         return false;
410     }
411
412     @Override JavaDoc
413     protected void updateActions(List JavaDoc<Action JavaDoc> actions) {
414         super.updateActions(actions);
415         ListIterator JavaDoc<Action JavaDoc> liter = actions.listIterator();
416         while (liter.hasNext()) {
417             Action JavaDoc action = liter.next();
418             if (action instanceof NewAction) {
419                 liter.remove();
420             }
421         }
422     }
423 }
424
Popular Tags