KickJava   Java API By Example, From Geeks To Geeks.

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


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 package org.netbeans.modules.xml.wsdl.ui.view.grapheditor.widget;
21
22 import java.awt.EventQueue JavaDoc;
23 import java.awt.Font JavaDoc;
24 import java.awt.Point JavaDoc;
25 import java.awt.Rectangle JavaDoc;
26 import java.util.Collections JavaDoc;
27 import java.util.HashSet JavaDoc;
28 import java.util.Set JavaDoc;
29
30 import javax.swing.JLabel JavaDoc;
31
32 import org.netbeans.api.visual.action.ActionFactory;
33 import org.netbeans.api.visual.action.SelectProvider;
34 import org.netbeans.api.visual.action.WidgetAction;
35 import org.netbeans.api.visual.model.ObjectScene;
36 import org.netbeans.api.visual.widget.Widget;
37 import org.netbeans.modules.xml.wsdl.model.Definitions;
38 import org.netbeans.modules.xml.wsdl.model.WSDLComponent;
39 import org.netbeans.modules.xml.wsdl.model.WSDLModel;
40 import org.netbeans.modules.xml.wsdl.ui.view.grapheditor.DragOverSceneLayer;
41 import org.netbeans.modules.xml.xam.ComponentEvent;
42 import org.netbeans.modules.xml.xam.ComponentListener;
43
44 /**
45  *
46  * @author anjeleevich
47  */

