/*
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.Date;
import java.util.List;
import javax.swing.event.ChangeListener;
/**
* A requirement that has an installation candidate available.
*/
public class Package extends SortableRequirement implements Requirement {
/**
* easily have change listeners
*/
private ChangeListenerList listeners = new ChangeListenerList();
private String author;
private String title;
private Rating rating;
private String description;
/**
* Size in kb?
*/
private int size;
private Date date;
private String relativeBaseDir;
private String commandline;
private List<String> startmaps;
private List<Requirement> requirements;
private PackageFileList fileList;
private PackageFileList supposedFileList;
public Package(String id,
String author,
String title,
int size,
Date date,
boolean isInstalled,
Rating rating,
String description) {
this(id, author, title, size, date, isInstalled, rating, description, null, null, null, null);
}
public Package(String id,
String author,
String title,
int size,
Date date,
boolean isInstalled,
Rating rating,
String description,
String relativeBaseDir,
String commandline,
List<String> startmaps,
List<Requirement> requirements) {
super(id);
this.author = author;
this.title = title;
this.size = size;
this.date = date;
super.setInstalled(isInstalled);
this.rating = rating;
this.description = description;
this.relativeBaseDir = relativeBaseDir;
this.commandline = commandline;
this.startmaps = startmaps;
this.requirements = requirements;
}
@Override
public void addChangeListener(ChangeListener l) {
listeners.addChangeListener(l);
}
@Override
public void removeChangeListener(ChangeListener l) {
listeners.removeChangeListener(l);
}
public String getAuthor() {
return author;
}
public String getTitle() {
return title;
}
public int getSize() {
return size;
}
public Date getDate() {
return date;
}
/**
* get rating
*/
public Rating getRating() { return rating; }
/**
* get description
*/
public String getDescription() { return description; }
public String getRelativeBaseDir() {
return relativeBaseDir;
}
public String getCommandline() {
return commandline;
}
public List<String> getStartmaps() {
return startmaps;
}
public void setRequirements(List<Requirement> requirements) {
this.requirements = requirements;
}
public List<Requirement> getRequirements() {
return this.requirements;
}
public List<Package> getAvailableRequirements() {
List<Package> avails = new ArrayList<Package>();
for (Requirement r: requirements) {
if (r instanceof Package) {
avails.add((Package) r);
}
}
return avails;
}
public List<Requirement> getUnavailableRequirements() {
List<Requirement> unavails = new ArrayList<Requirement>();
for (Requirement r: requirements) {
if (!r.isInstalled() && !(r instanceof Package)) {
unavails.add(r);
}
}
return unavails;
}
public List<Requirement> getUnmetRequirements() {
List<Requirement> unmet = new ArrayList<Requirement>();
for (Requirement requirement: requirements) {
if (!requirement.isInstalled()) {
unmet.add(requirement);
}
}
return unmet;
}
@Override
protected void notifyChangeListeners() {
listeners.notifyChangeListeners(this);
}
@Override
public String toString() {
return getId() + " (" + isInstalled() + ")";
}
/**
* get fileList
*/
public PackageFileList getFileList() { return fileList; }
/**
* set fileList
*/
public void setFileList(PackageFileList fileList) { this.fileList = fileList; }
/**
* get supposedFileList
*/
public PackageFileList getSupposedFileList() { return supposedFileList; }
/**
* set supposedFileList
*/
public void setSupposedFileList(PackageFileList supposedFileList) { this.supposedFileList = supposedFileList; }
public static enum Rating {
Unrated(0),
Crap(1),
Poor(2),
Average(3),
Nice(4),
Excellent(5);
private int rating;
Rating(int rating) {
this.rating = rating;
}
public int getRating() {
return rating;
}
}
}