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 {
21 protected boolean add;
24 >>>>>>> branch 'master' of ssh://luukkainen@www.simantics.org:29418/simantics/interop
26 public AddDeleteUpdateOp(GraphChanges changes) {
31 public boolean isAdd() {
36 public boolean isDelete() {
41 public boolean requiresParentOps() {
46 public boolean requiresSubOps() {
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))
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);
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);
67 g.claimValue(valueResource, value);
68 //g.claimLiteral(destination, s.getPredicate(), value);
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) {
85 destinationContext.add(destination);
87 if (getChanges().getComparable().containsLeft(r))
88 destinationContext.add(getChanges().getComparable().getRight(r));
90 destinationContext.add(r);
94 IssueUtils.newUserIssue(g, label, severity, destinationContext);