/**
* Copyright (c) 2013/2014 Verein zur Foerderung der IT-Sicherheit in Oesterreich (SBA).
* The work has been developed in the TIMBUS Project and the above-mentioned are Members of the TIMBUS Consortium.
* TIMBUS is supported by the European Union under the 7th Framework Programme for research and technological
* development and demonstration activities (FP7/2007-2013) under grant agreement no. 269940.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at: http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including without
* limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTIBITLY, or FITNESS FOR A PARTICULAR
* PURPOSE. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise,
* unless required by applicable law or agreed to in writing, shall any Contributor be liable for damages, including
* any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this
* License or out of the use or inability to use the Work.
* See the License for the specific language governing permissions and limitation under the License.
*/
package net.timbusproject.dpes.alternative.kb;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.Map;
/**
* @author Rudolf Mayer
*/
public class Package implements Serializable {
private static final long serialVersionUID = 1L;
public Package() {
this.conflicts = new LinkedList<VersionedPackage>();
this.depends = new LinkedList<VersionedPackage>();
this.recommends = new LinkedList<VersionedPackage>();
this.provides = new LinkedList<VersionedPackage>();
}
private String name;
private Integer version;
private String suite;
private String section;
private final LinkedList<VersionedPackage> depends;
private final LinkedList<VersionedPackage> conflicts;
private final LinkedList<VersionedPackage> recommends;
private final LinkedList<VersionedPackage> provides;
private Boolean installed;
private Integer size;
private String architecture;
private String license;
private String number;
private String dependsString;
private String recommendsString;
private String conflictsString;
private String versionString;
private ArrayList<String> packageInformation;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getVersion() {
return this.version;
}
public void setVersion(Integer version) {
this.version = version;
}
public String getSuite() {
return suite;
}
public void setSuite(String suite) {
this.suite = suite;
}
public LinkedList<VersionedPackage> getDepends() {
return this.depends;
}
public void setDepends(Collection<VersionedPackage> arrayList) {
this.depends.addAll(arrayList);
}
public LinkedList<VersionedPackage> getConflicts() {
return this.conflicts;
}
public void setConflicts(Collection<VersionedPackage> conflicts) {
this.conflicts.addAll(conflicts);
}
public LinkedList<VersionedPackage> getRecommends() {
return this.recommends;
}
public void setRecommends(Collection<VersionedPackage> recommends) {
this.recommends.addAll(recommends);
}
public LinkedList<VersionedPackage> getProvides() {
return provides;
}
public void setProvides(VersionedPackage provides) {
this.provides.add(provides);
}
public Boolean isInstalled() {
return installed;
}
public void setInstalled(Boolean installed) {
this.installed = installed;
}
public Integer getSize() {
return size;
}
public void setSize(Integer size) {
this.size = size;
}
public String getArchitecture() {
return architecture;
}
public void setArchitecture(String architecture) {
this.architecture = architecture;
}
public String getLicense() {
return this.license;
}
public void setLicense(String license) {
this.license = license;
}
public String getNumber() {
return this.number;
}
public void setNumber(String number) {
this.number = number;
}
public String getSection() {
return this.section;
}
public void setSection(String section) {
this.section = section;
}
@Override
public String toString() {
return "package: " + this.name + " version: " + this.version;
}
public void setDependsString(String dependsString) {
this.dependsString = dependsString;
}
public void setRecommendsString(String recommendsString) {
this.recommendsString = recommendsString;
}
public void setConflictsString(String conflictsString) {
this.conflictsString = conflictsString;
}
public String getVersionString() {
return versionString;
}
public void setVersionString(String versionString) {
this.versionString = versionString;
}
public void resolveLinks(Map<String, Package> packageNameMap) {
setDepends(parseVersionedPackages(dependsString));
setRecommends(parseVersionedPackages(recommendsString));
setConflicts(parseVersionedPackages(conflictsString));
}
public ArrayList<VersionedPackage> parseVersionedPackages(String pkgListString) {
ArrayList<VersionedPackage> pkgs = new ArrayList<VersionedPackage>();
if (pkgListString != null) {
final String[] elements = pkgListString.split(",");
for (String pkg : elements) {
pkgs.add(parseVersionedPackage(pkg));
}
}
return pkgs;
}
public VersionedPackage parseVersionedPackage(String string) {
VersionedPackage pkg = new VersionedPackage();
if (string.contains("(") && string.contains(")")) {
String[] pkgParts = string.split("\\(");
String pkgName = pkgParts[0].trim();
String pkgVersionDetail = pkgParts[1].substring(0, pkgParts[1].indexOf(")")).trim();
String[] pkgVersionDetailParts = pkgVersionDetail.split(" ");
pkg.setName(pkgName);
pkg.setConstraint(pkgVersionDetailParts[0].trim());
pkg.setVersion(pkgVersionDetailParts[1].trim());
} else {
pkg.setName(string);
}
return pkg;
}
public void setPackageInformation(ArrayList<String> packageInformation) {
this.packageInformation = packageInformation;
}
public ArrayList<String> getPackageInformation() {
return packageInformation;
}
}