package hudson.plugins.cigame.rules.plugins.opentasks; import hudson.model.AbstractBuild; import hudson.model.Result; import hudson.plugins.analysis.util.model.Priority; import hudson.plugins.cigame.model.Rule; import hudson.plugins.cigame.model.RuleResult; import hudson.plugins.cigame.util.ActionSequenceRetriever; import hudson.plugins.cigame.util.ResultSequenceValidator; import hudson.plugins.tasks.TasksResultAction; import java.util.List; /** * Default rule for the Open tasks plugin. */ public class DefaultOpenTasksRule implements Rule { private int pointsForAddingAnAnnotation; private int pointsForRemovingAnAnnotation; private Priority tasksPriority; public DefaultOpenTasksRule(Priority tasksPriority, int pointsForAddingAnAnnotation, int pointsForRemovingAnAnnotation) { this.tasksPriority = tasksPriority; this.pointsForAddingAnAnnotation = pointsForAddingAnAnnotation; this.pointsForRemovingAnAnnotation = pointsForRemovingAnAnnotation; } public RuleResult evaluate(AbstractBuild<?, ?> build) { if (new ResultSequenceValidator(Result.UNSTABLE, 2).isValid(build)) { List<List<TasksResultAction>> actionSequence = new ActionSequenceRetriever<TasksResultAction>(TasksResultAction.class, 2).getSequence(build); if ((actionSequence != null) && hasNoErrors(actionSequence.get(0)) && hasNoErrors(actionSequence.get(1))) { int numberOfAnnotations = getNumberOfAnnotations(actionSequence.get(0)) - getNumberOfAnnotations(actionSequence.get(1)); if (numberOfAnnotations > 0) { return new RuleResult(numberOfAnnotations * pointsForAddingAnAnnotation, Messages.OpenTasksRule_DefaultRule_NewTasksCount(numberOfAnnotations, tasksPriority.name())); //$NON-NLS-1$ } if (numberOfAnnotations < 0) { return new RuleResult((numberOfAnnotations * -1) * pointsForRemovingAnAnnotation, Messages.OpenTasksRule_DefaultRule_FixedTasksCount(numberOfAnnotations * -1, tasksPriority.name())); //$NON-NLS-1$ } } } return RuleResult.EMPTY_RESULT; } private boolean hasNoErrors(List<TasksResultAction> actions) { for (TasksResultAction action : actions) { if (action.getResult().hasError()) { return false; } } return true; } private int getNumberOfAnnotations(List<TasksResultAction> actions) { int numberOfAnnotations = 0; for (TasksResultAction action : actions) { numberOfAnnotations += action.getResult().getNumberOfAnnotations(tasksPriority); } return numberOfAnnotations; } public String getName() { return Messages.OpenTasksRule_DefaultRule_Name(tasksPriority.name()); //$NON-NLS-1$ } }