public class WeightedSum extends AlternativeDependentComputation implements IComputation { static public final String NAME = "WeightedSum"; static public final String LOGICAL_NAME = "NewWeightedSum"; public Object compute(User user) { AbstractAlternative alt = getAlternative1(); List<AbstractEntity> entities = MyBeanService.getInstance().getAll(user); float weightedSum = 0; float totalWeight = 0; // Browse the weights given by the relevant user // each weight has a float value and is related to a criterion for (AbstractEntity entity:entities) { if (entity instanceof MyBean) { MyBean bean = (MyBean) entity; Float weight = bean.getWeight(); ICriteria criterion = bean.getCriterion(); float localSum = 0; float numEvaluator = 0; // Browse all the evaluators to have a mean value (among evaluators) // of the valuation of alt wrt criterion for (Iterator iter = EvaluatorService.getEvaluators().iterator(); iter.hasNext();) { Evaluator evaluator = (Evaluator) iter.next(); Float valuation = evaluator.getEvaluations().getAnswer(alt, criterion); if (valuation != null) { localSum += valuation; numEvaluator++; } } if (numEvaluator!=0 && weight!=null) { float contribution = localSum/numEvaluator; weightedSum += weight.floatValue()*contribution; totalWeight += weight.floatValue(); } } } if (totalWeight !=0) { return weightedSum/totalWeight; } return 0; } public String getDiscriminant() { return WeightedSum.NAME; } public String getName() { return WeightedSum.NAME; } public String getSecondaryDiscriminant() { return WeightedSum.LOGICAL_NAME; } }
It is necessary to add the following imports
import org.decisiondeck.model.alternative.AbstractAlternative; import org.decisiondeck.model.AbstractEntity; import java.util.List; import java.util.Iterator; import org.decisiondeck.mytest.model.MyBean; import org.decisiondeck.mytest.service.MyBeanService; import org.decisiondeck.model.evaluation.ICriteria; import org.decisiondeck.model.evaluation.Evaluator; import org.decisiondeck.service.EvaluatorService;