/** * Copyright (c) 2009 Juwi MacMillan Group GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * */ package de.juwimm.swing; import java.util.Arrays; import java.util.Iterator; import javax.swing.DefaultListModel; /** * A manually sortable list model that can be used for {@code PickListData}. * * @author <a href="mailto:christiane.hausleiter@juwimm.com">Christiane Hausleiter</a> * */ public class SortableListModel extends AbstractPickListModel { private DefaultListModel defaultListModel; public SortableListModel() { this.defaultListModel = new DefaultListModel(); } /** @see de.juwimm.swing.AbstractPickListModel#addAll(java.lang.Object[]) */ public void addAll(Object[] elements) { for (int i = 0; i < elements.length; i++) { this.defaultListModel.addElement(elements[i]); } fireContentsChanged(this, 0, getSize()); } /** @see de.juwimm.swing.AbstractPickListModel#addElement(java.lang.Object) */ public void addElement(Object obj) { this.defaultListModel.addElement(obj); fireContentsChanged(this, 0, getSize()); } /** @see de.juwimm.swing.AbstractPickListModel#clear() */ public void clear() { this.defaultListModel.clear(); fireContentsChanged(this, 0, getSize()); } /** @see de.juwimm.swing.AbstractPickListModel#contains(java.lang.Object) */ public boolean contains(Object element) { return this.defaultListModel.contains(element); } /** @see de.juwimm.swing.AbstractPickListModel#fireContentsChanged() */ public void fireContentsChanged() { fireContentsChanged(this, 0, getSize()); } /** @see de.juwimm.swing.AbstractPickListModel#firstElement() */ public Object firstElement() { return this.defaultListModel.firstElement(); } /** @see de.juwimm.swing.AbstractPickListModel#iterator() */ public Iterator iterator() { return Arrays.asList(this.defaultListModel.toArray()).iterator(); } /** @see de.juwimm.swing.AbstractPickListModel#lastElement() */ public Object lastElement() { return this.defaultListModel.lastElement(); } /** @see de.juwimm.swing.AbstractPickListModel#removeAllElements() */ public void removeAllElements() { this.defaultListModel.clear(); fireContentsChanged(this, 0, getSize()); } /** @see de.juwimm.swing.AbstractPickListModel#removeElement(java.lang.Object) */ public boolean removeElement(Object obj) { int sizeBefore = getSize(); this.defaultListModel.removeElement(obj); if (getSize() < sizeBefore) { fireContentsChanged(this, 0, getSize()); return true; } return false; } /** @see de.juwimm.swing.AbstractPickListModel#removeElementAt(int) */ public boolean removeElementAt(int position) { int sizeBefore = getSize(); this.defaultListModel.removeElementAt(position); if (getSize() < sizeBefore) { fireContentsChanged(this, 0, getSize()); return true; } return false; } /** @see de.juwimm.swing.AbstractPickListModel#setElementAt(java.lang.Object, int) */ public void setElementAt(Object obj, int index) { if (index < 0) { this.defaultListModel.setElementAt(obj, 0); } else { if (index >= getSize()) { this.defaultListModel.setElementAt(obj, this.defaultListModel.getSize() - 1); } else { this.defaultListModel.setElementAt(obj, index); } } fireContentsChanged(this, 0, getSize()); } /** @see javax.swing.ListModel#getElementAt(int) */ public Object getElementAt(int index) { if (index < 0) { return this.defaultListModel.get(0); } else if (index >= getSize()) { return this.defaultListModel.lastElement(); } return this.defaultListModel.get(index); } /** @see javax.swing.ListModel#getSize() */ public int getSize() { return this.defaultListModel.getSize(); } }