[469149] Updated transformation type configuration for generic LS

Change-Id: Idf7c82e18ecfa96c8580fda4061bcb7162c22c84
Signed-off-by: Zoltan Ujhelyi <ujhelyiz@incquerylabs.com>
diff --git a/cps/tests/org.eclipse.viatra.examples.cps.tests.util/samples/cps2dep_sample.properties b/cps/tests/org.eclipse.viatra.examples.cps.tests.util/samples/cps2dep_sample.properties
index b2b33da..33953f2 100644
--- a/cps/tests/org.eclipse.viatra.examples.cps.tests.util/samples/cps2dep_sample.properties
+++ b/cps/tests/org.eclipse.viatra.examples.cps.tests.util/samples/cps2dep_sample.properties
@@ -14,7 +14,7 @@
 # log level for generator
 cps.generator.loglevel = INFO
 
-# log level for EMF-IncQuery and EVM
+# log level for VIATRA Query and EVM
 org.eclipse.viatra.query.loglevel = INFO
 
 # log level for BenchmarkResult
@@ -32,6 +32,8 @@
 # 	BATCH_OPTIMIZED
 # 	BATCH_VIATRA_QUERY_RETE
 # 	BATCH_VIATRA_QUERY_LOCAL_SEARCH
+# 	BATCH_VIATRA_QUERY_LOCAL_SEARCH_GENERIC
+# 	BATCH_VIATRA_QUERY_LOCAL_SEARCH_WO_INDEXER
 # 	BATCH_VIATRA_TRANSFORMATION
 # 	INCR_VIATRA_QUERY_RESULT_TRACEABILITY
 # 	INCR_VIATRA_EXPLICIT_TRACEABILITY
diff --git a/cps/transformations/org.eclipse.viatra.examples.cps.xform.m2m.launcher/src/org/eclipse/viatra/examples/cps/xform/m2m/launcher/TransformationType.java b/cps/transformations/org.eclipse.viatra.examples.cps.xform.m2m.launcher/src/org/eclipse/viatra/examples/cps/xform/m2m/launcher/TransformationType.java
index dcfc201..7ff4934 100644
--- a/cps/transformations/org.eclipse.viatra.examples.cps.xform.m2m.launcher/src/org/eclipse/viatra/examples/cps/xform/m2m/launcher/TransformationType.java
+++ b/cps/transformations/org.eclipse.viatra.examples.cps.xform.m2m.launcher/src/org/eclipse/viatra/examples/cps/xform/m2m/launcher/TransformationType.java
@@ -22,7 +22,6 @@
 import org.eclipse.viatra.query.runtime.localsearch.matcher.integration.LocalSearchHints;
 import org.eclipse.viatra.query.runtime.localsearch.planner.cost.IConstraintEvaluationContext;
 import org.eclipse.viatra.query.runtime.localsearch.planner.cost.impl.StatisticsBasedConstraintCostFunction;
-import org.eclipse.viatra.query.runtime.localsearch.planner.cost.impl.VariableBindingBasedCostFunction;
 import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
 import org.eclipse.viatra.query.runtime.matchers.context.IInputKey;
 import org.eclipse.viatra.query.runtime.rete.matcher.ReteBackendFactory;
@@ -44,57 +43,17 @@
     },
     BATCH_VIATRA_QUERY_LOCAL_SEARCH {
     	public CPSTransformationWrapper getWrapper() {
-	    	QueryEvaluationHint hint = LocalSearchHints.getDefaultFlatten().build();
-			return new BatchQueryLocalSearch(hint, hint);
+			QueryEvaluationHint hint = LocalSearchHints.getDefaultFlatten().build();
+			QueryEvaluationHint traceHint = LocalSearchHints.getDefaultFlatten().setCostFunction(new EndOfTransformationCostFunction()).build();
+			return new BatchQueryLocalSearch(hint, traceHint);
 	    }
     },
