]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.event/src/org/simantics/event/view/handler/ClaimAction.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.event / src / org / simantics / event / view / handler / ClaimAction.java
1 package org.simantics.event.view.handler;\r
2 \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
16 \r
17 /**\r
18  * @author Tuukka Lehtonen\r
19  */\r
20 public class ClaimAction extends Action {\r
21 \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
26 \r
27     /**\r
28      * @param label\r
29      * @param image\r
30      * @param virtualGraphId\r
31      * @param tagURI\r
32      * @param tag <code>true</code> to add tag, <code>false</code> to remove tag\r
33      * @param input\r
34      */\r
35     public ClaimAction(String label, ImageDescriptor image, String virtualGraphId, Resource subject, String relationURI, Resource object) {\r
36         super(label, image);\r
37 \r
38         this.virtualGraphId = virtualGraphId;\r
39         this.subject = subject;\r
40         this.relationURI = relationURI;\r
41         this.object = object;\r
42     }\r
43 \r
44     @Override\r
45     public void run() {\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
51                 @Override\r
52                 public void perform(WriteGraph graph) throws DatabaseException {\r
53                     claim(graph);\r
54                 }\r
55             }, new Callback<DatabaseException>() {\r
56                 @Override\r
57                 public void run(DatabaseException parameter) {\r
58                     if (parameter != null)\r
59                         ErrorLogger.defaultLogError(parameter);\r
60                 }\r
61             });\r
62         }\r
63     }\r
64 \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
69         if (functional)\r
70             graph.deny(subject, relation);\r
71         graph.claim(subject, graph.getResource(relationURI), object);\r
72     }\r
73 \r
74 }\r