View Javadoc

1   /*
2    * $Id: BasicStateChildrenList.java,v 1.18 2011/06/16 09:29:40 jbmeslin Exp $
3    */
4   package org.rcfaces.core.internal.component;
5   
6   import java.util.Collection;
7   import java.util.Iterator;
8   import java.util.List;
9   import java.util.ListIterator;
10  
11  import org.rcfaces.core.internal.capability.IStateChildrenList;
12  
13  /**
14   * 
15   * @author Olivier Oeuillot (latest modification by $Author: jbmeslin $)
16   * @version $Revision: 1.18 $ $Date: 2011/06/16 09:29:40 $
17   */
18  class BasicStateChildrenList implements IStateChildrenList {
19      private static final String REVISION = "$Revision: 1.18 $";
20  
21      private List list;
22  
23      private int stateId = 0;
24  
25      /*
26       * (non-Javadoc)
27       * 
28       * @see org.rcfaces.core.internal.component.IStateIdChildrenList#setChildren(java.util.List)
29       */
30      public final void setChildren(List list) {
31          if (list == this.list) {
32              return;
33          }
34  
35          updateStateId();
36          this.list = list;
37      }
38  
39      /*
40       * (non-Javadoc)
41       * 
42       * @see java.util.List#size()
43       */
44      public final int size() {
45          return list.size();
46      }
47  
48      /*
49       * (non-Javadoc)
50       * 
51       * @see java.util.List#isEmpty()
52       */
53      public final boolean isEmpty() {
54          return list.isEmpty();
55      }
56  
57      /*
58       * (non-Javadoc)
59       * 
60       * @see java.util.List#contains(java.lang.Object)
61       */
62      public final boolean contains(Object o) {
63          return list.contains(o);
64      }
65  
66      /*
67       * (non-Javadoc)
68       * 
69       * @see java.util.List#iterator()
70       */
71      public final Iterator iterator() {
72          return new StateIdIterator(list.iterator());
73      }
74  
75      /*
76       * (non-Javadoc)
77       * 
78       * @see java.util.List#toArray()
79       */
80      public final Object[] toArray() {
81          return list.toArray();
82      }
83  
84      /*
85       * (non-Javadoc)
86       * 
87       * @see java.util.List#toArray(java.lang.Object[])
88       */
89      public final Object[] toArray(Object[] a) {
90          return list.toArray(a);
91      }
92  
93      /*
94       * (non-Javadoc)
95       * 
96       * @see java.util.List#add(java.lang.Object)
97       */
98      public final boolean add(Object o) {
99          if (list.add(o) == false) {
100             return false;
101         }
102 
103         updateStateId();
104         return true;
105     }
106 
107     /*
108      * (non-Javadoc)
109      * 
110      * @see java.util.List#remove(java.lang.Object)
111      */
112     public final boolean remove(Object o) {
113         if (list.remove(o) == false) {
114             return false;
115         }
116 
117         updateStateId();
118         return true;
119     }
120 
121     /*
122      * (non-Javadoc)
123      * 
124      * @see java.util.List#containsAll(java.util.Collection)
125      */
126     public final boolean containsAll(Collection c) {
127         return list.containsAll(c);
128     }
129 
130     /*
131      * (non-Javadoc)
132      * 
133      * @see java.util.List#addAll(java.util.Collection)
134      */
135     public final boolean addAll(Collection c) {
136         if (list.addAll(c) == false) {
137             return false;
138         }
139 
140         updateStateId();
141         return true;
142     }
143 
144     /*
145      * (non-Javadoc)
146      * 
147      * @see java.util.List#addAll(int, java.util.Collection)
148      */
149     public final boolean addAll(int index, Collection c) {
150         if (list.addAll(index, c) == false) {
151             return false;
152         }
153 
154         updateStateId();
155         return true;
156     }
157 
158     /*
159      * (non-Javadoc)
160      * 
161      * @see java.util.List#removeAll(java.util.Collection)
162      */
163     public final boolean removeAll(Collection c) {
164         if (list.removeAll(c) == false) {
165             return false;
166         }
167 
168         updateStateId();
169         return true;
170     }
171 
172     /*
173      * (non-Javadoc)
174      * 
175      * @see java.util.List#retainAll(java.util.Collection)
176      */
177     public final boolean retainAll(Collection c) {
178         if (list.retainAll(c) == false) {
179             return false;
180         }
181 
182         updateStateId();
183         return true;
184     }
185 
186     /*
187      * (non-Javadoc)
188      * 
189      * @see java.util.List#clear()
190      */
191     public final void clear() {
192         if (list.isEmpty()) {
193             return;
194         }
195 
196         list.clear();
197 
198         updateStateId();
199     }
200 
201     /*
202      * (non-Javadoc)
203      * 
204      * @see java.util.List#get(int)
205      */
206     public final Object get(int index) {
207         return list.get(index);
208     }
209 
210     /*
211      * (non-Javadoc)
212      * 
213      * @see java.util.List#set(int, java.lang.Object)
214      */
215     public final Object set(int index, Object element) {
216         Object object = list.set(index, element);
217 
218         updateStateId();
219 
220         return object;
221     }
222 
223     /*
224      * (non-Javadoc)
225      * 
226      * @see java.util.List#add(int, java.lang.Object)
227      */
228     public final void add(int index, Object element) {
229         list.add(index, element);
230 
231         updateStateId();
232     }
233 
234     /*
235      * (non-Javadoc)
236      * 
237      * @see java.util.List#remove(int)
238      */
239     public final Object remove(int index) {
240         Object object = list.remove(index);
241 
242         if (object != null) {
243             updateStateId();
244         }
245 
246         return object;
247     }
248 
249     /*
250      * (non-Javadoc)
251      * 
252      * @see java.util.List#indexOf(java.lang.Object)
253      */
254     public final int indexOf(Object o) {
255         return list.indexOf(o);
256     }
257 
258     /*
259      * (non-Javadoc)
260      * 
261      * @see java.util.List#lastIndexOf(java.lang.Object)
262      */
263     public final int lastIndexOf(Object o) {
264         return list.lastIndexOf(o);
265     }
266 
267     /*
268      * (non-Javadoc)
269      * 
270      * @see java.util.List#listIterator()
271      */
272     public final ListIterator listIterator() {
273         return new StateIdListIterator(list.listIterator());
274     }
275 
276     /*
277      * (non-Javadoc)
278      * 
279      * @see java.util.List#listIterator(int)
280      */
281     public final ListIterator listIterator(int index) {
282         return new StateIdListIterator(list.listIterator(index));
283     }
284 
285     /*
286      * (non-Javadoc)
287      * 
288      * @see java.util.List#subList(int, int)
289      */
290     public final List subList(int fromIndex, int toIndex) {
291         return new StateIdSubList(list.subList(fromIndex, toIndex));
292     }
293 
294     /*
295      * (non-Javadoc)
296      * 
297      * @see org.rcfaces.core.internal.component.IStateIdChildrenList#getStateId()
298      */
299     public final int getState() {
300         return stateId;
301     }
302 
303     protected void updateStateId() {
304         this.stateId++;
305     }
306 
307     /**
308      * 
309      * @author Olivier Oeuillot (latest modification by $Author: jbmeslin $)
310      * @version $Revision: 1.18 $ $Date: 2011/06/16 09:29:40 $
311      */
312     private class StateIdIterator implements Iterator {
313         private static final String REVISION = "$Revision: 1.18 $";
314 
315         private final Iterator iterator;
316 
317         public StateIdIterator(Iterator iterator) {
318             this.iterator = iterator;
319         }
320 
321         public final boolean hasNext() {
322             return iterator.hasNext();
323         }
324 
325         public final Object next() {
326             return iterator.next();
327         }
328 
329         public final void remove() {
330             iterator.remove();
331 
332             updateStateId();
333         }
334     }
335 
336     /**
337      * 
338      * @author Olivier Oeuillot (latest modification by $Author: jbmeslin $)
339      * @version $Revision: 1.18 $ $Date: 2011/06/16 09:29:40 $
340      */
341     private final class StateIdListIterator extends StateIdIterator implements
342             ListIterator {
343         private static final String REVISION = "$Revision: 1.18 $";
344 
345         private final ListIterator listIterator;
346 
347         public StateIdListIterator(ListIterator listIterator) {
348             super(listIterator);
349 
350             this.listIterator = listIterator;
351         }
352 
353         /*
354          * (non-Javadoc)
355          * 
356          * @see java.util.ListIterator#hasPrevious()
357          */
358         public final boolean hasPrevious() {
359             return listIterator.hasPrevious();
360         }
361 
362         /*
363          * (non-Javadoc)
364          * 
365          * @see java.util.ListIterator#previous()
366          */
367         public final Object previous() {
368             return listIterator.previous();
369         }
370 
371         /*
372          * (non-Javadoc)
373          * 
374          * @see java.util.ListIterator#nextIndex()
375          */
376         public final int nextIndex() {
377             return listIterator.nextIndex();
378         }
379 
380         /*
381          * (non-Javadoc)
382          * 
383          * @see java.util.ListIterator#previousIndex()
384          */
385         public final int previousIndex() {
386             return listIterator.previousIndex();
387         }
388 
389         /*
390          * (non-Javadoc)
391          * 
392          * @see java.util.ListIterator#set(java.lang.Object)
393          */
394         public final void set(Object o) {
395             listIterator.set(o);
396 
397             updateStateId();
398         }
399 
400         /*
401          * (non-Javadoc)
402          * 
403          * @see java.util.ListIterator#add(java.lang.Object)
404          */
405         public final void add(Object o) {
406             listIterator.add(o);
407 
408             updateStateId();
409         }
410     }
411 
412     /**
413      * 
414      * @author Olivier Oeuillot (latest modification by $Author: jbmeslin $)
415      * @version $Revision: 1.18 $ $Date: 2011/06/16 09:29:40 $
416      */
417     private final class StateIdSubList extends BasicStateChildrenList {
418         private static final String REVISION = "$Revision: 1.18 $";
419 
420         public StateIdSubList(List list) {
421             setChildren(list);
422         }
423 
424         protected void updateStateId() {
425             BasicStateChildrenList.this.updateStateId();
426         }
427     }
428 }