import org.simantics.db.common.utils.NameUtils;
import org.simantics.db.exception.DatabaseException;
import org.simantics.utils.datastructures.BijectionMap;
-import org.simantics.utils.datastructures.Pair;
public class GraphChanges {
private Resource r2;
private List<Statement> deletions;
private List<Statement> additions;
- private List<Pair<Statement,Statement>> modifications;
+ private List<Modification> modifications;
private BijectionMap<Resource, Resource> comparable;
+ public static class Modification {
+ Resource leftSub;
+ Resource rightSub;
+ Statement leftStm;
+ Statement rightStm;
+
+
+ int hashCode;
+
+ public Modification(Resource leftSub, Resource rightSub, Statement leftStm, Statement rightStm) {
+ super();
+ this.leftSub = leftSub;
+ this.rightSub = rightSub;
+ this.leftStm = leftStm;
+ this.rightStm = rightStm;
+
+ hashCode = leftSub.hashCode() + rightSub.hashCode();
+ if (leftStm != null)
+ hashCode += leftStm.hashCode();
+ if (rightStm != null)
+ hashCode += rightStm.hashCode();
+ }
+
+ public boolean isLeftAsserted() {
+ return !leftSub.equals(leftStm.getSubject());
+ }
+
+ public boolean isRightAsserted() {
+ return !rightSub.equals(rightStm.getSubject());
+ }
+
+ public Resource getLeftSub() {
+ return leftSub;
+ }
+
+ public void setLeftSub(Resource leftSub) {
+ this.leftSub = leftSub;
+ }
+
+ public Resource getRightSub() {
+ return rightSub;
+ }
+
+ public void setRightSub(Resource rightSub) {
+ this.rightSub = rightSub;
+ }
+
+ public Statement getLeftStm() {
+ return leftStm;
+ }
+
+ public void setLeftStm(Statement leftStm) {
+ this.leftStm = leftStm;
+ }
+
+ public Statement getRightStm() {
+ return rightStm;
+ }
+
+ public void setRightStm(Statement rightStm) {
+ this.rightStm = rightStm;
+ }
+
+ public Resource getPredicate() {
+ if (leftStm != null)
+ return leftStm.getPredicate();
+ return rightStm.getPredicate();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj.getClass() != this.getClass())
+ return false;
+ Modification other = (Modification)obj;
+ if (!leftSub.equals(other.leftSub))
+ return false;
+ if (!rightSub.equals(other.rightSub))
+ return false;
+ if (leftStm != null) {
+ if (!leftStm.equals(other.leftStm))
+ return false;
+ } else if (other.leftStm != null)
+ return false;
+ if (rightStm != null) {
+ if (!rightStm.equals(other.rightStm))
+ return false;
+ } else if (other.rightStm != null)
+ return false;
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ return hashCode;
+ }
+
+ }
+
public GraphChanges(Resource r1, Resource r2, List<Statement> deletions, List<Statement> additions,
- List<Pair<Statement, Statement>> modifications, BijectionMap<Resource, Resource> comparable) {
+ List<Modification> modifications, BijectionMap<Resource, Resource> comparable) {
super();
this.r1 = r1;
this.r2 = r2;
return deletions;
}
- public List<Pair<Statement, Statement>> getModifications() {
+ public List<Modification> getModifications() {
return modifications;
}
StringBuilder sb = new StringBuilder();
sb.append("Del:\n");
for (Statement stm : deletions) {
- sb.append(NameUtils.getSafeName(graph, stm.getSubject()) + " "+
- NameUtils.getSafeName(graph, stm.getPredicate()) + " " +
- NameUtils.getSafeName(graph, stm.getObject()) + " (" +
- stm.getSubject() + " " +stm.getPredicate() + " " + stm.getObject() + ")\n");
+ sb.append(toString(graph, stm));
+ sb.append("\n");
}
sb.append("Add:\n");
for (Statement stm : additions) {
- sb.append(NameUtils.getSafeName(graph, stm.getSubject()) + " "+
- NameUtils.getSafeName(graph, stm.getPredicate()) + " " +
- NameUtils.getSafeName(graph, stm.getObject()) + " (" +
- stm.getSubject() + " " +stm.getPredicate() + " " + stm.getObject() + ")\n");
+ sb.append(toString(graph, stm));
+ sb.append("\n");
}
sb.append("Mod:\n");
- for (Pair<Statement, Statement> mod :modifications) {
- {
- Statement stm = mod.first;
- sb.append(NameUtils.getSafeName(graph, stm.getSubject()) + " "+
+ for (Modification mod :modifications) {
+ sb.append(toString(graph, mod));
+ sb.append("\n");
+ }
+ return sb.toString();
+ }
+
+ public static String toString(ReadGraph graph, Statement stm) throws DatabaseException{
+ return NameUtils.getSafeName(graph, stm.getSubject()) + " "+
+ NameUtils.getSafeName(graph, stm.getPredicate()) + " " +
+ NameUtils.getSafeName(graph, stm.getObject()) + " (" +
+ stm.getSubject() + " " +stm.getPredicate() + " " + stm.getObject();
+ }
+
+ public static String toString(ReadGraph graph, Modification mod) throws DatabaseException{
+ StringBuilder sb = new StringBuilder();
+ {
+ Statement stm = mod.getLeftStm();
+ if (stm != null) {
+ sb.append(NameUtils.getSafeName(graph, mod.getLeftSub()) + " "+
NameUtils.getSafeName(graph, stm.getPredicate()) + " " +
- NameUtils.getSafeName(graph, stm.getObject()) + " (" +
- stm.getSubject() + " " +stm.getPredicate() + " " + stm.getObject() + ")\n");
+ truncate(NameUtils.getSafeName(graph, stm.getObject())) + " (" +
+ mod.getLeftSub() + " " + stm.getSubject() + " " +stm.getPredicate() + " " + stm.getObject() + ")\n");
+ } else {
+ sb.append(NameUtils.getSafeName(graph, mod.getLeftSub()) + " "+ mod.getLeftSub() + " N/A\n");
}
- {
- Statement stm = mod.second;
- sb.append(NameUtils.getSafeName(graph, stm.getSubject()) + " "+
+ }
+ {
+ Statement stm = mod.getRightStm();
+ if (stm != null) {
+ sb.append(NameUtils.getSafeName(graph, mod.getRightSub()) + " "+
NameUtils.getSafeName(graph, stm.getPredicate()) + " " +
- NameUtils.getSafeName(graph, stm.getObject()) + " (" +
- stm.getSubject() + " " +stm.getPredicate() + " " + stm.getObject() + ")\n");
+ truncate(NameUtils.getSafeName(graph, stm.getObject())) + " (" +
+ mod.getRightSub() + " " + stm.getSubject() + " " +stm.getPredicate() + " " + stm.getObject() + ")");
+ } else {
+ sb.append(NameUtils.getSafeName(graph, mod.getRightSub()) + " "+ mod.getRightSub() + " N/A");
}
- }
+
+ }
return sb.toString();
}
+ public static String truncate(String s) {
+ if (s.length() < 100)
+ return s;
+ return s.substring(0, 100)+"...";
+ }
+
public String comparableToString(ReadGraph graph) throws DatabaseException {
StringBuilder sb = new StringBuilder();
sb.append("Comparable:\n");