/******************************************************************************* * Copyright (c) 2016 Weasis Team and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Nicolas Roduit - initial API and implementation *******************************************************************************/ package org.weasis.acquire.explorer.gui.model.list; import java.beans.PropertyChangeListener; import javax.swing.AbstractListModel; import org.weasis.acquire.explorer.core.ItemList; import org.weasis.acquire.explorer.core.ItemList.Interval; public class ItemListModel<T> extends AbstractListModel<T> { private static final long serialVersionUID = 4350497424368257421L; protected final PropertyChangeListener itemListChangeListener; protected ItemList<T> itemList = null; public ItemListModel() { this(new ItemList<T>()); } public ItemListModel(ItemList<T> newItemList) { setItemList(newItemList); itemListChangeListener = getPropertyChangeListener(); } public ItemList<T> getItemList() { return itemList; } public void setItemList(ItemList<T> newItemList) { if (itemList != null) { itemList.removePropertyChangeListener(itemListChangeListener); if (itemList.getSize() > 0) { fireIntervalRemoved(this, 0, itemList.getSize() - 1); } } itemList = newItemList; if (itemList != null) { itemList.addPropertyChangeListener(itemListChangeListener); if (itemList.getSize() > 0) { fireIntervalAdded(this, 0, itemList.getSize() - 1); } } } @Override public int getSize() { return itemList == null ? 0 : itemList.getSize(); } @Override public T getElementAt(int index) { return itemList == null ? null : itemList.getItem(index); } protected PropertyChangeListener getPropertyChangeListener() { return evt -> { if (evt.getNewValue() instanceof Interval) { Interval interval = (Interval) evt.getNewValue(); switch (ItemList.eProperty.valueOf(evt.getPropertyName())) { case INTERVAL_ADDED: fireIntervalAdded(ItemListModel.this, interval.getMin(), interval.getMax()); break; case INTERVAL_REMOVED: fireIntervalRemoved(ItemListModel.this, interval.getMin(), interval.getMax()); break; case CONTENT_CHANGED: fireContentsChanged(ItemListModel.this, interval.getMin(), interval.getMax()); break; } } }; } }