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