]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.event/src/org/simantics/event/view/handler/ClaimAction.java
e46e3544273052b335ed6bbe702ef6bbcaad043b
[simantics/platform.git] / bundles / org.simantics.event / src / org / simantics / event / view / handler / ClaimAction.java
1 package org.simantics.event.view.handler;
2
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.datastructures.Callback;
15 import org.simantics.utils.ui.ErrorLogger;
16
17 /**
18  * @author Tuukka Lehtonen
19  */
20 public class ClaimAction extends Action {
21
22     protected final String   virtualGraphId;
23     protected final Resource subject;
24     protected final String   relationURI;
25     protected final Resource object;
26
27     /**
28      * @param label
29      * @param image
30      * @param virtualGraphId
31      * @param tagURI
32      * @param tag <code>true</code> to add tag, <code>false</code> to remove tag
33      * @param input
34      */
35     public ClaimAction(String label, ImageDescriptor image, String virtualGraphId, Resource subject, String relationURI, Resource object) {
36         super(label, image);
37
38         this.virtualGraphId = virtualGraphId;
39         this.subject = subject;
40         this.relationURI = relationURI;
41         this.object = object;
42     }
43
44     @Override
45     public void run() {
46         Session session = Simantics.peekSession();
47         if (session != null) {
48             VirtualGraph vg = virtualGraphId == null ? null :
49                 session.getService(VirtualGraphSupport.class).getWorkspacePersistent(virtualGraphId);
50             session.asyncRequest(new WriteRequest(vg) {
51                 @Override
52                 public void perform(WriteGraph graph) throws DatabaseException {
53                     claim(graph);
54                 }
55             }, new Callback<DatabaseException>() {
56                 @Override
57                 public void run(DatabaseException parameter) {
58                     if (parameter != null)
59                         ErrorLogger.defaultLogError(parameter);
60                 }
61             });
62         }
63     }
64
65     public void claim(WriteGraph graph) throws DatabaseException {
66         Layer0 L0 = Layer0.getInstance(graph);
67         Resource relation = graph.getResource(relationURI);
68         boolean functional = graph.isInstanceOf(relation, L0.FunctionalRelation);
69         if (functional)
70             graph.deny(subject, relation);
71         graph.claim(subject, graph.getResource(relationURI), object);
72     }
73
74 }