1 package org.simantics.issues.ui;
\r
3 import java.util.Collection;
\r
4 import java.util.Collections;
\r
5 import java.util.Set;
\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
23 public class SetSeverityAction implements ActionFactory, ActionFactory2 {
\r
25 final Resource action;
\r
27 public SetSeverityAction(Resource action) {
\r
28 this.action = action;
\r
32 public Runnable create(Object target) {
\r
33 if(!(target instanceof Variable))
\r
35 return setSeverity(Collections.singletonList(((Variable) target)));
\r
39 public Runnable create(Collection<?> targets) {
\r
40 Set<Variable> variables = ISelectionUtils.filterSetSelection(targets, Variable.class);
\r
41 return setSeverity(variables);
\r
44 private Runnable setSeverity(final Collection<Variable> issues) {
\r
45 return new Runnable() {
\r
48 Simantics.getSession().asyncRequest(new WriteRequest() {
\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
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
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