1 package org.simantics.interop.update.model;
3 import java.util.ArrayList;
4 import java.util.Collection;
5 import java.util.HashSet;
8 import org.simantics.db.Resource;
9 import org.simantics.db.exception.DatabaseException;
10 import org.simantics.interop.test.GraphChanges;
12 public class UpdateNode3 {
18 private Collection<UpdateNode3> children = new ArrayList<UpdateNode3>();
21 public Collection<UpdateNode3> getChildren() {
25 public UpdateNode getUn1() {
29 public UpdateNode getUn2() {
33 public UpdateNode getUn3() {
37 public UpdateNode3(UpdateNode un1, UpdateNode un2, UpdateNode un3) {
43 public boolean isVisible() {
45 return un1.isVisible();
47 return un2.isVisible();
49 return un3.isVisible();
53 public void setVisible(boolean visible) {
55 un1.setVisible(visible);
57 un2.setVisible(visible);
59 un3.setVisible(visible);
63 public static UpdateNode3 getCombinedTree(ModelUpdate update) throws DatabaseException {
64 UpdateTree updateTree1 = update.getUpdateTree();
65 UpdateTree updateTree2 = update.getUpdateTree2();
66 UpdateTree updateTree3 = update.getUpdateTree3();
68 UpdateNode3 n3 = new UpdateNode3(updateTree1.getRootNode(), updateTree2.getRootNode(), updateTree3.getRootNode());
70 populate(n3, update.getChanges(), update.getChanges2(), update.getChanges3());
74 private static void getComparable(UpdateNode n, GraphChanges gc1, GraphChanges gc2, GraphChanges gc3, Set<Resource> nodeR) {
76 Resource r = n.getResource();
78 addNotNull(nodeR,gc1.getComparable().getLeft(r));
79 addNotNull(nodeR,gc1.getComparable().getRight(r));
80 addNotNull(nodeR,gc2.getComparable().getLeft(r));
81 addNotNull(nodeR,gc2.getComparable().getRight(r));
82 addNotNull(nodeR,gc3.getComparable().getLeft(r));
83 addNotNull(nodeR,gc3.getComparable().getRight(r));
87 public static <T> void addNotNull(Set<T> set, T t) {
92 private static void populate(UpdateNode3 un, GraphChanges gc1, GraphChanges gc2, GraphChanges gc3) {
93 Set<UpdateNode> p1 = new HashSet<>();
94 Set<UpdateNode> p2 = new HashSet<>();
95 Set<UpdateNode> p3 = new HashSet<>();
96 Set<Resource> nodeR = new HashSet<>();
97 if (un.getUn1() != null) {
98 for (UpdateNode n1 : un.getUn1().getChildren()) {
99 getComparable(n1, gc1, gc2, gc3, nodeR);
101 UpdateNode n2 = null;
102 if (un.getUn2() != null) {
103 n2 = getMatching(n1, un.getUn2().getChildren(), nodeR);
105 UpdateNode n3 = null;
106 if (un.getUn3() != null) {
107 n3 = getMatching(n1, un.getUn3().getChildren(), nodeR);
109 UpdateNode3 cn = new UpdateNode3(n1, n2, n3);
111 populate(cn, gc1, gc2, gc3);
119 if (un.getUn2() != null) {
120 for (UpdateNode n2 : un.getUn2().getChildren()) {
124 getComparable(n2, gc1, gc2, gc3, nodeR);
125 UpdateNode n3 = null;
126 if (un.getUn3() != null) {
127 n3 = getMatching(n2, un.getUn3().getChildren(), nodeR);
129 UpdateNode3 cn = new UpdateNode3(null, n2, n3);
131 populate(cn, gc1, gc2, gc3);
137 if (un.getUn3() != null) {
138 for (UpdateNode n3 : un.getUn3().getChildren()) {
142 UpdateNode3 cn = new UpdateNode3(null, null, n3);
144 populate(cn, gc1, gc2, gc3);
149 private static UpdateNode getMatching(UpdateNode n , Collection<UpdateNode> coll, Set<Resource> set) {
150 if (n.getResource() == null) {
151 if (coll.size() != 1)
153 UpdateNode n2 = coll.iterator().next();
154 if (n2.getClass() != n.getClass())
159 for (UpdateNode c : coll) {
160 if (set.contains(c.getResource()))