View Javadoc

1   /*
2    * Copyright (c) 2006 Stiftung Deutsches Elektronen-Synchroton,
3    * Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY.
4    *
5    * THIS SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "../AS IS" BASIS.
6    * WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
7    * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR PARTICULAR PURPOSE AND
8    * NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
9    * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
10   * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
11   * THE USE OR OTHER DEALINGS IN THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE
12   * IN ANY RESPECT, THE USER ASSUMES THE COST OF ANY NECESSARY SERVICING, REPAIR OR
13   * CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE.
14   * NO USE OF ANY SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
15   * DESY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
16   * OR MODIFICATIONS.
17   * THE FULL LICENSE SPECIFYING FOR THE SOFTWARE THE REDISTRIBUTION, MODIFICATION,
18   * USAGE AND OTHER RIGHTS AND OBLIGATIONS IS INCLUDED WITH THE DISTRIBUTION OF THIS
19   * PROJECT IN THE FILE LICENSE.HTML. IF THE LICENSE IS NOT INCLUDED YOU MAY FIND A COPY
20   * AT HTTP://WWW.DESY.DE/LEGAL/LICENSE.HTM
21   */
22  
23  package de.desy.acop.displayers.selector;
24  
25  import java.lang.reflect.Array;
26  
27  import javax.swing.AbstractListModel;
28  import javax.swing.ComboBoxModel;
29  
30  /**
31   * <code>AcopComboBoxModel</code> is an implementation of the <code>ListModel</code>
32   * which allows adding multiple items at once. This model can only work with String 
33   * objects.
34   * 
35   * @author <a href="mailto:jaka.bobnar@cosylab.com">Jaka Bobnar</a>
36   * @version $Id: Templates.xml,v 1.10 2004/01/13 16:17:13 jbobnar Exp $
37   *
38   */
39  public class AcopComboBoxModel<T> extends AbstractListModel implements ComboBoxModel {
40  
41  	private static final long serialVersionUID = -380035760547442817L;
42  	private T[] elements;
43      private T selectedItem;
44      private Class<T> type;
45  
46      /**
47       * Constructs an empty DefaultComboBoxModel object.
48       */
49      @SuppressWarnings("unchecked")
50  	public AcopComboBoxModel(Class<T> type) {
51      	this.type = type;
52      	elements = (T[]) Array.newInstance(type, 0);
53      }
54  
55      /**
56       * Set the value of the selected item. The selected item may be null.
57       * <p>
58       * @param anObject The combo box value or null for no selection.
59       */
60      public void setSelectedItem(Object anObject) {
61      	if ("".equals(anObject)) {
62      		anObject=null;
63      	}
64          if ((selectedItem != null && !selectedItem.equals( anObject )) ||
65          		(selectedItem == null && anObject != null)) {
66          	selectedItem= type.cast(anObject);
67          	fireContentsChanged(this, -1, -1);
68          }
69      }
70  
71      /*
72       * (non-Javadoc)
73       * @see javax.swing.ComboBoxModel#getSelectedItem()
74       */
75      public T getSelectedItem() {
76          return selectedItem;
77      }
78  
79      /*
80       * (non-Javadoc)
81       * @see javax.swing.ListModel#getSize()
82       */
83      public int getSize() {
84          return elements.length;
85      }
86  
87      /*
88       * (non-Javadoc)
89       * @see javax.swing.ListModel#getElementAt(int)
90       */
91      public Object getElementAt(int index) {
92          if ( index >= 0 && index < elements.length)
93              return elements[index];
94          else
95              return null;
96      }
97      
98      /**
99       * Sets new elements to this model.
100      * 
101      * @param obj new elements
102      */
103     public void setElements(T[] obj) {
104     	if (obj==elements || (obj==null && elements==null)) {
105     		return;
106     	}
107     	removeAllElements();
108     	if (obj != null) {
109     		elements=obj;
110 	    	fireIntervalAdded(this,0, obj.length-1 > 0 ? obj.length - 1 : 0);
111     	}
112     	
113     }
114     
115     /**
116      * Returns all elements in the model.
117      * 
118      * @return the elements
119      */
120     public T[] getElements() {
121     	return elements;
122     }
123 
124     /**
125      * Empties the list.
126      */
127     @SuppressWarnings("unchecked")
128 	protected void removeAllElements() {
129         if ( elements.length > 0 ) {
130             int firstIndex = 0;
131             int lastIndex = elements.length - 1;
132             elements=(T[])Array.newInstance(type ,0);
133             fireIntervalRemoved(this, firstIndex, lastIndex);
134         }
135     }
136     
137     /**
138      * Replaces an element at the specified index.
139      * 
140      * @param index the index the element should be replaced at
141      * @param newItem the replacement element
142      */
143     public void replaceElement(int index, T newItem) {
144     	if (elements == null || index > elements.length || index < 0) return;
145     	elements[index] = newItem;
146     	fireIntervalAdded(this, index, index);
147     }
148     
149     /**
150      * Checks if this model containes the given object.
151      * 
152      * @param o the object that existance should be checked for
153      * @return true if object is in the model.
154      */
155     public boolean contains(Object o) {
156     	if (o == null) return false;
157     	for (T obj : elements) {
158     		if (o.equals(obj)) return true;
159     	}
160     	return false;
161     }
162 	
163 	
164 }
165 
166 
167 /* __oOo__ */