-    BATCH_VIATRA_QUERY_LOCAL_SEARCH_TRACE_STATS {
+    BATCH_VIATRA_QUERY_LOCAL_SEARCH_GENERIC {
         public CPSTransformationWrapper getWrapper() {
-            QueryEvaluationHint hint = LocalSearchHints.getDefaultFlatten().build();
-            final Map<IInputKey, IInputKey> substitutions = Maps.newHashMap();
-            substitutions.put(new EClassTransitiveInstancesKey(TraceabilityPackage.Literals.CPS2_DEPLOYMENT_TRACE), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
-            substitutions.put(new EClassTransitiveInstancesKey(DeploymentPackage.Literals.DEPLOYMENT_ELEMENT), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
-            substitutions.put(new EStructuralFeatureInstancesKey(TraceabilityPackage.Literals.CPS2_DEPLOYMENT_TRACE__CPS_ELEMENTS), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
-            substitutions.put(new EStructuralFeatureInstancesKey(TraceabilityPackage.Literals.CPS2_DEPLOYMENT_TRACE__DEPLOYMENT_ELEMENTS), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
-            substitutions.put(new EStructuralFeatureInstancesKey(TraceabilityPackage.Literals.CPS_TO_DEPLOYMENT__TRACES), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
-            QueryEvaluationHint traceHint = LocalSearchHints.getDefaultFlatten().setCostFunction(new StatisticsBasedConstraintCostFunction() {
-                
-                @Override
-                public long countTuples(IConstraintEvaluationContext input, IInputKey supplierKey) {
-                    if (supplierKey instanceof EClassTransitiveInstancesKey){
-                        EClass eclass = ((EClassTransitiveInstancesKey) supplierKey).getEmfKey();
-                        if (TraceabilityPackage.Literals.CPS_TO_DEPLOYMENT.equals(eclass)){
-                            return 1l;
-                        }
-                    }
-                    if (substitutions.containsKey(supplierKey)){
-                        return input.getRuntimeContext().countTuples(substitutions.get(supplierKey), null);
-                    }
-                    
-                    return input.getRuntimeContext().countTuples(supplierKey, null);
-                }
-            }).build();
-            return new BatchQueryLocalSearch(hint, traceHint);
+            QueryEvaluationHint hint = LocalSearchHints.getDefaultGeneric().build();
+            return new BatchQueryLocalSearch(hint, hint);
         }
     },
-    BATCH_VIATRA_QUERY_LOCAL_SEARCH_NO_FLAT {
-        public CPSTransformationWrapper getWrapper() {
-            QueryEvaluationHint hint = LocalSearchHints.getDefault().build();
-			return new BatchQueryLocalSearch(hint, hint);
-        }
-    },
-    BATCH_VIATRA_QUERY_LOCAL_SEARCH_DUMB_PLANNER {
-        public CPSTransformationWrapper getWrapper() {
-            QueryEvaluationHint hint = LocalSearchHints.getDefaultFlatten().setCostFunction(new VariableBindingBasedCostFunction()).build();
-			return new BatchQueryLocalSearch(hint, hint);
-        }
-    },
-    BATCH_VIATRA_QUERY_LOCAL_SEARCH_STATISTICS {
-    	public CPSTransformationWrapper getWrapper() {
-    		QueryEvaluationHint hint = LocalSearchHints.getDefault().setUseBase(false).build();
-			return new BatchQueryLocalSearch(hint, hint);
-    	}
-    },
     BATCH_VIATRA_QUERY_LOCAL_SEARCH_WO_INDEXER {
         public CPSTransformationWrapper getWrapper() {
             QueryEvaluationHint hint = LocalSearchHints.getDefaultNoBase().build();
@@ -104,6 +63,7 @@
     BATCH_VIATRA_TRANSFORMATION {
         public CPSTransformationWrapper getWrapper() {return new BatchViatra();}
 
+        @Override
         public boolean isDebuggable() {
             return true;
         }
@@ -120,11 +80,41 @@
     INCR_VIATRA_TRANSFORMATION {
         public CPSTransformationWrapper getWrapper() {return new ViatraTransformation();}
 
+        @Override
         public boolean isDebuggable() {
             return true;
         }
     };
 
+    private final class EndOfTransformationCostFunction extends StatisticsBasedConstraintCostFunction {
+        final Map<IInputKey, IInputKey> substitutions;
+
+        public EndOfTransformationCostFunction() {
+            super();
+            substitutions = Maps.newHashMap();
+            substitutions.put(new EClassTransitiveInstancesKey(TraceabilityPackage.Literals.CPS2_DEPLOYMENT_TRACE), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
+            substitutions.put(new EClassTransitiveInstancesKey(DeploymentPackage.Literals.DEPLOYMENT_ELEMENT), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
+            substitutions.put(new EStructuralFeatureInstancesKey(TraceabilityPackage.Literals.CPS2_DEPLOYMENT_TRACE__CPS_ELEMENTS), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
+            substitutions.put(new EStructuralFeatureInstancesKey(TraceabilityPackage.Literals.CPS2_DEPLOYMENT_TRACE__DEPLOYMENT_ELEMENTS), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
+            substitutions.put(new EStructuralFeatureInstancesKey(TraceabilityPackage.Literals.CPS_TO_DEPLOYMENT__TRACES), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
+        }
+
+        @Override
+        public long countTuples(IConstraintEvaluationContext input, IInputKey supplierKey) {
+            if (supplierKey instanceof EClassTransitiveInstancesKey){
+                EClass eclass = ((EClassTransitiveInstancesKey) supplierKey).getEmfKey();
+                if (TraceabilityPackage.Literals.CPS_TO_DEPLOYMENT.equals(eclass)){
+                    return 1l;
+                }
+            }
+            if (substitutions.containsKey(supplierKey)){
+                return input.getRuntimeContext().countTuples(substitutions.get(supplierKey), null);
+            }
+            
+            return input.getRuntimeContext().countTuples(supplierKey, null);
+        }
+    }
+
     public abstract CPSTransformationWrapper getWrapper();
 
     public boolean isDebuggable() {