/* * EquipmentListFacadeImpl.java * Copyright 2011 Connor Petty <cpmeister@users.sourceforge.net> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Created on Jan 23, 2011, 5:35:52 PM */ package pcgen.gui2.facade; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import pcgen.core.Equipment; import pcgen.facade.core.EquipmentFacade; import pcgen.facade.core.EquipmentListFacade; import pcgen.facade.util.AbstractListFacade; /** * * @author Connor Petty <cpmeister@users.sourceforge.net> */ public class EquipmentListFacadeImpl extends AbstractListFacade<EquipmentFacade> implements EquipmentListFacade { private ArrayList<EquipmentFacade> equipmentList; private Map<EquipmentFacade, Integer> quantityMap; public EquipmentListFacadeImpl() { equipmentList = new ArrayList<>(); quantityMap = new HashMap<>(); } public EquipmentListFacadeImpl(List<Equipment> list) { equipmentList = new ArrayList<>(list); quantityMap = new HashMap<>(); for (Equipment equipment : list) { quantityMap.put(equipment, equipment.getQty().intValue()); } } /** * Refresh the equipment list facade with the supplied data. * @param list The new list of equipment. */ public void refresh(List<Equipment> list) { equipmentList = new ArrayList<>(list); quantityMap = new HashMap<>(); for (Equipment equipment : list) { quantityMap.put(equipment, equipment.getQty().intValue()); } fireElementsChanged(this); } @Override public void addEquipmentListListener(EquipmentListListener listener) { listenerList.add(EquipmentListListener.class, listener); } @Override public void removeEquipmentListListener(EquipmentListListener listener) { listenerList.remove(EquipmentListListener.class, listener); } private void fireQuantityChangedEvent(Object source, EquipmentFacade equipment, int index) { Object[] listeners = listenerList.getListenerList(); EquipmentListEvent e = null; for (int i = listeners.length - 2; i >= 0; i -= 2) { if (listeners[i] == EquipmentListListener.class) { if (e == null) { e = new EquipmentListEvent(source, equipment, index); } ((EquipmentListListener) listeners[i + 1]).quantityChanged(e); } } } public void addElement(EquipmentFacade equipment, int quantity) { equipmentList.add(equipment); quantityMap.put(equipment, quantity); fireElementAdded(this, equipment, equipmentList.size() - 1); } public void removeElement(EquipmentFacade equipment) { int index = equipmentList.indexOf(equipment); if (index != -1) { equipmentList.remove(equipment); quantityMap.remove(equipment); fireElementRemoved(this, equipment, index); } } @Override public int getQuantity(EquipmentFacade equipment) { if (quantityMap.containsKey(equipment)) { return quantityMap.get(equipment); } return 0; } public void setQuantity(EquipmentFacade equipment, int quantity) { quantityMap.put(equipment, quantity); fireQuantityChangedEvent(this, equipment, equipmentList.indexOf(equipment)); } @Override public EquipmentFacade getElementAt(int index) { return equipmentList.get(index); } @Override public int getSize() { return equipmentList.size(); } @Override public void modifyElement(EquipmentFacade equipment) { fireElementModified(this, equipment, equipmentList.indexOf(equipment)); } }