]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.interop/src/org/simantics/interop/test/GraphChanges.java
8ec4102a6bea3c6720899ea60fd6c77ef2b375aa
[simantics/interop.git] / org.simantics.interop / src / org / simantics / interop / test / GraphChanges.java
1 package org.simantics.interop.test;
2
3 import java.util.List;
4 import java.util.Map.Entry;
5
6 import org.simantics.db.ReadGraph;
7 import org.simantics.db.Resource;
8 import org.simantics.db.Statement;
9 import org.simantics.db.common.utils.NameUtils;
10 import org.simantics.db.exception.DatabaseException;
11 import org.simantics.utils.datastructures.BijectionMap;
12
13 public class GraphChanges {
14         
15         private Resource r1;
16         private Resource r2;
17         private List<Statement> deletions;
18         private List<Statement> additions;
19         private List<Modification> modifications;
20         
21         private BijectionMap<Resource, Resource> comparable;
22         
23         public static class Modification {
24                 Resource leftSub;
25                 Resource rightSub;
26                 Statement leftStm;
27                 Statement rightStm;
28
29                 
30                 int hashCode;
31                 
32                 public Modification(Resource leftSub, Resource rightSub, Statement leftStm, Statement rightStm) {
33                         super();
34                         this.leftSub = leftSub;
35                         this.rightSub = rightSub;
36                         this.leftStm = leftStm;
37                         this.rightStm = rightStm;
38                         
39                         hashCode = leftSub.hashCode() + rightSub.hashCode();
40                         if (leftStm != null)
41                                 hashCode += leftStm.hashCode();
42                         if (rightStm != null)
43                                 hashCode += rightStm.hashCode();
44                 }
45
46                 public boolean isLeftAsserted() {
47                         return !leftSub.equals(leftStm.getSubject());
48                 }
49                 
50                 public boolean isRightAsserted() {
51                         return !rightSub.equals(rightStm.getSubject());
52                 }
53
54                 public Resource getLeftSub() {
55                         return leftSub;
56                 }
57
58                 public void setLeftSub(Resource leftSub) {
59                         this.leftSub = leftSub;
60                 }
61
62                 public Resource getRightSub() {
63                         return rightSub;
64                 }
65
66                 public void setRightSub(Resource rightSub) {
67                         this.rightSub = rightSub;
68                 }
69
70                 public Statement getLeftStm() {
71                         return leftStm;
72                 }
73
74                 public void setLeftStm(Statement leftStm) {
75                         this.leftStm = leftStm;
76                 }
77
78                 public Statement getRightStm() {
79                         return rightStm;
80                 }
81
82                 public void setRightStm(Statement rightStm) {
83                         this.rightStm = rightStm;
84                 }
85                 
86                 public Resource getPredicate() {
87                     if (leftStm != null)
88                         return leftStm.getPredicate();
89                     return rightStm.getPredicate();
90                 }
91                 
92                 @Override
93                 public boolean equals(Object obj) {
94                         if (obj.getClass() != this.getClass())
95                                 return false;
96                         Modification other = (Modification)obj;
97                         if (!leftSub.equals(other.leftSub))
98                                 return false;
99                         if (!rightSub.equals(other.rightSub))
100                                 return false;
101                         if (leftStm != null) {
102                                 if (!leftStm.equals(other.leftStm))
103                                         return false;
104                         } else if (other.leftStm != null)
105                                 return false;
106                         if (rightStm != null) {
107                                 if (!rightStm.equals(other.rightStm))
108                                         return false;
109                         } else if (other.rightStm != null)
110                                 return false;
111                         return true;
112                 }
113                 
114                 @Override
115                 public int hashCode() {
116                         return hashCode;
117                 }
118
119         }
120         
121         public GraphChanges(Resource r1, Resource r2, List<Statement> deletions, List<Statement> additions,
122                         List<Modification> modifications, BijectionMap<Resource, Resource> comparable) {
123                 super();
124                 this.r1 = r1;
125                 this.r2 = r2;
126                 this.deletions = deletions;
127                 this.additions = additions;
128                 this.modifications = modifications;
129                 this.comparable = comparable;
130         }
131         
132         public Resource getResource1() {
133                 return r1;
134         }
135         
136         public Resource getResource2() {
137                 return r2;
138         }
139         
140         public List<Statement> getAdditions() {
141                 return additions;
142         }
143         
144         public List<Statement> getDeletions() {
145                 return deletions;
146         }
147         
148         public List<Modification> getModifications() {
149                 return modifications;
150         }
151         
152         public BijectionMap<Resource, Resource> getComparable() {
153                 return comparable;
154         }
155         
156         public String toString(ReadGraph graph) throws DatabaseException {
157                 StringBuilder sb = new StringBuilder();
158                 sb.append("Del:\n");
159                 for (Statement stm : deletions) {
160                         sb.append(NameUtils.getSafeName(graph, stm.getSubject()) + " "+
161                                                    NameUtils.getSafeName(graph, stm.getPredicate()) + " " +
162                                                    NameUtils.getSafeName(graph, stm.getObject()) + " (" +
163                                                    stm.getSubject() + " " +stm.getPredicate() + " " + stm.getObject() + ")\n");
164         }
165                 sb.append("Add:\n");
166                 for (Statement stm : additions) {
167                         sb.append(NameUtils.getSafeName(graph, stm.getSubject()) + " "+
168                                            NameUtils.getSafeName(graph, stm.getPredicate()) + " " +
169                                    NameUtils.getSafeName(graph, stm.getObject()) + " (" +
170                                    stm.getSubject() + " " +stm.getPredicate() + " " + stm.getObject() + ")\n");
171         }
172                 sb.append("Mod:\n");
173                 for (Modification mod :modifications) {
174                         {
175                                 Statement stm = mod.getLeftStm();
176                                 sb.append(NameUtils.getSafeName(graph, mod.getLeftSub()) + " "+
177                                                    NameUtils.getSafeName(graph, stm.getPredicate()) + " " +
178                                                    truncate(NameUtils.getSafeName(graph, stm.getObject())) + " (" +
179                                            stm.getSubject() + " " +stm.getPredicate() + " " + stm.getObject() + ")\n");
180                         }
181                         {
182                                 Statement stm = mod.getRightStm();
183                                 sb.append(NameUtils.getSafeName(graph, mod.getRightSub()) + " "+
184                                                    NameUtils.getSafeName(graph, stm.getPredicate()) + " " +
185                                                    truncate(NameUtils.getSafeName(graph, stm.getObject())) + " (" +
186                                            stm.getSubject() + " " +stm.getPredicate() + " " + stm.getObject() + ")\n");
187                         }
188         }
189                 return sb.toString();
190         }
191         
192         public String truncate(String s) {
193                 if (s.length() < 100)
194                         return s;
195                 return s.substring(0, 100)+"...";
196         }
197         
198         public String comparableToString(ReadGraph graph) throws DatabaseException {
199                 StringBuilder sb = new StringBuilder();
200                 sb.append("Comparable:\n");
201                 for (Entry<Resource, Resource> entry : comparable.getEntries()) {
202                         sb.append(NameUtils.getSafeName(graph, entry.getKey()) + " "+
203                                            NameUtils.getSafeName(graph, entry.getValue()) + " (" +
204                                            entry.getKey() + " " +entry.getValue() + ")\n");
205                         
206                 }
207                 return sb.toString();
208         }
209
210 }