From a53e859d9c3ad0a052157eae358f5314d811459a Mon Sep 17 00:00:00 2001
From: Johannes Mey <johannes.mey@tu-dresden.de>
Date: Wed, 18 Jul 2018 15:52:39 +0200
Subject: [PATCH] some refactoring

---
 .../src/main/jastadd/solvers/Helpers.jadd     | 28 ++++---------------
 .../src/main/jastadd/solvers/SolverUtils.jadd | 24 ++++++++++++++++
 .../src/main/java/ir/ac/ui/eng/ACOSolver.java |  2 +-
 .../src/main/java/ir/ac/ui/eng/Ant.java       |  2 +-
 .../src/main/java/uniks/EMFeRSolver.java      |  2 +-
 .../src/main/java/uniks/EMFeRTrafos.java      |  8 +++---
 .../st/mquat/solving/simple/SimpleSolver.java |  2 +-
 .../inf/st/mquat/solving/SolverUtils.java     | 24 +---------------
 .../mquat/solving/HandwrittenTestSuite.java   |  5 ++++
 9 files changed, 43 insertions(+), 54 deletions(-)
 create mode 100644 jastadd-mquat-base/src/main/jastadd/solvers/SolverUtils.jadd

diff --git a/jastadd-mquat-base/src/main/jastadd/solvers/Helpers.jadd b/jastadd-mquat-base/src/main/jastadd/solvers/Helpers.jadd
index 8ca652d..5ffb352 100644
--- a/jastadd-mquat-base/src/main/jastadd/solvers/Helpers.jadd
+++ b/jastadd-mquat-base/src/main/jastadd/solvers/Helpers.jadd
@@ -1,27 +1,5 @@
 aspect Helpers {
 
-  public static void Clause.populateResourceMapping(ResourceMapping mapping, ResourceRequirement requirement, Resource resource) {
-
-    for (ResourceRequirement subRequirement : requirement.getResourceRequirementList()) {
-      int fittingResourceCount = 0;
-      for (int currentInstance = 0; currentInstance < subRequirement.getNumInstance(); currentInstance++) {
-        Instance instance = subRequirement.getInstance(currentInstance);
-        for (int currentResource = 0; currentResource < resource.getNumSubResource(); currentResource++) {
-          Resource subResource = resource.getSubResource(currentResource);
-          if (subResource.getType().getRef() == subRequirement.getResourceTypeRef().getRef()) {
-            if (currentInstance == fittingResourceCount) {
-              ResourceMapping newMapping = new ResourceMapping(instance, subResource, new de.tudresden.inf.st.mquat.jastadd.model.List<>());
-              mapping.addResourceMapping(newMapping);
-              populateResourceMapping(newMapping, subRequirement, subResource);
-              fittingResourceCount++;
-            }
-            currentInstance++;
-          }
-        }
-      }
-    }
-  }
-
   uncache Clause.simpleAssignment(Request request, Resource resource);
   syn Assignment Clause.simpleAssignment(Request request, Resource resource) {
     Assignment assignment = new Assignment();
@@ -31,7 +9,7 @@ aspect Helpers {
       assignment.setImplementation(impl);
 
       ResourceMapping mapping=new ResourceMapping(impl.getResourceRequirement().getInstance(0),resource,new de.tudresden.inf.st.mquat.jastadd.model.List<>());
-      populateResourceMapping(mapping,impl.getResourceRequirement(),resource);
+      Resource.populateResourceMapping(mapping,impl.getResourceRequirement(),resource);
       assignment.setResourceMapping(mapping);
     }
     return assignment;
@@ -42,6 +20,8 @@ aspect Helpers {
   public Solution Root.createRandomSolution(java.util.Random random) {
     Solution solution = new Solution();
 
+    solution.setModel(this);
+
     // create a resource bucket
     java.util.List<Resource> resourceList = populateResourceList(this.getHardwareModel().getResourceList(), new ArrayList<>());
 
@@ -97,6 +77,8 @@ aspect Helpers {
       } while (chosenResource.getType().getRef() != requiredResourceType);
       mapping.setResource(resourceList.remove(resourceNumber));
 
+      Resource.populateResourceMapping(mapping, resourceRequirement, chosenResource);
+
       assignment.setResourceMapping(mapping);
     }
 
diff --git a/jastadd-mquat-base/src/main/jastadd/solvers/SolverUtils.jadd b/jastadd-mquat-base/src/main/jastadd/solvers/SolverUtils.jadd
new file mode 100644
index 0000000..4b1e68b
--- /dev/null
+++ b/jastadd-mquat-base/src/main/jastadd/solvers/SolverUtils.jadd
@@ -0,0 +1,24 @@
+aspect SolverUtils {
+
+  public static void Resource.populateResourceMapping(ResourceMapping mapping, ResourceRequirement requirement, Resource resource) {
+
+    for (ResourceRequirement subRequirement : requirement.getResourceRequirementList()) {
+      int fittingResourceCount = 0;
+      for (int currentInstance = 0; currentInstance < subRequirement.getNumInstance(); currentInstance++) {
+        Instance instance = subRequirement.getInstance(currentInstance);
+        for (int currentResource = 0; currentResource < resource.getNumSubResource(); currentResource++) {
+          Resource subResource = resource.getSubResource(currentResource);
+          if (subResource.getType().getRef() == subRequirement.getResourceTypeRef().getRef()) {
+            if (currentInstance == fittingResourceCount) {
+              ResourceMapping newMapping = new ResourceMapping(instance, subResource, new de.tudresden.inf.st.mquat.jastadd.model.List<>());
+              mapping.addResourceMapping(newMapping);
+              populateResourceMapping(newMapping, subRequirement, subResource);
+              fittingResourceCount++;
+            }
+            currentInstance++;
+          }
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/jastadd-mquat-solver-aco/src/main/java/ir/ac/ui/eng/ACOSolver.java b/jastadd-mquat-solver-aco/src/main/java/ir/ac/ui/eng/ACOSolver.java
index 6b7fbb7..18cc43d 100644
--- a/jastadd-mquat-solver-aco/src/main/java/ir/ac/ui/eng/ACOSolver.java
+++ b/jastadd-mquat-solver-aco/src/main/java/ir/ac/ui/eng/ACOSolver.java
@@ -94,7 +94,7 @@ public class ACOSolver implements BenchmarkableSolver {
 
     ResourceMapping mapping = new ResourceMapping(impl.getResourceRequirement().getInstance(0), resource,
         new de.tudresden.inf.st.mquat.jastadd.model.List<>());
-    SolverUtils.populateResourceMapping(mapping, impl.getResourceRequirement(), resource);
+    Resource.populateResourceMapping(mapping, impl.getResourceRequirement(), resource);
     assignment.setResourceMapping(mapping);
   }
 
diff --git a/jastadd-mquat-solver-aco/src/main/java/ir/ac/ui/eng/Ant.java b/jastadd-mquat-solver-aco/src/main/java/ir/ac/ui/eng/Ant.java
index 61e26b9..c74acc6 100644
--- a/jastadd-mquat-solver-aco/src/main/java/ir/ac/ui/eng/Ant.java
+++ b/jastadd-mquat-solver-aco/src/main/java/ir/ac/ui/eng/Ant.java
@@ -46,7 +46,7 @@ public class Ant {
 
     ResourceMapping mapping = new ResourceMapping(impl.getResourceRequirement().getInstance(0), resource,
         new de.tudresden.inf.st.mquat.jastadd.model.List<>());
-    SolverUtils.populateResourceMapping(mapping, impl.getResourceRequirement(), resource);
+    Resource.populateResourceMapping(mapping, impl.getResourceRequirement(), resource);
     assignment.setResourceMapping(mapping);
   }
 
diff --git a/jastadd-mquat-solver-emfer/src/main/java/uniks/EMFeRSolver.java b/jastadd-mquat-solver-emfer/src/main/java/uniks/EMFeRSolver.java
index f7abed4..06d373b 100644
--- a/jastadd-mquat-solver-emfer/src/main/java/uniks/EMFeRSolver.java
+++ b/jastadd-mquat-solver-emfer/src/main/java/uniks/EMFeRSolver.java
@@ -51,7 +51,7 @@ public class EMFeRSolver implements BenchmarkableSolver {
       Implementation impl = assignment.getImplementation();
 
       ResourceMapping mapping = new ResourceMapping(impl.getResourceRequirement().getInstance(0), resource, new de.tudresden.inf.st.mquat.jastadd.model.List<>());
-      SolverUtils.populateResourceMapping(mapping, impl.getResourceRequirement(), resource);
+      Resource.populateResourceMapping(mapping, impl.getResourceRequirement(), resource);
       assignment.setResourceMapping(mapping);
    }
 
diff --git a/jastadd-mquat-solver-emfer/src/main/java/uniks/EMFeRTrafos.java b/jastadd-mquat-solver-emfer/src/main/java/uniks/EMFeRTrafos.java
index 92705dc..c5b3fd4 100644
--- a/jastadd-mquat-solver-emfer/src/main/java/uniks/EMFeRTrafos.java
+++ b/jastadd-mquat-solver-emfer/src/main/java/uniks/EMFeRTrafos.java
@@ -104,7 +104,7 @@ public class EMFeRTrafos
             Resource resource =  findResource(eAssignment.getNodeName());
             ResourceMapping resourceMapping = new ResourceMapping(instance, resource, new List<>());
 
-            SolverUtils.populateResourceMapping(resourceMapping, implementation.getResourceRequirement(), resource);
+            Resource.populateResourceMapping(resourceMapping, implementation.getResourceRequirement(), resource);
 
             dAssignment.setResourceMapping(resourceMapping);
 
@@ -154,7 +154,7 @@ public class EMFeRTrafos
          {
             Resource resource = findResource(eSubAssignment.getNodeName());
             ResourceMapping resourceMapping = new ResourceMapping(instance, resource, new List<>());
-            SolverUtils.populateResourceMapping(resourceMapping, subImpl.getResourceRequirement(), resource);
+            Resource.populateResourceMapping(resourceMapping, subImpl.getResourceRequirement(), resource);
             dSubAssignment.setResourceMapping(resourceMapping);
 
             if (dSubAssignment.isValid())
@@ -208,7 +208,7 @@ public class EMFeRTrafos
             {
                ResourceMapping resourceMapping = new ResourceMapping(instance, resource, new List<>());
 
-               SolverUtils.populateResourceMapping(resourceMapping, implementation.getResourceRequirement(), resource);
+               Resource.populateResourceMapping(resourceMapping, implementation.getResourceRequirement(), resource);
 
                dAssignment.setResourceMapping(resourceMapping);
 
@@ -251,7 +251,7 @@ public class EMFeRTrafos
             for (Resource resource : availableResources)
             {
                ResourceMapping resourceMapping = new ResourceMapping(instance, resource, new List<>());
-               SolverUtils.populateResourceMapping(resourceMapping, subImpl.getResourceRequirement(), resource);
+               Resource.populateResourceMapping(resourceMapping, subImpl.getResourceRequirement(), resource);
                dSubAssignment.setResourceMapping(resourceMapping);
 
                if (dSubAssignment.isValid())
diff --git a/jastadd-mquat-solver-simple/src/main/java/de/tudresden/inf/st/mquat/solving/simple/SimpleSolver.java b/jastadd-mquat-solver-simple/src/main/java/de/tudresden/inf/st/mquat/solving/simple/SimpleSolver.java
index e712909..ebfbdf6 100644
--- a/jastadd-mquat-solver-simple/src/main/java/de/tudresden/inf/st/mquat/solving/simple/SimpleSolver.java
+++ b/jastadd-mquat-solver-simple/src/main/java/de/tudresden/inf/st/mquat/solving/simple/SimpleSolver.java
@@ -40,7 +40,7 @@ public class SimpleSolver implements BenchmarkableSolver {
     Implementation impl = assignment.getImplementation();
 
     ResourceMapping mapping = new ResourceMapping(impl.getResourceRequirement().getInstance(0), resource, new de.tudresden.inf.st.mquat.jastadd.model.List<>());
-    SolverUtils.populateResourceMapping(mapping, impl.getResourceRequirement(), resource);
+    Resource.populateResourceMapping(mapping, impl.getResourceRequirement(), resource);
     assignment.setResourceMapping(mapping);
   }
 
diff --git a/jastadd-mquat-solver/src/main/java/de/tudresden/inf/st/mquat/solving/SolverUtils.java b/jastadd-mquat-solver/src/main/java/de/tudresden/inf/st/mquat/solving/SolverUtils.java
index 70af777..173bb4c 100644
--- a/jastadd-mquat-solver/src/main/java/de/tudresden/inf/st/mquat/solving/SolverUtils.java
+++ b/jastadd-mquat-solver/src/main/java/de/tudresden/inf/st/mquat/solving/SolverUtils.java
@@ -12,28 +12,6 @@ import java.util.concurrent.TimeUnit;
 @SuppressWarnings("Duplicates")
 public class SolverUtils {
 
-  public static void populateResourceMapping(ResourceMapping mapping, ResourceRequirement requirement, Resource resource) {
-
-    for (ResourceRequirement subRequirement : requirement.getResourceRequirementList()) {
-      int fittingResourceCount = 0;
-      for (int currentInstance = 0; currentInstance < subRequirement.getNumInstance(); currentInstance++) {
-        Instance instance = subRequirement.getInstance(currentInstance);
-        for (int currentResource = 0; currentResource < resource.getNumSubResource(); currentResource++) {
-          Resource subResource = resource.getSubResource(currentResource);
-          if (subResource.getType().getRef() == subRequirement.getResourceTypeRef().getRef()) {
-            if (currentInstance == fittingResourceCount) {
-              ResourceMapping newMapping = new ResourceMapping(instance, subResource, new de.tudresden.inf.st.mquat.jastadd.model.List<>());
-              mapping.addResourceMapping(newMapping);
-              populateResourceMapping(newMapping, subRequirement, subResource);
-              fittingResourceCount++;
-            }
-            currentInstance++;
-          }
-        }
-      }
-    }
-  }
-
   public static long populateSolution(List<Assignment> listOfInitialAssignments, Solution result, Logger logger)
       throws SolvingException {
     StopWatch watch = StopWatch.start();
@@ -44,7 +22,7 @@ public class SolverUtils {
       Resource resource = assignment.getResource();
 
       ResourceMapping mapping = new ResourceMapping(impl.getResourceRequirement().getInstance(0), resource, new de.tudresden.inf.st.mquat.jastadd.model.List<>());
-      populateResourceMapping(mapping, impl.getResourceRequirement(), resource);
+      Resource.populateResourceMapping(mapping, impl.getResourceRequirement(), resource);
       assignment.setResourceMapping(mapping);
 
 //      for (ResourceRequirement rr : impl.getResourceRequirementList()) {
diff --git a/jastadd-mquat-solver/src/test/java/de/tudresden/inf/st/mquat/solving/HandwrittenTestSuite.java b/jastadd-mquat-solver/src/test/java/de/tudresden/inf/st/mquat/solving/HandwrittenTestSuite.java
index 7307227..b15bc10 100644
--- a/jastadd-mquat-solver/src/test/java/de/tudresden/inf/st/mquat/solving/HandwrittenTestSuite.java
+++ b/jastadd-mquat-solver/src/test/java/de/tudresden/inf/st/mquat/solving/HandwrittenTestSuite.java
@@ -97,6 +97,11 @@ public abstract class HandwrittenTestSuite {
     }
     collector.checkThat("Solution is not valid", true,
         equalTo(modelAndSolution.getSecondElement().isValid()));
+
+    logger.info("completeness: " + modelAndSolution.getSecondElement().evaluateSoftwareCompleteness());
+    logger.info("sw-validity: " + modelAndSolution.getSecondElement().evaluateSoftwareValidity());
+    logger.info("validity: " + modelAndSolution.getSecondElement().evaluateValidity());
+    logger.info("objective: " + modelAndSolution.getSecondElement().computeObjective());
   }
 
   @Test
-- 
GitLab