]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/contribution/IssueContextDropAction.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.issues.ui / src / org / simantics / issues / ui / contribution / IssueContextDropAction.java
1 package org.simantics.issues.ui.contribution;\r
2 \r
3 import java.util.List;\r
4 \r
5 import org.simantics.db.ReadGraph;\r
6 import org.simantics.db.Resource;\r
7 import org.simantics.db.Session;\r
8 import org.simantics.db.WriteGraph;\r
9 import org.simantics.db.common.request.WriteRequest;\r
10 import org.simantics.db.exception.DatabaseException;\r
11 import org.simantics.db.layer0.SelectionHints;\r
12 import org.simantics.db.layer0.adapter.DropActionFactory;\r
13 import org.simantics.issues.ontology.IssueResource;\r
14 import org.simantics.modeling.PropertyVariables;\r
15 import org.simantics.utils.datastructures.Callback;\r
16 import org.simantics.utils.ui.ErrorLogger;\r
17 import org.simantics.utils.ui.ISelectionUtils;\r
18 \r
19 /**\r
20  * @author Tuukka Lehtonen\r
21  */\r
22 public class IssueContextDropAction implements DropActionFactory {\r
23 \r
24     @Override\r
25     public Runnable create(ReadGraph g, Object target, Object source, int operation) throws DatabaseException {\r
26         //System.out.println("DROP: " + source + " -> " + target);\r
27 \r
28         final Resource issue= ISelectionUtils.getSinglePossibleKey(target, SelectionHints.KEY_MAIN, Resource.class);\r
29         if (issue == null)\r
30             return null;\r
31 \r
32         final List<PropertyVariables> vars = ISelectionUtils.getPossibleKeys(source, SelectionHints.KEY_MAIN, PropertyVariables.class);\r
33         if (!vars.isEmpty()) {\r
34             //System.out.println("TODO: add property container to context");\r
35         } else {\r
36             List<Resource> ctx = ISelectionUtils.getPossibleKeys(source, SelectionHints.KEY_MAIN, Resource.class);\r
37             if (!ctx.isEmpty())\r
38                 addToIssueContext(g.getSession(), issue, ctx);\r
39         }\r
40 \r
41         return null;\r
42     }\r
43 \r
44     private void addToIssueContext(Session session, final Resource issue, final List<Resource> contexts) {\r
45         session.asyncRequest(new WriteRequest() {\r
46             @Override\r
47             public void perform(WriteGraph graph) throws DatabaseException {\r
48                 final IssueResource ISSUE = IssueResource.getInstance(graph);\r
49                 for (Resource ctx : contexts) {\r
50                     graph.claim(issue, ISSUE.Issue_HasContext, ISSUE.Issue_HasContext, ctx);\r
51                 }\r
52             }\r
53         }, new Callback<DatabaseException>() {\r
54             @Override\r
55             public void run(DatabaseException e) {\r
56                 if (e != null)\r
57                     ErrorLogger.defaultLogError(e);\r
58             }\r
59         });\r
60     }\r
61 \r
62 }\r