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 static UpdateNode3 getCombinedTree(ModelUpdate update) throws DatabaseException {
44 UpdateTree updateTree1 = update.getUpdateTree();
45 UpdateTree updateTree2 = update.getUpdateTree2();
46 UpdateTree updateTree3 = update.getUpdateTree3();
48 UpdateNode3 n3 = new UpdateNode3(updateTree1.getRootNode(), updateTree2.getRootNode(), updateTree3.getRootNode());
50 populate(n3, update.getChanges(), update.getChanges2(), update.getChanges3());
54 private static void populate(UpdateNode3 un, GraphChanges gc1, GraphChanges gc2, GraphChanges gc3) {
55 Set<UpdateNode> p1 = new HashSet<>();
56 Set<UpdateNode> p2 = new HashSet<>();
57 Set<UpdateNode> p3 = new HashSet<>();
59 if (un.getUn1() != null) {
60 for (UpdateNode n1 : un.getUn1().getChildren()) {
63 if (un.getUn2() != null)
64 n2 = getMathcing(n1, un.getUn2().getChildren(), gc1);
66 if (un.getUn3() != null) {
67 n3 = getMathcing(n1, un.getUn3().getChildren(), gc2);
68 if (n3 == null && n2 != null)
69 n3 = getMathcing(n2, un.getUn3().getChildren(), gc3);
71 UpdateNode3 cn = new UpdateNode3(n1, n2, n3);
73 populate(cn, gc1, gc2, gc3);
81 if (un.getUn2() != null) {
82 for (UpdateNode n2 : un.getUn2().getChildren()) {
88 if (un.getUn3() != null) {
89 n3 = getMathcing(n2, un.getUn3().getChildren(), gc3);
91 UpdateNode3 cn = new UpdateNode3(null, n2, n3);
93 populate(cn, gc1, gc2, gc3);
99 if (un.getUn3() != null) {
100 for (UpdateNode n3 : un.getUn3().getChildren()) {
104 UpdateNode3 cn = new UpdateNode3(null, null, n3);
106 populate(cn, gc1, gc2, gc3);
111 private static UpdateNode getMathcing(UpdateNode n , Collection<UpdateNode> coll, GraphChanges gc) {
112 if (n.getResource() == null) {
113 if (coll.size() != 1)
115 UpdateNode n2 = coll.iterator().next();
116 if (n2.getClass() != n.getClass())
120 Resource o = gc.getComparable().getLeft(n.getResource());
122 o = gc.getComparable().getRight(n.getResource());
125 for (UpdateNode c : coll) {
126 if (o.equals(c.getResource()))