-package org.simantics.interop.test;\r
-\r
-import java.util.List;\r
-\r
-import org.simantics.db.Statement;\r
-import org.simantics.utils.datastructures.Pair;\r
-\r
-public class GraphChanges {\r
- \r
- private List<Statement> deletions;\r
- private List<Statement> additions;\r
- private List<Pair<Statement,Statement>> modifications;\r
- \r
- public GraphChanges(List<Statement> deletions, List<Statement> additions,\r
- List<Pair<Statement, Statement>> modifications) {\r
- super();\r
- this.deletions = deletions;\r
- this.additions = additions;\r
- this.modifications = modifications;\r
- }\r
- \r
- public List<Statement> getAdditions() {\r
- return additions;\r
- }\r
- \r
- public List<Statement> getDeletions() {\r
- return deletions;\r
- }\r
- \r
- public List<Pair<Statement, Statement>> getModifications() {\r
- return modifications;\r
- }\r
-\r
-}\r
+package org.simantics.interop.test;
+
+import java.util.List;
+import java.util.Map.Entry;
+
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.Statement;
+import org.simantics.db.common.utils.NameUtils;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.utils.datastructures.BijectionMap;
+
+public class GraphChanges {
+
+ private Resource r1;
+ private Resource r2;
+ private List<Statement> deletions;
+ private List<Statement> additions;
+ 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<Modification> modifications, BijectionMap<Resource, Resource> comparable) {
+ super();
+ this.r1 = r1;
+ this.r2 = r2;
+ this.deletions = deletions;
+ this.additions = additions;
+ this.modifications = modifications;
+ this.comparable = comparable;
+ }
+
+ public Resource getResource1() {
+ return r1;
+ }
+
+ public Resource getResource2() {
+ return r2;
+ }
+
+ public List<Statement> getAdditions() {
+ return additions;
+ }
+
+ public List<Statement> getDeletions() {
+ return deletions;
+ }
+
+ public List<Modification> getModifications() {
+ return modifications;
+ }
+
+ public BijectionMap<Resource, Resource> getComparable() {
+ return comparable;
+ }
+
+ public String toString(ReadGraph graph) throws DatabaseException {
+ StringBuilder sb = new StringBuilder();
+ sb.append("Del:\n");
+ for (Statement stm : deletions) {
+ sb.append(toString(graph, stm));
+ sb.append("\n");
+ }
+ sb.append("Add:\n");
+ for (Statement stm : additions) {
+ sb.append(toString(graph, stm));
+ sb.append("\n");
+ }
+ sb.append("Mod:\n");
+ 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()) + " " +
+ 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.getRightStm();
+ if (stm != null) {
+ sb.append(NameUtils.getSafeName(graph, mod.getRightSub()) + " "+
+ NameUtils.getSafeName(graph, stm.getPredicate()) + " " +
+ 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");
+ for (Entry<Resource, Resource> entry : comparable.getEntries()) {
+ sb.append(NameUtils.getSafeName(graph, entry.getKey()) + " "+
+ NameUtils.getSafeName(graph, entry.getValue()) + " (" +
+ entry.getKey() + " " +entry.getValue() + ")\n");
+
+ }
+ return sb.toString();
+ }
+
+}