1 package org.simantics.interop.update.model;
3 import java.util.ArrayList;
4 import java.util.Collection;
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;
18 public abstract class AddDeleteUpdateOp extends UpdateOp {
20 protected boolean add;
23 public AddDeleteUpdateOp(GraphChanges changes) {
27 public AddDeleteUpdateOp(boolean add, GraphChanges changes) {
33 public boolean isAdd() {
38 public boolean isDelete() {
43 public boolean requiresOp(UpdateOp op) {
45 if (getParentOps().contains(op))
48 if (getSubOps().contains(op))
55 public boolean selectOp(UpdateOp op, boolean select) {
57 return requiresOp(op);
59 return op.requiresOp(this);
63 public static void copyProperties(WriteGraph g, Resource source, Resource destination) throws DatabaseException {
64 Layer0 l0 = Layer0.getInstance(g);
65 for (Statement s : g.getStatements(source, l0.HasProperty)) {
66 if (s.isAsserted(source))
68 if (g.isInstanceOf(s.getObject(), l0.Literal)) {
69 Object value = g.getPossibleValue(s.getObject());
70 System.out.println(NameUtils.getSafeName(g, s.getSubject()) + " " + NameUtils.getSafeName(g, s.getPredicate()) + " " + NameUtils.getSafeName(g, s.getObject()) + " " + value);
72 Statement valueStm = g.getPossibleStatement(destination, s.getPredicate());
73 Resource valueResource = null;
74 if (valueStm != null && !valueStm.isAsserted(destination))
75 valueResource = valueStm.getObject();
76 if (valueResource == null) {
77 valueResource = g.newResource();
78 g.claim(valueResource, l0.InstanceOf, g.getSingleObject(s.getObject(), l0.InstanceOf));
79 g.claim(destination, s.getPredicate(), valueResource);
81 g.claimValue(valueResource, value);
82 //g.claimLiteral(destination, s.getPredicate(), value);
84 } else if (g.isInstanceOf(s.getObject(), l0.SCLValue)) {
85 Resource valueResource = g.newResource();
86 g.claim(valueResource, l0.InstanceOf, g.getSingleObject(s.getObject(), l0.InstanceOf));
87 g.claim(destination, s.getPredicate(), valueResource);
88 copyProperties(g, s.getObject(), valueResource);
90 throw new DatabaseException("Expected to copy property resource " + s.getObject());
95 public static void copyTags(WriteGraph g, Resource source, Resource destination) throws DatabaseException {
96 Layer0 L0 = Layer0.getInstance(g);
97 for (Statement s : g.getStatements(source, L0.IsWeaklyRelatedTo)) {
98 if (s.getObject().equals(source)) {
99 g.claim(destination, s.getPredicate(), destination);
104 public static void copyTypes(WriteGraph g, Resource source, Resource destination) throws DatabaseException {
105 Layer0 L0 = Layer0.getInstance(g);
106 for (Resource r : g.getObjects(source, L0.InstanceOf))
107 g.claim(destination, L0.InstanceOf, r);
108 for (Resource r : g.getObjects(source, L0.Inherits))
109 g.claim(destination, L0.Inherits, r);
110 for (Resource r : g.getObjects(source, L0.SubrelationOf))
111 g.claim(destination, L0.SubrelationOf, r);
114 protected void copyIssues(WriteGraph g, Resource source, Resource destination) throws DatabaseException {
115 Layer0 l0 = Layer0.getInstance(g);
116 IssueResource ir = IssueResource.getInstance(g);
117 Collection<Resource> issues = g.getObjects(source, ir.Issue_HasContext_Inverse);
118 for (Resource issue : issues) {
119 String label = g.getRelatedValue(issue, l0.HasLabel);
120 Resource severity = g.getSingleObject(issue, ir.Issue_HasSeverity);
121 List<Resource> sourceContexts = ListUtils.toList(g, g.getSingleObject(issue, ir.Issue_HasContexts));
122 List<Resource> destinationContext = new ArrayList<Resource>(sourceContexts.size());
123 // map context resources
124 for (Resource r : sourceContexts) {
125 if (r.equals(source))
126 destinationContext.add(destination);
128 if (getChanges().getComparable().containsLeft(r))
129 destinationContext.add(getChanges().getComparable().getRight(r));
131 destinationContext.add(r);
135 IssueUtils.newUserIssue(g, label, severity, destinationContext);