KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > demo > sharededitor > models > ObjectManager


1 /*
2 @COPYRIGHT@
3 */

4 package demo.sharededitor.models;
5
6 import demo.sharededitor.events.IListListener;
7
8 import java.util.ArrayList JavaDoc;
9 import java.util.List JavaDoc;
10 import java.util.Collections JavaDoc;
11 import java.util.Iterator JavaDoc;
12
13 public class ObjectManager
14     implements IListListener
15 {
16     private List JavaDoc objList;
17     private transient List JavaDoc grabList;
18     private transient List JavaDoc listeners;
19     private transient BaseObject lastGrabbed;
20
21     public ObjectManager()
22     {
23         objList = Collections.synchronizedList(new ArrayList JavaDoc());
24         init_transients();
25         notifyListeners(null);
26     }
27
28     public void init_transients()
29     {
30         listeners = Collections.synchronizedList(new ArrayList JavaDoc());
31         grabList = Collections.synchronizedList(new ArrayList JavaDoc());
32     }
33
34     public void addListener(IListListener listListener)
35     {
36        synchronized(listeners) {
37         if (!listeners.contains(listListener))
38         {
39             listeners.add(listListener);
40             listListener.changed(this, null);
41         }
42        }
43     }
44
45     public void removeListener(IListListener listListener)
46     {
47        synchronized(objList) {
48         if (listeners.contains(listListener))
49             listeners.remove(listListener);
50         }
51     }
52
53     private void notifyListeners(Object JavaDoc obj)
54     {
55        synchronized(objList) {
56         Iterator JavaDoc i = listeners.iterator();
57         while (i.hasNext())
58         {
59             IListListener listListener = (IListListener)i.next();
60             listListener.changed(this, obj);
61         }
62        }
63     }
64
65     public synchronized void add(BaseObject obj)
66     {
67        synchronized(objList) {
68         if (objList.contains(obj))
69             return;
70
71         obj.addListener(this);
72         objList.add(obj);
73         obj.notifyListeners(obj);
74
75         notifyListeners(obj);
76        }
77     }
78
79     public synchronized void remove(BaseObject obj)
80     {
81        synchronized(objList) {
82         if (!objList.contains(obj))
83             return;
84
85         objList.remove(obj);
86         obj.notifyListeners(obj);
87         obj.removeListener(this);
88
89         notifyListeners(obj);
90        }
91     }
92
93     public BaseObject[] reversedList()
94     {
95        synchronized(objList) {
96         List JavaDoc list = new ArrayList JavaDoc(objList);
97         Collections.reverse(list);
98         return (BaseObject[])list.toArray(new BaseObject[0]);
99        }
100     }
101
102     public BaseObject[] list()
103     {
104        synchronized(objList) {
105            return (BaseObject[])objList.toArray(new BaseObject[0]);
106        }
107     }
108
109     public boolean canGrabAt(int x, int y)
110     {
111         BaseObject[] list = reversedList();
112         for(int i=0; i<list.length; i++)
113         {
114             BaseObject obj = list[i];
115             if (obj.isAt(x, y))
116                 return true;
117         }
118         return false;
119     }
120
121     public BaseObject create(int x, int y, String JavaDoc name)
122     {
123         BaseObject obj = BaseObject.createObject(name);
124         obj.move(x, y);
125         add(obj);
126         ungrabAll();
127         grab(obj, x, y);
128         return obj;
129     }
130
131     public BaseObject grabAt(int x, int y, boolean ungrabAll)
132     {
133         BaseObject[] list = reversedList();
134         for(int i=0; i<list.length; i++)
135         {
136             BaseObject obj = list[i];
137             if (obj.isAt(x, y))
138             {
139                 if (ungrabAll)
140                     ungrabAll();
141                 grab(obj, x, y);
142                 return obj;
143             }
144         }
145         if (ungrabAll)
146             ungrabAll();
147         return null;
148     }
149     
150     public BaseObject lastGrabbed()
151     {
152         return lastGrabbed;
153     }
154
155     private void ungrabAll()
156     {
157        synchronized(grabList) {
158         lastGrabbed = null;
159         grabList.clear();
160         notifyListeners(null);
161        }
162     }
163
164     private void grab(BaseObject obj, int x, int y)
165     {
166        synchronized(grabList) {
167         obj.selectAction(true);
168         
169         if (grabList.contains(obj))
170             return;
171
172         grabList.add(obj);
173         obj.setGrabbedAnchorAt(x, y);
174
175         notifyListeners(obj);
176         lastGrabbed = obj;
177        }
178     }
179
180     private void ungrab(BaseObject obj)
181     {
182        synchronized(grabList) {
183         obj.selectAction(false);
184         
185         if (!grabList.contains(obj))
186             return;
187
188         grabList.remove(obj);
189         notifyListeners(obj);
190         lastGrabbed = null;
191        }
192     }
193
194     private void grab(BaseObject obj)
195     {
196        synchronized(grabList) {
197         if (grabList.contains(obj))
198             return;
199
200         obj.selectAction(true);
201         grabList.add(obj);
202         notifyListeners(obj);
203         lastGrabbed = obj;
204        }
205     }
206
207     public void deleteSelection()
208     {
209        synchronized(grabList) {
210         Iterator JavaDoc i = grabList.iterator();
211         while (i.hasNext())
212             remove((BaseObject)i.next());
213         }
214     }
215
216     public void selectAll()
217     {
218         BaseObject[] list = list();
219         for(int i=0; i<list.length; i++)
220             grab(list[i]);
221     }
222     
223     public void selectAllWithin(BaseObject boundary)
224     {
225         BaseObject[] list = list();
226         for(int i=0; i<list.length; i++)
227         {
228            java.awt.Shape JavaDoc s1 = boundary.getShape();
229            java.awt.Shape JavaDoc s2 = list[i].getShape();
230            if (s1.contains(s2.getBounds2D()))
231               grab(list[i]);
232         }
233     }
234
235     public void clearSelection()
236     {
237         BaseObject[] list = list();
238         for(int i=0; i<list.length; i++)
239             ungrab(list[i]);
240     }
241
242     public void invertSelection()
243     {
244         BaseObject[] list = list();
245         for(int i=0; i<list.length; i++)
246         {
247             BaseObject obj = list[i];
248             if (isGrabbed(obj))
249                 ungrab(obj);
250             else
251                 grab(obj);
252         }
253     }
254
255     public void toggleSelection()
256     {
257        synchronized(objList) {
258           synchronized(grabList) {
259             if (objList.size() == grabList.size())
260                 clearSelection();
261             else
262                 selectAll();
263             }
264         }
265     }
266
267     public boolean isGrabbed(BaseObject obj)
268     {
269        synchronized(grabList) {
270         return grabList.contains(obj);
271        }
272     }
273
274     public void changed(Object JavaDoc source, Object JavaDoc obj)
275     {
276         notifyListeners(obj);
277     }
278 }
279
Popular Tags