Worldwind public release 0.2.1
[worldwind-tracker.git] / gov / nasa / worldwind / LayerList.java
blob9dca1c65af4f032e77c5627f8a56f47e5fe0cb50
1 package gov.nasa.worldwind;
3 import java.util.*;
4 import java.util.concurrent.*;
5 import java.beans.*;
7 /*
8 Copyright (C) 2001, 2006 United States Government
9 as represented by the Administrator of the
10 National Aeronautics and Space Administration.
11 All Rights Reserved.
14 /**
15 * @author Tom Gaskins
16 * @version $Id: LayerList.java 2215 2007-07-04 15:38:23Z tgaskins $
18 public class LayerList extends CopyOnWriteArrayList<Layer> implements WWObject
20 private WWObjectImpl wwo = new WWObjectImpl(this);
22 public LayerList()
26 public LayerList(Layer[] layers)
28 if (layers == null)
30 String message = WorldWind.retrieveErrMsg("nullValue.LayersIsNull");
31 WorldWind.logger().log(java.util.logging.Level.FINE, message);
32 throw new IllegalArgumentException(message);
34 for (Layer layer : layers)
36 this.add(layer);
40 @Override
41 public Object clone()
43 LayerList newList = (LayerList) super.clone();
44 newList.wwo = new WWObjectImpl(newList);
45 for (Layer l : newList)
46 l.removePropertyChangeListener(this);
48 return newList;
51 public boolean add(Layer layer)
53 if (layer == null)
55 String message = WorldWind.retrieveErrMsg("nullValue.LayerIsNull");
56 WorldWind.logger().log(java.util.logging.Level.FINE, message);
57 throw new IllegalArgumentException(message);
60 super.add(layer);
61 layer.addPropertyChangeListener(this);
62 this.firePropertyChange(AVKey.LAYERS, null, this);
64 return true;
67 public void add(int index, Layer layer)
69 if (layer == null)
71 String message = WorldWind.retrieveErrMsg("nullValue.LayerIsNull");
72 WorldWind.logger().log(java.util.logging.Level.FINE, message);
73 throw new IllegalArgumentException(message);
76 super.add(index, layer);
77 layer.addPropertyChangeListener(this);
78 this.firePropertyChange(AVKey.LAYERS, null, this);
81 public void remove(Layer layer)
83 if (layer == null)
85 String msg = WorldWind.retrieveErrMsg("nullValue.LayerIsNull");
86 WorldWind.logger().log(java.util.logging.Level.FINE, msg);
87 throw new IllegalArgumentException(msg);
90 if (!this.contains(layer))
91 return;
93 layer.removePropertyChangeListener(this);
94 super.remove(layer);
95 this.firePropertyChange(AVKey.LAYERS, null, this);
98 public Layer remove(int index)
100 Layer layer = get(index);
101 if (layer == null)
102 return null;
104 layer.removePropertyChangeListener(this);
105 super.remove(index);
106 this.firePropertyChange(AVKey.LAYERS, null, this);
108 return layer;
111 public Layer get(int index)
113 return super.get(index);
116 public Layer set(int index, Layer layer)
118 if (layer == null)
120 String message = WorldWind.retrieveErrMsg("nullValue.LayerIsNull");
121 WorldWind.logger().log(java.util.logging.Level.FINE, message);
122 throw new IllegalArgumentException(message);
125 Layer oldLayer = this.get(index);
126 if (oldLayer != null)
127 oldLayer.removePropertyChangeListener(this);
129 super.set(index, layer);
130 layer.addPropertyChangeListener(this);
131 this.firePropertyChange(AVKey.LAYERS, null, this);
133 return oldLayer;
136 public boolean remove(Object o)
138 for (Layer layer : this)
140 if (layer.equals(o))
141 layer.removePropertyChangeListener(this);
144 boolean removed = super.remove(o);
145 if (removed)
146 this.firePropertyChange(AVKey.LAYERS, null, this);
148 return removed;
151 public boolean addIfAbsent(Layer layer)
153 for (Layer l : this)
155 if (l.equals(layer))
156 return false;
159 layer.addPropertyChangeListener(this);
161 boolean added = super.addIfAbsent(layer);
162 if (added)
163 this.firePropertyChange(AVKey.LAYERS, null, this);
165 return added;
168 public boolean removeAll(Collection<?> objects)
170 for (Layer layer : this)
171 layer.removePropertyChangeListener(this);
173 boolean removed = super.removeAll(objects);
174 if (removed)
175 this.firePropertyChange(AVKey.LAYERS, null, this);
177 return removed;
180 public int addAllAbsent(Collection<? extends Layer> layers)
182 for (Layer layer : layers)
184 if (!this.contains(layer))
185 layer.addPropertyChangeListener(this);
188 int numAdded = super.addAllAbsent(layers);
189 if (numAdded > 0)
190 this.firePropertyChange(AVKey.LAYERS, null, this);
192 return numAdded;
195 public boolean addAll(Collection<? extends Layer> layers)
197 boolean added = super.addAll(layers);
198 if (added)
199 this.firePropertyChange(AVKey.LAYERS, null, this);
201 return added;
204 public boolean addAll(int i, Collection<? extends Layer> layers)
206 for (Layer layer : layers)
207 layer.addPropertyChangeListener(this);
209 boolean added = super.addAll(i, layers);
210 if (added)
211 this.firePropertyChange(AVKey.LAYERS, null, this);
213 return added;
216 public boolean retainAll(Collection<?> objects)
218 for (Layer layer : this)
220 if (!objects.contains(layer))
221 layer.removePropertyChangeListener(this);
224 boolean added = super.retainAll(objects);
225 if (added)
226 this.firePropertyChange(AVKey.LAYERS, null, this);
228 return added;
231 public Object getValue(String key)
233 return wwo.getValue(key);
236 public Set<Map.Entry<String, Object>> getValues()
238 return wwo.getValues();
241 public String getStringValue(String key)
243 return wwo.getStringValue(key);
246 public void setValue(String key, Object value)
248 wwo.setValue(key, value);
251 public void setValues(AVList avList)
253 wwo.setValues(avList);
256 public boolean hasKey(String key)
258 return wwo.hasKey(key);
261 public void removeKey(String key)
263 wwo.removeKey(key);
266 public AVList copy()
268 return wwo.copy();
271 public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)
273 wwo.addPropertyChangeListener(propertyName, listener);
276 public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener)
278 wwo.removePropertyChangeListener(propertyName, listener);
281 public void addPropertyChangeListener(PropertyChangeListener listener)
283 wwo.addPropertyChangeListener(listener);
286 public void removePropertyChangeListener(PropertyChangeListener listener)
288 wwo.removePropertyChangeListener(listener);
291 public void firePropertyChange(PropertyChangeEvent propertyChangeEvent)
293 wwo.firePropertyChange(propertyChangeEvent);
296 public void firePropertyChange(String propertyName, Object oldValue, Object newValue)
298 wwo.firePropertyChange(propertyName, oldValue, newValue);
301 public void propertyChange(PropertyChangeEvent propertyChangeEvent)
303 wwo.propertyChange(propertyChangeEvent);
306 @Override
307 public String toString()
309 String r = "";
310 for (Layer l : this)
312 r += l.toString() + ", ";
314 return r;