48 public class PartnerScene extends ObjectScene implements ComponentListener {
49     private ButtonAction buttonAction;
50     private WidgetAction selectAction;
51     private DnDAction dndAction;
52     
53     private WSDLModel model;
54     private MessagesWidget messagesWidget;
55     private CollaborationsWidget collaborationsWidget;
56     private DragOverSceneLayer dragOverLayer;
57     private Font JavaDoc defaultFont = new JLabel JavaDoc().getFont();
58     private SelectProvider selectProvider;
59
60     public PartnerScene(WSDLModel model) {
61         super();
62         
63         this.model = model;
64         model.addComponentListener(this);
65
66         buttonAction = new ButtonAction();
67         selectProvider = new ObjectSelectProvider();
68         selectAction = ActionFactory.createSelectAction(selectProvider);
69         dndAction = new DnDAction();
70
71         getActions().addAction(selectAction);
72         getActions().addAction(buttonAction);
73         getActions().addAction(dndAction);
74     }
75
76     public WSDLModel getModel() {
77         return model;
78     }
79     
80     
81     /**
82      * Return the provider for performing widget selections.
83      *
84      * @return selection provider.
85      */

86     public SelectProvider getSelectProvider() {
87         return selectProvider;
88     }
89     
90     public ButtonAction getButtonAction() {
91         return buttonAction;
92     }
93
94     public WidgetAction getSelectAction() {
95         return selectAction;
96     }
97     
98     
99     public WidgetAction getDnDAction() {
100         return dndAction;
101     }
102
103     
104     public MessagesWidget getMessagesWidget() {
105         if (messagesWidget == null) {
106              messagesWidget = new MessagesWidget(this, model);
107         }
108         
109         return messagesWidget;
110     }
111     
112     
113     public CollaborationsWidget getCollaborationsWidget() {
114         if (collaborationsWidget == null) {
115             collaborationsWidget = new CollaborationsWidget(this, model);
116         }
117         
118         return collaborationsWidget;
119     }
120     
121     public DragOverSceneLayer getDragOverLayer() {
122         if (dragOverLayer == null) {
123             dragOverLayer = new DragOverSceneLayer(this);
124         }
125         return dragOverLayer;
126     }
127
128     /**
129      * Scan the scene's object-to-widget mapping for components that are
130      * no longer in the component model, and remove them if so.
131      */

132     private void pruneStaleBindings() {
133         // Create a new set to avoid concurrent modification exceptions.
134
Set JavaDoc<Object JavaDoc> objects = new HashSet JavaDoc<Object JavaDoc>(getObjects());
135         for (Object JavaDoc object : objects) {
136             if (object instanceof WSDLComponent &&
137                     !isInModel((WSDLComponent) object)) {
138                 removeObject(object);
139             }
140         }
141     }
142
143     /**
144      * Determine if the component is in the model or not.
145      *
146      * @param component the component to query.
147      * @return true if component is in model, false otherwise.
148      */

149     private boolean isInModel(WSDLComponent component) {
150         WSDLComponent root = model.getRootComponent();
151         for (WSDLComponent c = component; c != null; c = c.getParent()) {
152             if (c == root) {
153                 return true;
154             }
155         }
156         return false;
157     }
158
159     public void valueChanged(ComponentEvent componentEvent) {
160         updateContent(componentEvent);
161     }
162
163     public void childrenAdded(ComponentEvent componentEvent) {
164         updateContent(componentEvent);
165     }
166
167     public void childrenDeleted(ComponentEvent componentEvent) {
168         updateContent(componentEvent);
169         // Perform the pruning in one place, as opposed to in the
170
// AbstractWidget class, which would be invoked many times.
171
if (EventQueue.isDispatchThread()) {
172             pruneStaleBindings();
173         } else {
174             EventQueue.invokeLater(new Runnable JavaDoc() {
175                 public void run() {
176                     pruneStaleBindings();
177                 }
178             });
179         }
180     }
181
182     /**
183      * If the event source is the model root, update the top-level widgets
184      * manually, since they are not registered as model listeners.
185      */

186     private void updateContent(ComponentEvent componentEvent) {
187         if (componentEvent.getSource() instanceof Definitions) {
188             Runnable JavaDoc updater = new Runnable JavaDoc() {
189                 public void run() {
190                     getMessagesWidget().updateContent();
191                     getCollaborationsWidget().updateContent();
192                     // Validate the scene after making changes.
193
validate();
194                 }
195             };
196             if (EventQueue.isDispatchThread()) {
197                 updater.run();
198             } else {
199                 EventQueue.invokeLater(updater);
200             }
201         }
202     }
203
204     public Font JavaDoc getDefaultFont() {
205         return defaultFont;
206     }
207
208     private class ObjectSelectProvider implements SelectProvider {
209         public boolean isAimingAllowed(Widget widget, Point JavaDoc localLocation,
210                 boolean invertSelection)
211         {
212             return false;
213         }
214         
215         public boolean isSelectionAllowed(Widget widget, Point JavaDoc localLocation,
216                 boolean invertSelection)
217         {
218             return true;
219 // Object object = findObject(widget);
220
// return object != null && (invertSelection
221
// || ! getSelectedObjects().contains(object));
222
}
223         
224
225         public void select(Widget widget, Point JavaDoc localLocation,
226                 boolean invertSelection)
227         {
228             if (widget instanceof ButtonWidget) {
229                 if (!((ButtonWidget) widget).isParenSelectionAllowed()) {
230                     // do nothing
231
return;
232                 }
233             }
234             
235             Object JavaDoc object = findObject(widget);
236             
237 // System.out.println("Object=" + object);
238
// System.out.println("getFocusedObject=" + getFocusedObject());
239

240             // setFocusedObject(object);
241
if (object != null) {
242                 if (getSelectedObjects().contains(object)) {
243                     return;
244                 }
245                 userSelectionSuggested(Collections.singleton(object),
246                         invertSelection);
247                 // Make the widget visible when it is selected.
248
Rectangle JavaDoc bounds = widget.getClientArea();
249                 if (bounds != null) {
250                     bounds = widget.convertLocalToScene(bounds);
251                     getView().scrollRectToVisible(bounds);
252                 }
253             } else {
254                 userSelectionSuggested(Collections.emptySet(),
255                         invertSelection);
256             }
257         }
258     }
259 }
260
Popular Tags