/** *######################################################################### * * A component of the Gatherer application, part of the Greenstone digital * library suite from the New Zealand Digital Library Project at the * University of Waikato, New Zealand. * *

* * Author: John Thompson, Greenstone Digital Library, University of Waikato * *

* * Copyright (C) 1999 New Zealand Digital Library Project * *

* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * *

* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * *

* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *######################################################################## */ package org.greenstone.gatherer.cdm; /************************************************************************************** * Title: Gatherer * Description: The Gatherer: a tool for gathering and enriching a digital collection. * Company: The University of Waikato * Written: 20/05/02 * Revised: 03/10/02 - Commented **************************************************************************************/ import javax.swing.ComboBoxModel; import javax.swing.DefaultListModel; /** This class extends the functionality of the DefaultListModel to include simple methods for refreshing the contents of this model if one of its elements changes. * @author John Thompson, Greenstone Digital Library, University of Waikato * @version 2.3 */ public class DynamicListModel extends DefaultListModel implements ComboBoxModel { private boolean auto_order = false; private Object object = null; public void addElement(Object element) { if(auto_order) { // Insert the object in its alphabetically correct place. int position = 0; boolean found = false; while(!found && position < size()) { ///ystem.err.print("Compare " + element.toString() + " to " + get(position).toString() + ": "); int order = element.toString().compareTo(get(position).toString()); if(order < 0) { add(position, element); found = true; ///ystem.err.println("Greater than. Insert"); } else if(order == 0) { found = true; ///ystem.err.println("Equal. End."); } else { position++; ///ystem.err.println("Less than. Carry on."); } } if(!found) { super.addElement(element); ///ystem.err.println("Out of elements. Insert"); } } else { super.addElement(element); } } /* private DynamicListModel shallowCopy() { DynamicListModel copy = new DynamicListModel(); copy.setAutoOrder(auto_order); for(int i = 0; i < size(); i++) { copy.addElement(get(i)); } return copy; } */ public Object getSelectedItem() { ///ystem.err.println("Get item: " + object); return object; } /** Notify all controls that are based on this list model that its contents have changed, and they should repaint themselves. */ public void refresh() { fireContentsChanged(this, 0, size()); } public void setAutoOrder(boolean auto_order) { this.auto_order = auto_order; } public void setSelectedItem(Object object) { ///ystem.err.println("Set item: " + object); this.object = object; } }