1 package org.simantics.event.view.handler;
\r
3 import org.eclipse.jface.action.Action;
\r
4 import org.eclipse.jface.resource.ImageDescriptor;
\r
5 import org.simantics.Simantics;
\r
6 import org.simantics.db.Resource;
\r
7 import org.simantics.db.Session;
\r
8 import org.simantics.db.VirtualGraph;
\r
9 import org.simantics.db.WriteGraph;
\r
10 import org.simantics.db.common.request.WriteRequest;
\r
11 import org.simantics.db.exception.DatabaseException;
\r
12 import org.simantics.db.service.VirtualGraphSupport;
\r
13 import org.simantics.layer0.Layer0;
\r
14 import org.simantics.utils.datastructures.Callback;
\r
15 import org.simantics.utils.ui.ErrorLogger;
\r
18 * @author Tuukka Lehtonen
\r
20 public class ClaimAction extends Action {
\r
22 protected final String virtualGraphId;
\r
23 protected final Resource subject;
\r
24 protected final String relationURI;
\r
25 protected final Resource object;
\r
30 * @param virtualGraphId
\r
32 * @param tag <code>true</code> to add tag, <code>false</code> to remove tag
\r
35 public ClaimAction(String label, ImageDescriptor image, String virtualGraphId, Resource subject, String relationURI, Resource object) {
\r
36 super(label, image);
\r
38 this.virtualGraphId = virtualGraphId;
\r
39 this.subject = subject;
\r
40 this.relationURI = relationURI;
\r
41 this.object = object;
\r
46 Session session = Simantics.peekSession();
\r
47 if (session != null) {
\r
48 VirtualGraph vg = virtualGraphId == null ? null :
\r
49 session.getService(VirtualGraphSupport.class).getWorkspacePersistent(virtualGraphId);
\r
50 session.asyncRequest(new WriteRequest(vg) {
\r
52 public void perform(WriteGraph graph) throws DatabaseException {
\r
55 }, new Callback<DatabaseException>() {
\r
57 public void run(DatabaseException parameter) {
\r
58 if (parameter != null)
\r
59 ErrorLogger.defaultLogError(parameter);
\r
65 public void claim(WriteGraph graph) throws DatabaseException {
\r
66 Layer0 L0 = Layer0.getInstance(graph);
\r
67 Resource relation = graph.getResource(relationURI);
\r
68 boolean functional = graph.isInstanceOf(relation, L0.FunctionalRelation);
\r
70 graph.deny(subject, relation);
\r
71 graph.claim(subject, graph.getResource(relationURI), object);
\r