package fr.inria.diversify.transformation.query;
import fr.inria.diversify.diversification.InputProgram;
import fr.inria.diversify.transformation.Transformation;
import fr.inria.diversify.transformation.TransformationJsonParser;
import fr.inria.diversify.transformation.TransformationParserException;
import java.io.File;
import java.util.*;
/**
* Search for points of known sosies
* <p/>
* Created by marcel on 6/06/14.
*/
public class ConsecutiveKnownSosieQuery extends TransformationQuery {
private ArrayList<Transformation> sosies;
private int currentTrial = 0;
public ConsecutiveKnownSosieQuery(InputProgram inputProgram, ArrayList<Transformation> transf) {
super(inputProgram);
extractSosies(transf);
}
public ConsecutiveKnownSosieQuery(InputProgram inputProgram) throws TransformationParserException {
super(inputProgram);
TransformationJsonParser parser = new TransformationJsonParser(false, getInputProgram());
File f = new File(getInputProgram().getPreviousTransformationsPath());
Collection<Transformation> ts;
if (f.isDirectory()) {
ts = parser.parseDir(f.getAbsolutePath());
} else {
ts = parser.parseFile(f);
}
extractSosies(ts);
}
/**
* Extracts the sosies from a transformation list
*
* @param transf
*/
private void extractSosies(Collection<Transformation> transf) {
sosies = new ArrayList<>();
for (Transformation t : transf) {
if (t.isSosie()) {
sosies.add(t);
}
}
}
@Override
public Transformation query() {
Transformation t = sosies.get(currentTrial);
currentTrial++;
return t;
}
/**
* Gets the current running trial
* @return
*/
public int getCurrentTrial() {
return currentTrial;
}
/**
* Sets the trial. In case you want to start over
* @param currentTrial
*/
public void setCurrentTrial(int currentTrial) {
this.currentTrial = currentTrial;
}
}