/* Copyright 2009 Hauke Rehfeld This file is part of QuakeInjector. QuakeInjector 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 3 of the License, or (at your option) any later version. QuakeInjector 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 QuakeInjector. If not, see <http://www.gnu.org/licenses/>. */ package de.haukerehfeld.quakeinjector; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; /** * Only the Package s in a RequirementsList */ public class PackageList implements Iterable<Package>, ChangeListener { private List<Package> packages = new ArrayList<Package>(); private RequirementList requirements; public PackageList(RequirementList requirements) { this.requirements = requirements; setRequirements(requirements); } private void setRequirements(RequirementList requirements) { packages.clear(); for (Requirement r: requirements) { if (r instanceof Package) { packages.add((Package) r); } } this.requirements = requirements; this.requirements.addChangeListener(this); notifyChangeListeners(); } public void sort() { java.util.Collections.sort(packages); } public Package get(int i) { return packages.get(i); } public Package get(String id) { Requirement r = requirements.get(id); if (!(r instanceof Package)) { return null; } return (Package) r; } public Iterator<Package> iterator() { return packages.iterator(); } public int size() { return packages.size(); } public int indexOf(Package r) { return packages.indexOf(r); } /** * easily have change listeners */ private ChangeListenerList listeners = new ChangeListenerList(); public void addChangeListener(ChangeListener l) { listeners.addChangeListener(l); } public void removeChangeListener(ChangeListener l) { listeners.removeChangeListener(l); } private void notifyChangeListeners() { listeners.notifyChangeListeners(this); } public void stateChanged(ChangeEvent e) { if (!(e.getSource() instanceof RequirementList)) { throw new RuntimeException("getting change events with source not a RequirementList"); } setRequirements((RequirementList) e.getSource()); } }