1 package org.simantics.event.view.handler;
3 import org.eclipse.jface.action.Action;
4 import org.eclipse.jface.resource.ImageDescriptor;
5 import org.simantics.Simantics;
6 import org.simantics.db.Resource;
7 import org.simantics.db.Session;
8 import org.simantics.db.VirtualGraph;
9 import org.simantics.db.WriteGraph;
10 import org.simantics.db.common.request.WriteRequest;
11 import org.simantics.db.exception.DatabaseException;
12 import org.simantics.db.service.VirtualGraphSupport;
13 import org.simantics.layer0.Layer0;
14 import org.simantics.utils.ui.ErrorLogger;
17 * @author Tuukka Lehtonen
19 public class ClaimAction extends Action {
21 protected final String virtualGraphId;
22 protected final Resource subject;
23 protected final String relationURI;
24 protected final Resource object;
29 * @param virtualGraphId
31 * @param tag <code>true</code> to add tag, <code>false</code> to remove tag
34 public ClaimAction(String label, ImageDescriptor image, String virtualGraphId, Resource subject, String relationURI, Resource object) {
37 this.virtualGraphId = virtualGraphId;
38 this.subject = subject;
39 this.relationURI = relationURI;
45 Session session = Simantics.peekSession();
46 if (session != null) {
47 VirtualGraph vg = virtualGraphId == null ? null :
48 session.getService(VirtualGraphSupport.class).getWorkspacePersistent(virtualGraphId);
49 session.asyncRequest(new WriteRequest(vg) {
51 public void perform(WriteGraph graph) throws DatabaseException {
56 ErrorLogger.defaultLogError(e);
61 public void claim(WriteGraph graph) throws DatabaseException {
62 Layer0 L0 = Layer0.getInstance(graph);
63 Resource relation = graph.getResource(relationURI);
64 boolean functional = graph.isInstanceOf(relation, L0.FunctionalRelation);
66 graph.deny(subject, relation);
67 graph.claim(subject, graph.getResource(relationURI), object);