From b70331ebb9ff5d6c6a199648ccc89f9470698f2a Mon Sep 17 00:00:00 2001 From: Nikolaus Huber <nikolaus.huber@uni-wuerzburg.de> Date: Tue, 4 Jun 2013 14:08:03 +0000 Subject: [PATCH] refactorings in weightingfunction package to provide interface for implementing user specific weighting functions git-svn-id: https://se1.informatik.uni-wuerzburg.de/usvn/svn/code/code/DMM/trunk@11918 9e42b895-fcda-4063-8a3b-11be15eb1bbd --- .../WeightingFunctionEvaluator.java | 35 ++++++++++++++----- ...alculator.java => IWeightingFunction.java} | 11 +----- ...va => RandomWeightsWeightingFunction.java} | 7 +--- ...tedSumCalculator.java => WeightedSum.java} | 21 +++-------- ...> WeightedSumWeightingFunctionHelper.java} | 4 +-- .../model/dmm/util/ObjectivesHelper.java | 5 ++- 6 files changed, 38 insertions(+), 45 deletions(-) rename edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/{IWeightingFunctionCalculator.java => IWeightingFunction.java} (60%) rename edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/{RandomWeightCalculator.java => RandomWeightsWeightingFunction.java} (59%) rename edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/{WeightedSumCalculator.java => WeightedSum.java} (74%) rename edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/{WeightingFunctionHelper.java => WeightedSumWeightingFunctionHelper.java} (94%) diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/WeightingFunctionEvaluator.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/WeightingFunctionEvaluator.java index 1aa5c0db..ba9ffcc4 100644 --- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/WeightingFunctionEvaluator.java +++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/WeightingFunctionEvaluator.java @@ -1,6 +1,8 @@ package edu.kit.ipd.descartes.adaptation.evaluation; -import edu.kit.ipd.descartes.adaptation.evaluation.weightingfunction.WeightedSumCalculator; +import org.apache.log4j.Logger; + +import edu.kit.ipd.descartes.adaptation.evaluation.weightingfunction.IWeightingFunction; import edu.kit.ipd.descartes.mm.adaptation.WeightedTactic; import edu.kit.ipd.descartes.mm.adaptation.WeightingFunction; @@ -12,12 +14,9 @@ import edu.kit.ipd.descartes.mm.adaptation.WeightingFunction; */ public class WeightingFunctionEvaluator implements IEvaluator { - private WeightedSumCalculator calculator = null; + private IWeightingFunction calculator = null; + private static Logger logger = Logger.getLogger(WeightingFunctionEvaluator.class); - public WeightingFunctionEvaluator() { - calculator = new WeightedSumCalculator(); - } - /* * (non-Javadoc) * @@ -26,7 +25,27 @@ public class WeightingFunctionEvaluator implements IEvaluator { @Override public void evaluate(WeightedTactic tactic) { WeightingFunction f = tactic.getParentStrategy().getWeightingFunction(); - calculator.setWeightingFunction(f); - calculator.updateWeight(tactic); + + final String functionClassName = f.getWeightingFunction(); + + Object o = null; + try { + o = Class.forName(functionClassName).newInstance(); + } catch (final ClassNotFoundException e) { + e.printStackTrace(); + } catch (final InstantiationException e) { + e.printStackTrace(); + } catch (final IllegalAccessException e) { + e.printStackTrace(); + } + + if (!IWeightingFunction.class.isInstance(o)) { + throw new RuntimeException("Expected a class implementing " + IWeightingFunction.class.getName()); + } + + calculator = (IWeightingFunction) o; + double newWeight = calculator.calculateWeight(tactic); + logger.debug("Setting new weight of " + tactic.getName() + " to " + newWeight); + tactic.setCurrentWeight(newWeight); } } diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/IWeightingFunctionCalculator.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/IWeightingFunction.java similarity index 60% rename from edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/IWeightingFunctionCalculator.java rename to edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/IWeightingFunction.java index bc3a6e78..68571370 100644 --- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/IWeightingFunctionCalculator.java +++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/IWeightingFunction.java @@ -3,7 +3,7 @@ package edu.kit.ipd.descartes.adaptation.evaluation.weightingfunction; import edu.kit.ipd.descartes.mm.adaptation.Tactic; import edu.kit.ipd.descartes.mm.adaptation.WeightedTactic; -public interface IWeightingFunctionCalculator { +public interface IWeightingFunction { /** * Calculates the new weight of the given {@link Tactic}. @@ -12,13 +12,4 @@ public interface IWeightingFunctionCalculator { * @return */ double calculateWeight(WeightedTactic weightedTactic); - - /** - * Calculates and sets the new weight of the given {@link WeightedTactic}. - * - * @param impact - * @return - */ - void updateWeight(WeightedTactic weightedTactic); - } diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/RandomWeightCalculator.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/RandomWeightsWeightingFunction.java similarity index 59% rename from edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/RandomWeightCalculator.java rename to edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/RandomWeightsWeightingFunction.java index 8ff3a547..245197be 100644 --- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/RandomWeightCalculator.java +++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/RandomWeightsWeightingFunction.java @@ -4,16 +4,11 @@ import java.util.Random; import edu.kit.ipd.descartes.mm.adaptation.WeightedTactic; -public class RandomWeightCalculator implements IWeightingFunctionCalculator { +public class RandomWeightsWeightingFunction implements IWeightingFunction { @Override public double calculateWeight(WeightedTactic weightedTactic) { Random r = new Random(System.currentTimeMillis()); return r.nextDouble(); } - - @Override - public void updateWeight(WeightedTactic weightedTactic) { - weightedTactic.setCurrentWeight(calculateWeight(weightedTactic)); - } } diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightedSumCalculator.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightedSum.java similarity index 74% rename from edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightedSumCalculator.java rename to edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightedSum.java index ebc3697a..5394adb8 100644 --- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightedSumCalculator.java +++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightedSum.java @@ -9,18 +9,15 @@ import edu.kit.ipd.descartes.perfdatarepo.Impact; import edu.kit.ipd.descartes.perfdatarepo.MetricValue; import edu.kit.ipd.descartes.perfdatarepo.Result; -public class WeightedSumCalculator implements IWeightingFunctionCalculator { +public class WeightedSum implements IWeightingFunction { - private Logger logger = Logger.getLogger(WeightedSumCalculator.class); + private Logger logger = Logger.getLogger(WeightedSum.class); private WeightingFunction weightingFunction = null; - public WeightedSumCalculator(WeightingFunction f) { + public WeightedSum(WeightingFunction f) { setWeightingFunction(f); } - public WeightedSumCalculator() { - } - public WeightingFunction getWeightingFunction() { return weightingFunction; } @@ -41,12 +38,12 @@ public class WeightedSumCalculator implements IWeightingFunctionCalculator { for (MetricValue afterMetricValue : afterMetricValues) { // calculated delta=(after-before) double afterValue = afterMetricValue.getValue(); - double beforeValue = WeightingFunctionHelper + double beforeValue = WeightedSumWeightingFunctionHelper .getValueForMetricType(afterMetricValue.getMetricType(), before); double delta = afterValue - beforeValue; // get the corresponding weight - double weightOfMetric = WeightingFunctionHelper.getWeightForMetricType(weightingFunction, + double weightOfMetric = WeightedSumWeightingFunctionHelper.getWeightForMetricType(weightingFunction, afterMetricValue.getMetricType()); if (Double.isNaN(weightOfMetric)) @@ -61,12 +58,4 @@ public class WeightedSumCalculator implements IWeightingFunctionCalculator { return newWeight; } - - @Override - public void updateWeight(WeightedTactic weightedTactic) { - double newWeight = calculateWeight(weightedTactic); - logger.debug("Setting new weight of " + weightedTactic.getName() + " to " + newWeight); - weightedTactic.setCurrentWeight(newWeight); - } - } diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightingFunctionHelper.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightedSumWeightingFunctionHelper.java similarity index 94% rename from edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightingFunctionHelper.java rename to edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightedSumWeightingFunctionHelper.java index 75ecdd9d..98c0b27a 100644 --- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightingFunctionHelper.java +++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/evaluation/weightingfunction/WeightedSumWeightingFunctionHelper.java @@ -10,9 +10,9 @@ import edu.kit.ipd.descartes.perfdatarepo.MetricType; import edu.kit.ipd.descartes.perfdatarepo.MetricValue; import edu.kit.ipd.descartes.perfdatarepo.Result; -public class WeightingFunctionHelper { +public class WeightedSumWeightingFunctionHelper { - static Logger logger = Logger.getLogger(WeightingFunctionHelper.class); + static Logger logger = Logger.getLogger(WeightedSumWeightingFunctionHelper.class); /** * diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/util/ObjectivesHelper.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/util/ObjectivesHelper.java index 73beb60c..18125287 100644 --- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/util/ObjectivesHelper.java +++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/util/ObjectivesHelper.java @@ -2,8 +2,7 @@ package edu.kit.ipd.descartes.adaptation.model.dmm.util; import java.util.List; -import edu.kit.ipd.descartes.adaptation.evaluation.weightingfunction.WeightingFunctionHelper; -import edu.kit.ipd.descartes.adaptation.ql.QueryLanguageAdapter; +import edu.kit.ipd.descartes.adaptation.evaluation.weightingfunction.WeightedSumWeightingFunctionHelper; import edu.kit.ipd.descartes.mm.adaptation.Event; import edu.kit.ipd.descartes.mm.adaptation.RelationalOperator; import edu.kit.ipd.descartes.mm.adaptation.Specification; @@ -36,7 +35,7 @@ public class ObjectivesHelper { for (Specification specification : specs) { MetricType m = specification.getMetricType(); // TODO: Connect QueryEngine: Double actualValue = QueryLanguageAdapter.getValueForMetricType(m); - Double actualValue = WeightingFunctionHelper.getValueForMetricType(m, result); + Double actualValue = WeightedSumWeightingFunctionHelper.getValueForMetricType(m, result); Double threshold = specification.getValue(); if (!ObjectivesHelper.compare(actualValue, threshold, specification.getRelationalOperator())) return false; -- GitLab