/*
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.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import javax.swing.event.ChangeListener;
public class RequirementList implements Iterable<Requirement> {
private HashMap<String, Integer> names = new HashMap<String, Integer>();
private List<Requirement> requirements;
public RequirementList() {
this.requirements = Collections.<Requirement>emptyList();
}
public RequirementList(List<Requirement> requirements) {
setRequirements(requirements);
}
public void setRequirements(List<Requirement> requirements) {
names.clear();
for (int i = 0; i < requirements.size(); ++i) {
names.put(requirements.get(i).getId(), i);
}
this.requirements = requirements;
}
public void setInstalled(PackageFileList l) {
Requirement r = get(l.getId());
if (r instanceof UnavailableRequirement) {
System.err.println("Can't set installed on UnavailableRequirement " + l.getId());
return;
}
r.setInstalled(true);
if (r instanceof Package) {
((Package) r).setFileList(l);
}
}
public Requirement get(int i) {
return requirements.get(i);
}
public Requirement get(String id) {
Integer i = names.get(id);
if (i == null) {
return new UnavailableRequirement(id);
}
return requirements.get(i);
}
public Iterator<Requirement> iterator() {
return requirements.iterator();
}
public int size() {
return requirements.size();
}
public int indexOf(Requirement r) {
return requirements.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);
}
public void notifyChangeListeners() {
listeners.notifyChangeListeners(this);
}
}