package fr.inria.diversify.persistence.json.input; import fr.inria.diversify.codeFragment.CodeFragment; import fr.inria.diversify.diversification.InputProgram; import fr.inria.diversify.persistence.PersistenceException; import fr.inria.diversify.transformation.Transformation; import fr.inria.diversify.transformation.ast.ASTDelete; import org.json.JSONException; import org.json.JSONObject; import java.util.Map; import java.util.UUID; import static fr.inria.diversify.persistence.json.output.JsonSectionOutput.*; /** * Created by marodrig on 12/01/2015. */ public class JsonAstDeleteInput extends JsonTransformationInput { public JsonAstDeleteInput(InputProgram inputProgram, JSONObject jsonObject) { super(inputProgram, jsonObject); } public JsonAstDeleteInput(InputProgram inputProgram) { super(inputProgram); } @Override protected Transformation build() { return new ASTDelete(); } /** * Read data into the given transformations. It may add new transformations as well. * * @param transformations Transformation to be modified by the reader. May increase size after method call. */ @Override public void read(Map<UUID, Transformation> transformations) { try { ASTDelete transf = (ASTDelete)get(transformations); //add the transformation to the transformations map if not present JSONObject cfJson = getJsonObject().getJSONObject(TRANSPLANT_POINT); CodeFragment cf = getCodeFragment(cfJson.getString(POSITION), cfJson.getString(SOURCE_CODE)); logCfStatus(transf, cf, cfJson.getString(POSITION), cfJson.getString(SOURCE_CODE)); transf.setTransplantationPoint(cf); //Add transformation if all went OK addTransformation(transformations, transf); } catch (JSONException e) { throw new PersistenceException("Unable to parse delete transformation", e); } } /** * Indicate if can handle a section within the file * * @param s Section name * @return True if can handle */ @Override public boolean canRead(String s) { String[] r = s.split("\\."); if ( r.length != 2 ) return false; return r[0].equals(TRANSFORMATIONS) && r[1].toLowerCase().equals("delete"); } }