package com.griddynamics.jagger.util.generators;
import com.griddynamics.jagger.engine.e1.scenario.InfiniteTerminationStrategyConfiguration;
import com.griddynamics.jagger.engine.e1.scenario.IterationsOrDurationStrategyConfiguration;
import com.griddynamics.jagger.engine.e1.scenario.TerminateStrategyConfiguration;
import com.griddynamics.jagger.user.test.configurations.termination.JTerminationCriteria;
import com.griddynamics.jagger.user.test.configurations.termination.JTerminationCriteriaBackground;
import com.griddynamics.jagger.user.test.configurations.termination.JTerminationCriteriaDuration;
import com.griddynamics.jagger.user.test.configurations.termination.JTerminationCriteriaIterations;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* @author asokol
* created 11/6/16
* Generates {@link TerminateStrategyConfiguration} entity from user-defined {@link JTerminationCriteria} entity.
*/
class TerminationGenerator {
static TerminateStrategyConfiguration generateTermination(JTerminationCriteria jTerminationCriteria) {
TerminateStrategyConfiguration termination = null;
if (jTerminationCriteria instanceof JTerminationCriteriaIterations) {
termination = generateIterationTermination((JTerminationCriteriaIterations) jTerminationCriteria);
} else if (jTerminationCriteria instanceof JTerminationCriteriaDuration) {
termination = generateDurationTermination((JTerminationCriteriaDuration) jTerminationCriteria);
} else if (jTerminationCriteria instanceof JTerminationCriteriaBackground) {
termination = new InfiniteTerminationStrategyConfiguration();
}
return termination;
}
private static String parseDuration(long durationInSecond) {
return durationInSecond + "s";
}
private static TerminateStrategyConfiguration generateIterationTermination(JTerminationCriteriaIterations jTerminationIterations) {
IterationsOrDurationStrategyConfiguration termination = new IterationsOrDurationStrategyConfiguration();
String duration = parseDuration(jTerminationIterations.getMaxDurationInSeconds());
termination.setDuration(duration);
termination.setIterations((int) jTerminationIterations.getIterationsNumber());
termination.setShutdown(new AtomicBoolean(false));
return termination;
}
private static TerminateStrategyConfiguration generateDurationTermination(JTerminationCriteriaDuration jTermination) {
IterationsOrDurationStrategyConfiguration termination = new IterationsOrDurationStrategyConfiguration();
String duration = parseDuration(jTermination.getDurationInSeconds());
termination.setDuration(duration);
termination.setIterations(-1);
termination.setShutdown(new AtomicBoolean(false));
return termination;
}
}