]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/SetSeverityAction.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.issues.ui / src / org / simantics / issues / ui / SetSeverityAction.java
1 package org.simantics.issues.ui;\r
2 \r
3 import java.util.Collection;\r
4 import java.util.Collections;\r
5 import java.util.Set;\r
6 \r
7 import org.simantics.Simantics;\r
8 import org.simantics.db.Resource;\r
9 import org.simantics.db.VirtualGraph;\r
10 import org.simantics.db.WriteGraph;\r
11 import org.simantics.db.common.request.WriteRequest;\r
12 import org.simantics.db.common.utils.NameUtils;\r
13 import org.simantics.db.exception.DatabaseException;\r
14 import org.simantics.db.layer0.adapter.ActionFactory;\r
15 import org.simantics.db.layer0.adapter.ActionFactory2;\r
16 import org.simantics.db.layer0.util.Layer0Utils;\r
17 import org.simantics.db.layer0.variable.Variable;\r
18 import org.simantics.db.service.VirtualGraphSupport;\r
19 import org.simantics.issues.ontology.IssueResource;\r
20 import org.simantics.issues.ui.ontology.IssueUIResource;\r
21 import org.simantics.utils.ui.ISelectionUtils;\r
22 \r
23 public class SetSeverityAction implements ActionFactory, ActionFactory2 {\r
24         \r
25         final Resource action;\r
26         \r
27         public SetSeverityAction(Resource action) {\r
28                 this.action = action;\r
29         }\r
30 \r
31         @Override\r
32         public Runnable create(Object target) {\r
33                 if(!(target instanceof Variable))\r
34                         return null;\r
35                 return setSeverity(Collections.singletonList(((Variable) target)));\r
36         }\r
37 \r
38         @Override\r
39         public Runnable create(Collection<?> targets) {\r
40                 Set<Variable> variables = ISelectionUtils.filterSetSelection(targets, Variable.class);\r
41                 return setSeverity(variables);\r
42         }\r
43 \r
44         private Runnable setSeverity(final Collection<Variable> issues) {\r
45                 return new Runnable() {\r
46                         @Override\r
47                         public void run() {\r
48                                 Simantics.getSession().asyncRequest(new WriteRequest() {\r
49                                         @Override\r
50                                         public void perform(WriteGraph graph) throws DatabaseException {\r
51                                                 graph.markUndoPoint();\r
52                                                 IssueUIResource UI = IssueUIResource.getInstance(graph); \r
53                                                 Resource severity = graph.getSingleObject(action, UI.Actions_SetSeverityAction_HasSeverity);\r
54                                                 setSeverity(graph, severity, issues);\r
55                                         }\r
56                                 });\r
57                         }\r
58                 };\r
59         }\r
60 \r
61         public static void setSeverity(WriteGraph graph, final Resource severity, Collection<Variable> issues) throws DatabaseException {\r
62                 for (Variable issue : issues) {\r
63                         final Resource resource = issue.getRepresents(graph);\r
64                         VirtualGraphSupport vgs = graph.getService(VirtualGraphSupport.class);\r
65                         VirtualGraph vg = vgs.getGraph(graph, resource);\r
66                         graph.sync(new WriteRequest(vg) {\r
67                                 @Override\r
68                                 public void perform(WriteGraph graph) throws DatabaseException {\r
69                                         IssueResource ISSUE = IssueResource.getInstance(graph);\r
70                                         graph.deny(resource, ISSUE.Issue_HasSeverity);\r
71                                         graph.claim(resource, ISSUE.Issue_HasSeverity, null, severity);\r
72                                         Layer0Utils.addCommentMetadata(graph, "Changed severity of " + NameUtils.getSafeLabel(graph, resource) + " to " + NameUtils.getSafeName(graph, severity));      \r
73                                 }\r
74                         });\r
75                 }\r
76         }\r
77 \r
78 }\r