1 package org.simantics.issues.common;
3 import java.util.Objects;
5 import org.simantics.databoard.util.ObjectUtils;
6 import org.simantics.db.Resource;
7 import org.simantics.db.VirtualGraph;
8 import org.simantics.db.WriteGraph;
9 import org.simantics.db.common.CommentMetadata;
10 import org.simantics.db.common.request.WriteRequest;
11 import org.simantics.db.common.utils.NameUtils;
12 import org.simantics.db.exception.DatabaseException;
13 import org.simantics.db.exception.RuntimeDatabaseException;
14 import org.simantics.db.service.VirtualGraphSupport;
15 import org.simantics.issues.ontology.IssueResource;
16 import org.simantics.scl.runtime.SCLContext;
17 import org.simantics.scl.runtime.function.FunctionImpl1;
20 * @author Tuukka Lehtonen
23 class HideFunction extends FunctionImpl1<Boolean, Boolean> {
25 private Resource[] issues;
27 public HideFunction(Resource... issues) {
32 public Boolean apply(Boolean hide) {
34 WriteGraph graph = Objects.requireNonNull((WriteGraph) SCLContext.getCurrent().get("graph"));
35 IssueResource ISSUE = IssueResource.getInstance(graph);
36 boolean changed = false;
37 for (Resource issue : issues)
38 changed |= tag(graph, issue, ISSUE.Hidden, hide);
40 } catch (DatabaseException e) {
41 throw new RuntimeDatabaseException(e);
45 private static boolean tag(WriteGraph graph, Resource r, Resource tagRel, boolean tag) throws DatabaseException {
46 boolean isTagged = graph.hasStatement(r, tagRel);
47 if (tag && !isTagged) {
48 // If r is virtual, we perform tagging in the same vg
49 VirtualGraphSupport vgs = graph.getService(VirtualGraphSupport.class);
50 VirtualGraph vg = vgs.getGraph(graph, r);
52 graph.sync(new WriteRequest(vg) {
54 public void perform(WriteGraph graph) throws DatabaseException {
55 graph.claim(r, tagRel, tagRel, r);
56 CommentMetadata cm = graph.getMetadata(CommentMetadata.class);
57 graph.addMetadata(cm.add(ObjectUtils.toString("Marking " + NameUtils.getSafeLabel(graph, r) + " to " + NameUtils.getSafeName(graph, tagRel))));
61 graph.claim(r, tagRel, tagRel, r);
62 CommentMetadata cm = graph.getMetadata(CommentMetadata.class);
63 graph.addMetadata(cm.add(ObjectUtils.toString("Marking " + NameUtils.getSafeLabel(graph, r) + " to " + NameUtils.getSafeName(graph, tagRel))));
66 } else if (!tag && isTagged) {
67 graph.deny(r, tagRel, tagRel, r);
68 CommentMetadata cm = graph.getMetadata(CommentMetadata.class);
69 graph.addMetadata(cm.add(ObjectUtils.toString("Denying " + NameUtils.getSafeLabel(graph, r) + " to " + NameUtils.getSafeName(graph, tagRel))));