1 package org.simantics.issues.ui.contribution;
\r
3 import java.util.List;
\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
20 * @author Tuukka Lehtonen
\r
22 public class IssueContextDropAction implements DropActionFactory {
\r
25 public Runnable create(ReadGraph g, Object target, Object source, int operation) throws DatabaseException {
\r
26 //System.out.println("DROP: " + source + " -> " + target);
\r
28 final Resource issue= ISelectionUtils.getSinglePossibleKey(target, SelectionHints.KEY_MAIN, Resource.class);
\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
36 List<Resource> ctx = ISelectionUtils.getPossibleKeys(source, SelectionHints.KEY_MAIN, Resource.class);
\r
38 addToIssueContext(g.getSession(), issue, ctx);
\r
44 private void addToIssueContext(Session session, final Resource issue, final List<Resource> contexts) {
\r
45 session.asyncRequest(new WriteRequest() {
\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
53 }, new Callback<DatabaseException>() {
\r
55 public void run(DatabaseException e) {
\r
57 ErrorLogger.defaultLogError(e);
\r