]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.event/src/org/simantics/event/view/handler/DenyAction.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.event / src / org / simantics / event / view / handler / DenyAction.java
1 package org.simantics.event.view.handler;\r
2 \r
3 import java.util.List;\r
4 \r
5 import org.eclipse.jface.action.Action;\r
6 import org.eclipse.jface.resource.ImageDescriptor;\r
7 import org.simantics.Simantics;\r
8 import org.simantics.db.Resource;\r
9 import org.simantics.db.Session;\r
10 import org.simantics.db.VirtualGraph;\r
11 import org.simantics.db.WriteGraph;\r
12 import org.simantics.db.common.request.WriteRequest;\r
13 import org.simantics.db.exception.DatabaseException;\r
14 import org.simantics.db.service.VirtualGraphSupport;\r
15 import org.simantics.utils.datastructures.Callback;\r
16 import org.simantics.utils.ui.ErrorLogger;\r
17 \r
18 /**\r
19  * @author Tuukka Lehtonen\r
20  */\r
21 public class DenyAction extends Action {\r
22 \r
23     private final String virtualGraphId;\r
24     private final List<Resource> subjects;\r
25     private final String relationURI;\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 DenyAction(String label, ImageDescriptor image, String virtualGraphId, String relationURI, List<Resource> subjects) {\r
36         super(label, image);\r
37 \r
38         this.virtualGraphId = virtualGraphId;\r
39         this.subjects = subjects;\r
40         this.relationURI = relationURI;\r
41     }\r
42 \r
43     @Override\r
44     public void run() {\r
45         Session session = Simantics.peekSession();\r
46         if (session != null) {\r
47             VirtualGraph vg = virtualGraphId == null ? null :\r
48                 session.getService(VirtualGraphSupport.class).getWorkspacePersistent(virtualGraphId);\r
49             session.asyncRequest(new WriteRequest(vg) {\r
50                 @Override\r
51                 public void perform(WriteGraph graph) throws DatabaseException {\r
52                     Resource relation = graph.getResource(relationURI);\r
53                     for (Resource subject : subjects)\r
54                         graph.deny(subject, relation);\r
55                 }\r
56             }, new Callback<DatabaseException>() {\r
57                 @Override\r
58                 public void run(DatabaseException parameter) {\r
59                     if (parameter != null)\r
60                         ErrorLogger.defaultLogError(parameter);\r
61                 }\r
62             });\r
63         }\r
64     }\r
65 \r
66 }\r