package fr.inria.diversify.testamplification.compare.diff; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.*; /** * User: Simon * Date: 06/03/15 * Time: 13:30 */ @Deprecated public class MonitoringPointDiff { protected int id; protected List<String> methodsDiff; protected List<String> valueOriginal; protected List<String> valueSosie; protected boolean classDiff; protected boolean isMulti; protected int maxSize; //pour les multiMonitoringPoint protected boolean exclude = false; private Object originalValues; public MonitoringPointDiff(int id) { maxSize = -1; this.id = id; methodsDiff = new ArrayList<>(); valueOriginal = new ArrayList<>(); valueSosie = new ArrayList<>(); } public MonitoringPointDiff(JSONObject jsonObject) throws JSONException { id = jsonObject.getInt("id"); classDiff = jsonObject.getBoolean("classDiff"); isMulti = jsonObject.getBoolean("isMulti"); maxSize = jsonObject.getInt("maxSize"); JSONArray diff = jsonObject.getJSONArray("methodDiffs"); int length = diff.length(); methodsDiff = new ArrayList<>(); valueOriginal = new ArrayList<>(); valueSosie = new ArrayList<>(); for (int i = 0; i < length; i++) { methodsDiff.add(diff.getString(i)); } } public void setClassDiff(boolean diff){ classDiff = diff; } public void addMethodDiff(String method, Object oValue, Object sValue) { if(!methodsDiff.contains(method)) { methodsDiff.add(method); valueOriginal.add(oValue.toString()); valueSosie.add(sValue.toString()); } } public void setIsMulti(boolean isMulti) { this.isMulti = isMulti; } public boolean getClassDiff() { return classDiff; } public List<String> getMethodsDiff() { return methodsDiff; } public void setMaxSize(int size) { maxSize = size; } public void addAllMethodDiff(List<String> methodsDiff, List<String> valueOriginal, List<String> valueSosie) { for(int i = 0; i < methodsDiff.size(); i++) { addMethodDiff(methodsDiff.get(i), valueOriginal.get(i), valueSosie.get(i)); } } public int size() { if(exclude) return 0; int size = 0; if(maxSize != -1) { size = 1; } if(classDiff) { size++; } if(isMulti) { size++; } return size + methodsDiff.size(); } public String toString() { String string = "id: " +id+ "\n"; string += "\tmaxSize: " +maxSize+"\n"; string += "\tclassDiff: " + classDiff + "\n"; string += "\tisMulti: " + isMulti + "\n"; return string + "\tmethodDiff: " + methodsDiff; } public JSONObject toJson() throws JSONException { JSONObject object = new JSONObject(); object.put("id", id); object.put("maxSize", maxSize); object.put("classDiff", classDiff); object.put("isMulti", isMulti); object.put("methodDiffs", methodsDiff); return object; } public String buildFilter() { String string = "" + id; string += ";" +maxSize; string += ";" + classDiff; string += ";" + isMulti; for(String mth : methodsDiff) { string += ";"+ mth; } return string; } public void filter(Set<String> strings) { for (String string :strings) { String[] split = string.split(";"); int splitId = Integer.parseInt(split[0]); if(splitId == id) { maxSize = Math.min(maxSize, Integer.parseInt(split[1])); classDiff = Boolean.parseBoolean(split[2]); isMulti = Boolean.parseBoolean(split[3]); exclude = classDiff || isMulti; for(int i = 4; i < split.length; i++) { methodsDiff.remove(split[i]); } } } } public List<String> getValueOriginal() { return valueOriginal; } public List<String> getValueSosie() { return valueSosie; } public void merge(MonitoringPointDiff diffOther) { if(maxSize != -1 || diffOther.maxSize != -1) { maxSize = Math.min(maxSize, diffOther.maxSize); } exclude = exclude || diffOther.exclude; classDiff = classDiff || diffOther.classDiff; isMulti = isMulti || diffOther.classDiff; if(classDiff) { methodsDiff.clear(); } else { methodsDiff.addAll(diffOther.methodsDiff); } } public MonitoringPointDiff clone() { MonitoringPointDiff diff = new MonitoringPointDiff(id); diff.methodsDiff.addAll(methodsDiff); diff.classDiff = classDiff; diff.isMulti = isMulti; diff.exclude = exclude; diff.maxSize = maxSize; return diff; } public int mergeSize(MonitoringPointDiff diffOther) { if(exclude || diffOther.exclude) return 0; int size = 0; if(maxSize != -1 || diffOther.maxSize != -1) { size = 1; } if(classDiff || diffOther.classDiff) { size++; } if(isMulti || diffOther.classDiff) { size++; } Set<String> set = new HashSet<>(methodsDiff); set.addAll(diffOther.methodsDiff); return size + set.size(); } }