package fr.inria.diversify.transformation.query;
import fr.inria.diversify.diversification.InputProgram;
import fr.inria.diversify.persistence.json.input.JsonTransformationLoader;
import fr.inria.diversify.transformation.Transformation;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Random;
/**
* Created by Simon on 27/11/14.
*/
public class FromListQuery extends TransformationQuery {
private final List<Transformation> transformations;
boolean removeAfterQuery = true;
boolean shuffle = false;
public FromListQuery(InputProgram inputProgram) {
super(inputProgram);
JsonTransformationLoader parser = new JsonTransformationLoader(getInputProgram());
Collection<Transformation> ts = parser.load(getInputProgram().getPreviousTransformationsPath(), true);
transformations = new ArrayList(ts);
}
public FromListQuery(InputProgram inputProgram, int rangeMin, int rangeMax) {
super(inputProgram);
JsonTransformationLoader parser = new JsonTransformationLoader(getInputProgram());
Collection<Transformation> ts = parser.load(getInputProgram().getPreviousTransformationsPath(), true);
ArrayList<Transformation> tmp = new ArrayList(ts);
transformations = new ArrayList<>();
for(int i = rangeMin; i < Math.min(rangeMax, tmp.size()) ; i++) {
transformations.add(tmp.get(i));
}
}
@Override
public Transformation query() throws QueryException {
int index = 0;
if(shuffle) {
Random r = new Random();
index = r.nextInt(transformations.size());
}
if(removeAfterQuery) {
return transformations.remove(index);
} else {
return transformations.get(index);
}
}
public boolean hasNextTransformation() {
return !transformations.isEmpty();
}
public void setShuffle(boolean shuffle) {
this.shuffle = shuffle;
}
public void setRemoveAfterQuery(boolean removeAfterQuery) {
this.removeAfterQuery = removeAfterQuery;
}
}