added aligned property.
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/Log.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/Log.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/Main.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/Main.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/Options.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/Options.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/Parser.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/Parser.java
old mode 100644
new mode 100755
index a05c50f..0114cd8
--- a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/Parser.java
+++ b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/Parser.java
@@ -125,6 +125,7 @@
handlePackage(line);
} else if (line.startsWith("version: ")) {
handleVersion(line);
+ handleExtraProperty(line);
} else if (line.startsWith("installed: ")) {
handleInstalled(line);
} else if (line.startsWith("depends: ")) {
@@ -139,8 +140,11 @@
handleRecommends(line);
} else if (line.startsWith("keep: ")) {
handleKeep(line);
- } else if (sumProperty != null && line.startsWith(sumProperty + ":")) {
- handleSumProperty(line, sumProperty);
+ } else {
+ handleExtraProperty(line);
+ if (sumProperty != null && line.startsWith(sumProperty + ":")) {
+ handleSumProperty(line, sumProperty);
+ }
}
}
} catch (FileNotFoundException e) {
@@ -170,6 +174,12 @@
return currentRequest;
}
+ private void handleExtraProperty(String line) {
+ String[] values = line.split(":", 2);
+ assert values.length == 2;
+ currentIU.addExtraProperty(values[0].trim(), values[1].trim());
+ }
+
private void handleSumProperty(String line, String sumProperty) {
String value = line.substring(sumProperty.length() + 1).trim();
try {
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/IProvidedCapability.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/IProvidedCapability.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/IRequiredCapability.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/IRequiredCapability.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/InstallableUnit.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/InstallableUnit.java
old mode 100644
new mode 100755
index 771a17f..52f7740
--- a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/InstallableUnit.java
+++ b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/InstallableUnit.java
@@ -11,6 +11,9 @@
*******************************************************************************/
package org.eclipse.equinox.p2.cudf.metadata;
+import java.util.HashMap;
+import java.util.Map;
+
public class InstallableUnit implements Comparable {
public static final IProvidedCapability[] NO_PROVIDES = new IProvidedCapability[0];
@@ -28,6 +31,8 @@
private long sumProperty;
+ private Map<String, String> properties = new HashMap<String, String>();
+
public InstallableUnit() {
super();
}
@@ -143,4 +148,12 @@
public void setSumProperty(long sumProperty) {
this.sumProperty = sumProperty;
}
+
+ public void addExtraProperty(String key, String value) {
+ this.properties.put(key, value);
+ }
+
+ public String getExtraPropertyValue(String key) {
+ return this.properties.get(key);
+ }
}
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/NotRequirement.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/NotRequirement.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/ORRequirement.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/ORRequirement.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/ProvidedCapability.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/ProvidedCapability.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/RequiredCapability.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/RequiredCapability.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/Version.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/Version.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/VersionRange.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/metadata/VersionRange.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/query/CapabilityQuery.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/query/CapabilityQuery.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/query/Collector.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/query/Collector.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/query/IQueryable.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/query/IQueryable.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/query/MatchQuery.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/query/MatchQuery.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/query/Query.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/query/Query.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/query/QueryableArray.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/query/QueryableArray.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/AlignedMeasurementHelper.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/AlignedMeasurementHelper.java
new file mode 100755
index 0000000..434dc5d
--- /dev/null
+++ b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/AlignedMeasurementHelper.java
@@ -0,0 +1,119 @@
+package org.eclipse.equinox.p2.cudf.solver;
+
+import java.util.*;
+import org.eclipse.equinox.p2.cudf.metadata.InstallableUnit;
+
+public class AlignedMeasurementHelper {
+
+ private String firstLvlProperty;
+ private String secondLvlProperty;
+
+ protected Map<String, Map<String, List<InstallableUnit>>> clusterMap = new HashMap<String, Map<String, List<InstallableUnit>>>();
+
+ public AlignedMeasurementHelper(String firstLvlProperty, String secondLvlProperty) {
+ this.firstLvlProperty = firstLvlProperty;
+ this.secondLvlProperty = secondLvlProperty;
+ }
+
+ public void addIU(InstallableUnit iu) {
+ String firstLvlPropertyValue = iu.getExtraPropertyValue(this.firstLvlProperty);
+ String secondLvlPropertyValue = iu.getExtraPropertyValue(this.secondLvlProperty);
+ checkPropertyValuesAreNotNull(iu, firstLvlPropertyValue, secondLvlPropertyValue);
+ Map<String, List<InstallableUnit>> secondLevelMap = this.clusterMap.get(firstLvlPropertyValue);
+ if (secondLevelMap == null) {
+ secondLevelMap = new HashMap<String, List<InstallableUnit>>();
+ this.clusterMap.put(firstLvlPropertyValue, secondLevelMap);
+ }
+ List<InstallableUnit> ius = secondLevelMap.get(secondLvlPropertyValue);
+ if (ius == null) {
+ ius = new ArrayList<InstallableUnit>();
+ secondLevelMap.put(secondLvlPropertyValue, ius);
+ }
+ ius.add(iu);
+ }
+
+ private void checkPropertyValuesAreNotNull(InstallableUnit iu, String firstLvlPropertyValue, String secondLvlPropertyValue) {
+ if ((firstLvlPropertyValue == null) || (secondLvlPropertyValue == null)) {
+ String exceptionMessage1 = (firstLvlPropertyValue == null) ? ("IU \"" + iu.toString() + "\" has no property \"" + this.firstLvlProperty + "\"") : ("");
+ String exceptionMessage2 = (secondLvlPropertyValue == null) ? ("IU \"" + iu.toString() + "\" has no property \"" + this.secondLvlProperty + "\"") : ("");
+ String exceptionMessageSep = ((firstLvlPropertyValue == null) || (secondLvlPropertyValue == null)) ? ("") : ("\n");
+ String exceptionMessage = exceptionMessage1 + exceptionMessageSep + exceptionMessage2;
+ throw new IllegalArgumentException(exceptionMessage);
+ }
+ }
+
+ public Iterator<List<InstallableUnit>> firstLvlClustersIterator() {
+ return new FirstLvlClusterIUsIterator();
+ }
+
+ public Iterator<List<InstallableUnit>> secondLvlClustersIterator() {
+ return new SecondLvlClusterIUsIterator();
+ }
+
+ private class FirstLvlClusterIUsIterator implements Iterator<List<InstallableUnit>> {
+
+ private Iterator<String> clusterMapKeysetIt;
+
+ public FirstLvlClusterIUsIterator() {
+ this.clusterMapKeysetIt = clusterMap.keySet().iterator();
+ }
+
+ public boolean hasNext() {
+ return this.clusterMapKeysetIt.hasNext();
+ }
+
+ public List<InstallableUnit> next() {
+ String currentKey = this.clusterMapKeysetIt.next();
+ List<InstallableUnit> res = new ArrayList<InstallableUnit>();
+ Map<String, List<InstallableUnit>> secondLvlMap = clusterMap.get(currentKey);
+ Iterator<String> secondLvlMapKeysetIt = secondLvlMap.keySet().iterator();
+ while (secondLvlMapKeysetIt.hasNext()) {
+ res.addAll(secondLvlMap.get(secondLvlMapKeysetIt.next()));
+ }
+ return res;
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ }
+
+ private class SecondLvlClusterIUsIterator implements Iterator<List<InstallableUnit>> {
+
+ private Iterator<String> clusterMapKeysetIt;
+
+ private Iterator<String> currentClusterKeysetIt = null;
+
+ private Map<String, List<InstallableUnit>> secondLvlMap;
+
+ public SecondLvlClusterIUsIterator() {
+ this.clusterMapKeysetIt = clusterMap.keySet().iterator();
+ if (this.clusterMapKeysetIt.hasNext()) {
+ nextSecondLvlIt();
+ }
+ }
+
+ public boolean hasNext() {
+ return this.clusterMapKeysetIt.hasNext() || (this.currentClusterKeysetIt != null && this.currentClusterKeysetIt.hasNext());
+ }
+
+ public List<InstallableUnit> next() {
+ if (!this.currentClusterKeysetIt.hasNext()) {
+ nextSecondLvlIt();
+ }
+ return new ArrayList<InstallableUnit>(this.secondLvlMap.get(this.currentClusterKeysetIt.next()));
+ }
+
+ private void nextSecondLvlIt() {
+ String firstKey = this.clusterMapKeysetIt.next();
+ this.secondLvlMap = clusterMap.get(firstKey);
+ this.currentClusterKeysetIt = secondLvlMap.keySet().iterator();
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/Explanation.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/Explanation.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/ExplanationJob.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/ExplanationJob.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/Messages.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/Messages.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/OptimizationFunction.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/OptimizationFunction.java
old mode 100644
new mode 100755
index 089498e..4da784c
--- a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/OptimizationFunction.java
+++ b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/OptimizationFunction.java
@@ -31,6 +31,8 @@
protected List unmetVariables = new ArrayList();
protected List upVariables = new ArrayList();
protected List downVariables = new ArrayList();
+ protected List firstLvlAlignedVariables = new ArrayList();
+ protected List secondLvlAlignedVariables = new ArrayList();
protected List optionalityVariables;
protected List optionalityPairs;
@@ -328,6 +330,78 @@
}
}
+ protected void aligned(List weightedObjects, boolean minimize, InstallableUnit metaIu, String prop1, String prop2) {
+ AlignedMeasurementHelper helper = new AlignedMeasurementHelper(prop1, prop2);
+ fillHelper(metaIu, helper);
+ processOnSecondLvlClusters(weightedObjects, minimize, helper);
+ processOnFirstLvlClusters(weightedObjects, minimize, helper);
+ }
+
+ private void processOnFirstLvlClusters(List weightedObjects, boolean minimize, AlignedMeasurementHelper helper) {
+ Iterator<List<InstallableUnit>> firstLvlClusterIt = helper.firstLvlClustersIterator();
+ int cpt = 0;
+ BigInteger weight = (!minimize) ? (BigInteger.ONE) : (BigInteger.valueOf(-1));
+ while (firstLvlClusterIt.hasNext()) {
+ List<InstallableUnit> ius = firstLvlClusterIt.next();
+ if (ius.size() > 1) {
+ try {
+ Projector.AbstractVariable abs = new Projector.AbstractVariable("aligned_lvl1_" + cpt);
+ firstLvlAlignedVariables.add(abs);
+ dependencyHelper.or("align_lvl1", abs, ius.toArray());
+ weightedObjects.add(WeightedObject.newWO(abs, weight));
+ } catch (ContradictionException e) {
+ // should never happen
+ e.printStackTrace();
+ }
+ ++cpt;
+ } else {
+ InstallableUnit iu = ius.get(0);
+ firstLvlAlignedVariables.add(iu);
+ weightedObjects.add(WeightedObject.newWO(iu, weight));
+ }
+ }
+ }
+
+ private void processOnSecondLvlClusters(List weightedObjects, boolean minimize, AlignedMeasurementHelper helper) {
+ Iterator<List<InstallableUnit>> secondLvlClusterIt = helper.secondLvlClustersIterator();
+ int cpt = 0;
+ BigInteger weight = (minimize) ? (BigInteger.ONE) : (BigInteger.valueOf(-1));
+ while (secondLvlClusterIt.hasNext()) {
+ List<InstallableUnit> ius = secondLvlClusterIt.next();
+ if (ius.size() > 1) {
+ try {
+ Projector.AbstractVariable abs = new Projector.AbstractVariable("aligned_lvl2_" + cpt);
+ secondLvlAlignedVariables.add(abs);
+ dependencyHelper.or("align_lvl2", abs, ius.toArray());
+ weightedObjects.add(WeightedObject.newWO(abs, weight));
+ } catch (ContradictionException e) {
+ // should never happen
+ e.printStackTrace();
+ }
+ ++cpt;
+ } else {
+ InstallableUnit iu = ius.get(0);
+ secondLvlAlignedVariables.add(iu);
+ weightedObjects.add(WeightedObject.newWO(iu, weight));
+ }
+
+ }
+ }
+
+ private void fillHelper(InstallableUnit metaIu, AlignedMeasurementHelper helper) {
+ Set s = slice.entrySet();
+ for (Iterator iterator = s.iterator(); iterator.hasNext();) {
+ Map.Entry entry = (Map.Entry) iterator.next();
+ if (entry.getKey() == metaIu.getId())
+ continue;
+ Collection versions = ((HashMap) entry.getValue()).values();
+ for (Iterator iterator2 = versions.iterator(); iterator2.hasNext();) {
+ InstallableUnit iuv = (InstallableUnit) iterator2.next();
+ helper.addIU(iuv);
+ }
+ }
+ }
+
public abstract String getName();
}
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/P2OptimizationFunction.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/P2OptimizationFunction.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/Pair.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/Pair.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/ParanoidOptimizationFunction.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/ParanoidOptimizationFunction.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/ProfileChangeRequest.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/ProfileChangeRequest.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/Projector.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/Projector.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/SimplePlanner.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/SimplePlanner.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/Slicer.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/Slicer.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/SolverConfiguration.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/SolverConfiguration.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/Tracing.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/Tracing.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/TrendyOptimizationFunction.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/TrendyOptimizationFunction.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/TwoTierMap.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/TwoTierMap.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/UserDefinedOptimizationFunction.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/UserDefinedOptimizationFunction.java
old mode 100644
new mode 100755
diff --git a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/UserDefinedOptimizationFunction2012.java b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/UserDefinedOptimizationFunction2012.java
old mode 100644
new mode 100755
index 53005a5..679246e
--- a/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/UserDefinedOptimizationFunction2012.java
+++ b/org.eclipse.equinox.p2.cudf/src/main/java/org/eclipse/equinox/p2/cudf/solver/UserDefinedOptimizationFunction2012.java
@@ -58,6 +58,16 @@
weightedObjects.clear();
down(weightedObjects, criteria[i].startsWith("+") ? currentWeight.negate() : currentWeight, metaIu);
currentWeight = currentWeight.divide(weight);
+ } else if (criteria[i].contains("aligned")) {
+ weightedObjects.clear();
+ StringTokenizer tokenizer = new StringTokenizer(criteria[i].substring(9), ";)");
+ // tokenizer.nextToken();
+ String prop1 = tokenizer.nextToken();
+ String prop2 = tokenizer.nextToken();
+ aligned(weightedObjects, criteria[i].charAt(0) == '-', metaIu, prop1, prop2);
+ dependencyHelper.addWeightedCriterion(weightedObjects);
+ System.out.println("# criteria " + criteria[i].substring(1) + " size is " + weightedObjects.size());
+ continue;
} else if (criteria[i].contains("sum")) {
weightedObjects.clear();
sum(weightedObjects, criteria[i].charAt(0) == '-', metaIu, Options.extractSumProperty(criteria[i]));
@@ -220,6 +230,25 @@
System.out.println("# " + criteria[i] + " criteria value: " + sum);
continue;
}
+
+ if (criteria[i].endsWith("aligned")) {
+ proof.clear();
+ counter = 0;
+ for (int j = 0; j < secondLvlAlignedVariables.size(); j++) {
+ Object var = secondLvlAlignedVariables.get(j);
+ if (dependencyHelper.getBooleanValueFor(var)) {
+ counter++;
+ }
+ }
+ for (int j = 0; j < firstLvlAlignedVariables.size(); j++) {
+ Object var = firstLvlAlignedVariables.get(j);
+ if (dependencyHelper.getBooleanValueFor(var)) {
+ counter--;
+ }
+ }
+ System.out.println("# " + criteria[i] + " criteria value: " + counter);
+ continue;
+ }
}
}
}