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.ArrayList; import java.util.Collection; import java.util.List; /** * A executeQuery to apply several specific single transformations. This is similar to KnownMultiSosie but instead of applying * previously found multisosies, apply an arbitrary set of single-sosies * * Created by marodrig on 19/08/2014. */ public class SpecificSosiesQuery extends TransformationQuery { private List<Integer> specificIndex; private ArrayList<Transformation> transformations; public SpecificSosiesQuery(InputProgram inputProgram, ArrayList<Transformation> transf) { super(inputProgram); transformations = transf; } public SpecificSosiesQuery(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); } transformations = new ArrayList<>(); transformations.addAll(ts); } @Override public Transformation query() throws QueryException { return null; } @Override public List<Transformation> query(int nb) throws QueryException { ArrayList<Transformation> ts = new ArrayList<>(); for ( int i : specificIndex ) { ts.add(transformations.get(i)); } return ts; } public List<Integer> getSpecificIndex() { return specificIndex; } /** * Specific index to apply in the transformation * * @param specificIndex */ public void setSpecificIndex(List<Integer> specificIndex) { this.specificIndex = specificIndex; } }