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