Switch to side-by-side view

--- a/src/main/java/net/timbusproject/dpes/alternative/kb/Package.java
+++ b/src/main/java/net/timbusproject/dpes/alternative/kb/Package.java
@@ -31,27 +31,26 @@
     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>();
+    }
+
+    public Package(String name) {
+        this();
+        setName(name);
     }
 
     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 final LinkedList<PackageRelation> depends = new LinkedList<PackageRelation>();
+
+    private final LinkedList<PackageRelation> conflicts = new LinkedList<PackageRelation>();
+
+    private final LinkedList<PackageRelation> recommends = new LinkedList<PackageRelation>();
+
+    private final LinkedList<Package> provides = new LinkedList<Package>();
 
     private Boolean installed;
 
@@ -81,14 +80,6 @@
         this.name = name;
     }
 
-    public Integer getVersion() {
-        return this.version;
-    }
-
-    public void setVersion(Integer version) {
-        this.version = version;
-    }
-
     public String getSuite() {
         return suite;
     }
@@ -97,31 +88,31 @@
         this.suite = suite;
     }
 
-    public LinkedList<VersionedPackage> getDepends() {
+    public LinkedList<PackageRelation> getDepends() {
         return this.depends;
     }
 
-    public void setDepends(Collection<VersionedPackage> arrayList) {
+    public void setDepends(Collection<PackageRelation> arrayList) {
         this.depends.addAll(arrayList);
     }
 
-    public LinkedList<VersionedPackage> getConflicts() {
+    public LinkedList<PackageRelation> getConflicts() {
         return this.conflicts;
     }
 
-    public void setConflicts(Collection<VersionedPackage> conflicts) {
+    public void setConflicts(Collection<PackageRelation> conflicts) {
         this.conflicts.addAll(conflicts);
     }
 
-    public LinkedList<VersionedPackage> getRecommends() {
+    public LinkedList<PackageRelation> getRecommends() {
         return this.recommends;
     }
 
-    public void setRecommends(Collection<VersionedPackage> recommends) {
+    public void setRecommends(Collection<PackageRelation> recommends) {
         this.recommends.addAll(recommends);
     }
 
-    public LinkedList<VersionedPackage> getProvides() {
+    public LinkedList<Package> getProvides() {
         return provides;
     }
 
@@ -179,7 +170,7 @@
 
     @Override
     public String toString() {
-        return "package: " + this.name + " version: " + this.version;
+        return "package: " + this.name;
     }
 
     public void setDependsString(String dependsString) {
@@ -203,36 +194,70 @@
     }
 
     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>();
+        setDepends(parseDependencyPackages(dependsString, packageNameMap));
+        setRecommends(parseDependencyPackages(recommendsString, packageNameMap));
+        setConflicts(parseDependencyPackages(conflictsString, packageNameMap));
+    }
+
+    public ArrayList<PackageRelation> parseDependencyPackages(String pkgListString, Map<String, Package> packageNameMap) {
+        ArrayList<PackageRelation> pkgs = new ArrayList<PackageRelation>();
         if (pkgListString != null) {
             final String[] elements = pkgListString.split(",");
             for (String pkg : elements) {
-                pkgs.add(parseVersionedPackage(pkg));
+                String packageRef = pkg.trim();
+
+                if (packageRef.contains("|")) {
+                    // System.out.println("\t\tIgnoring package: " + parsedPackageInfo.getName() + "; ref was: " + packageRef);
+                } else {
+                    PackageRelation parsedPackageInfo = parsePackageInfo(packageRef, packageNameMap);
+                    if (parsedPackageInfo != null) {
+                        if (parsedPackageInfo.getTargetPackageName() == null) {
+                            System.out.println("Got null package for ref: " + packageRef);
+                            parsedPackageInfo = parsePackageInfo(packageRef, packageNameMap);
+                        } else if (parsedPackageInfo.getTargetPackageName().contains("<")) {
+                            System.out.println("Not parsed correctly package : " + parsedPackageInfo.getTargetPackageName() + "; ref was: "
+                                    + packageRef);
+                            parsedPackageInfo = parsePackageInfo(packageRef, packageNameMap);
+                        }
+                        pkgs.add(parsedPackageInfo);
+                    }
+                }
+
             }
         }
         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);
+    public PackageRelation parsePackageInfo(String packageRef, Map<String, Package> packageNameMap) {
+        if (packageRef.contains("(") && packageRef.contains(")")) { // assume a versioned package relation
+            String[] pkgParts = packageRef.split("\\(");
+            String targetPackageName = pkgParts[0].trim();
+
+            String pkgRelation = pkgParts[1].trim();
+            if (!pkgRelation.endsWith(")")) {
+                System.out.println("The package relation string details doesn't end with ) for " + pkgRelation);
+                return null;
+            }
+            pkgRelation = pkgRelation.substring(0, pkgRelation.length() - 1);
+            String[] pkgVersionDetailParts = pkgRelation.split(" ");
+
+            Package targetPackage = packageNameMap.get(targetPackageName);
+            if (targetPackage == null) {
+
+            }
+
+            PackageRelation packageRelation = new PackageRelation(targetPackageName);
+            packageRelation.setConstraint(pkgVersionDetailParts[0].trim());
+            packageRelation.setVersion(pkgVersionDetailParts[1].trim());
+            return packageRelation;
+        } else { // simple package relation
+            String targetPackageName = packageRef.trim();
+            Package targetPackage = packageNameMap.get(targetPackageName);
+            if (targetPackage == null) {
+
+            }
+            return new PackageRelation(targetPackageName);
         }
-        return pkg;
     }
 
     public void setPackageInformation(ArrayList<String> packageInformation) {