]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.interop.update/src/org/simantics/interop/update/model/AddDeleteUpdateOp.java
Merge branch 'master' of
[simantics/interop.git] / org.simantics.interop.update / src / org / simantics / interop / update / model / AddDeleteUpdateOp.java
1 package org.simantics.interop.update.model;
2
3 import java.util.ArrayList;
4 import java.util.Collection;
5 import java.util.List;
6
7 import org.simantics.db.Resource;
8 import org.simantics.db.Statement;
9 import org.simantics.db.WriteGraph;
10 import org.simantics.db.common.utils.ListUtils;
11 import org.simantics.db.common.utils.NameUtils;
12 import org.simantics.db.exception.DatabaseException;
13 import org.simantics.interop.test.GraphChanges;
14 import org.simantics.issues.common.IssueUtils;
15 import org.simantics.issues.ontology.IssueResource;
16 import org.simantics.layer0.Layer0;
17
18 public abstract class AddDeleteUpdateOp extends UpdateOp {
19         
20 <<<<<<< HEAD
21         protected boolean add;
22 =======
23         boolean add;
24 >>>>>>> branch 'master' of ssh://luukkainen@www.simantics.org:29418/simantics/interop
25         
26         public AddDeleteUpdateOp(GraphChanges changes) {
27                 super(changes);
28         }
29         
30         @Override
31         public boolean isAdd() {
32                 return add;
33         }
34         
35         @Override
36         public boolean isDelete() {
37                 return !add;
38         }
39         
40         @Override
41         public boolean requiresParentOps() {
42                 return add;
43         }
44
45         @Override
46         public boolean requiresSubOps() {
47                 return !add;
48         }
49
50         protected static void copyProperties(WriteGraph g, Resource source, Resource destination) throws DatabaseException {
51                 Layer0 l0 = Layer0.getInstance(g);
52                 for (Statement s : g.getStatements(source, l0.HasProperty)) {
53                         if (s.isAsserted(source))
54                                 continue;
55                         Object value = g.getPossibleValue(s.getObject());
56                         System.out.println(NameUtils.getSafeName(g, s.getSubject()) + " " + NameUtils.getSafeName(g, s.getPredicate()) + " " + NameUtils.getSafeName(g, s.getObject()) + " " + value);
57                         if (value != null) {
58                                 Statement valueStm = g.getPossibleStatement(destination, s.getPredicate());
59                                 Resource valueResource = null;
60                                 if (valueStm != null && !valueStm.isAsserted(destination))
61                                         valueResource = valueStm.getObject();
62                                 if (valueResource == null) {
63                                         valueResource = g.newResource();
64                                         g.claim(valueResource, l0.InstanceOf, g.getSingleObject(s.getObject(), l0.InstanceOf));
65                                         g.claim(destination, s.getPredicate(), valueResource);
66                                 }
67                                 g.claimValue(valueResource, value);
68                                 //g.claimLiteral(destination, s.getPredicate(), value);
69                         }
70                 }
71         }
72         
73         protected void copyIssues(WriteGraph g, Resource source, Resource destination) throws DatabaseException {
74                 Layer0 l0 = Layer0.getInstance(g);
75                 IssueResource ir = IssueResource.getInstance(g);
76                 Collection<Resource> issues = g.getObjects(source, ir.Issue_HasContext_Inverse);
77                 for (Resource issue : issues) {
78                         String label = g.getRelatedValue(issue, l0.HasLabel);
79                         Resource severity = g.getSingleObject(issue, ir.Issue_HasSeverity);
80                         List<Resource> sourceContexts = ListUtils.toList(g, g.getSingleObject(issue, ir.Issue_HasContexts));
81                         List<Resource> destinationContext = new ArrayList<Resource>(sourceContexts.size());
82                         // map context resources
83                         for (Resource r : sourceContexts) {
84                                 if (r.equals(source))
85                                         destinationContext.add(destination);
86                                 else {
87                                         if (getChanges().getComparable().containsLeft(r))
88                                                 destinationContext.add(getChanges().getComparable().getRight(r));
89                                         else
90                                                 destinationContext.add(r);
91                                 }
92                         }
93                         
94                         IssueUtils.newUserIssue(g, label, severity, destinationContext);
95                 }
96         }
97 }