]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.event/src/org/simantics/event/view/handler/ClaimAction.java
Use Consumer interface instead of deprecated Callback interface
[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.ui.ErrorLogger;
15
16 /**
17  * @author Tuukka Lehtonen
18  */
19 public class ClaimAction extends Action {
20
21     protected final String   virtualGraphId;
22     protected final Resource subject;
23     protected final String   relationURI;
24     protected final Resource object;
25
26     /**
27      * @param label
28      * @param image
29      * @param virtualGraphId
30      * @param tagURI
31      * @param tag <code>true</code> to add tag, <code>false</code> to remove tag
32      * @param input
33      */
34     public ClaimAction(String label, ImageDescriptor image, String virtualGraphId, Resource subject, String relationURI, Resource object) {
35         super(label, image);
36
37         this.virtualGraphId = virtualGraphId;
38         this.subject = subject;
39         this.relationURI = relationURI;
40         this.object = object;
41     }
42
43     @Override
44     public void run() {
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) {
50                 @Override
51                 public void perform(WriteGraph graph) throws DatabaseException {
52                     claim(graph);
53                 }
54             }, e -> {
55                 if (e != null)
56                     ErrorLogger.defaultLogError(e);
57             });
58         }
59     }
60
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);
65         if (functional)
66             graph.deny(subject, relation);
67         graph.claim(subject, graph.getResource(relationURI), object);
68     }
69
70 }