1 package org.simantics.diagram.flag;
\r
3 import org.simantics.Simantics;
\r
4 import org.simantics.db.ReadGraph;
\r
5 import org.simantics.db.RequestProcessor;
\r
6 import org.simantics.db.Resource;
\r
7 import org.simantics.db.Session;
\r
8 import org.simantics.db.WriteGraph;
\r
9 import org.simantics.db.common.primitiverequest.PossibleObject;
\r
10 import org.simantics.db.common.request.ResourceRead;
\r
11 import org.simantics.db.common.request.WriteRequest;
\r
12 import org.simantics.db.exception.DatabaseException;
\r
13 import org.simantics.diagram.stubs.DiagramResource;
\r
14 import org.simantics.utils.datastructures.Callback;
\r
15 import org.simantics.utils.ui.ErrorLogger;
\r
18 * @author Tuukka Lehtonen
\r
20 public class DiagramFlagPreferences {
\r
23 * Return the resource describing the currently active flag labeling scheme
\r
24 * from the specified resource. The default intended resource for checking
\r
25 * the scheme from is the active project.
\r
27 public static class ReadFlagLabelingSchemeResource extends ResourceRead<Resource> {
\r
29 public ReadFlagLabelingSchemeResource(Resource resource) {
\r
34 public Resource perform(ReadGraph graph) throws DatabaseException {
\r
35 DiagramResource DIA = DiagramResource.getInstance(graph);
\r
36 Resource scheme = graph.syncRequest(new PossibleObject(resource,
\r
37 DIA.UsesLocalFlagLabelingScheme));
\r
44 * Adapt {@link FlagLabelingScheme} instance from the resource describing
\r
45 * the currently active flag labeling scheme according to
\r
46 * {@link ReadFlagLabelingSchemeResource}.
\r
48 public static class ReadFlagLabelingScheme extends ResourceRead<FlagLabelingScheme> {
\r
50 public ReadFlagLabelingScheme(Resource resource) {
\r
55 public FlagLabelingScheme perform(ReadGraph graph) throws DatabaseException {
\r
56 DiagramResource DIA = DiagramResource.getInstance(graph);
\r
57 Resource scheme = graph.syncRequest(new ReadFlagLabelingSchemeResource(resource));
\r
59 return graph.adapt(DIA.FlagLabelingScheme_Alphabetical, FlagLabelingScheme.class);
\r
60 return graph.adapt(scheme, FlagLabelingScheme.class);
\r
65 public static Resource getActiveFlagLabelingSchemeResource(RequestProcessor processor) throws DatabaseException {
\r
66 Resource project = Simantics.getProjectResource();
\r
67 if (project == null)
\r
68 throw new IllegalStateException("no project is active");
\r
70 return processor.syncRequest(new ReadFlagLabelingSchemeResource(project));
\r
73 public static FlagLabelingScheme getActiveFlagLabelingScheme(RequestProcessor processor) throws DatabaseException {
\r
74 Resource project = Simantics.getProjectResource();
\r
75 if (project == null)
\r
76 throw new IllegalStateException("no project is active");
\r
78 return processor.syncRequest(new ReadFlagLabelingScheme(project));
\r
81 public static void setProjectFlagLabelingScheme(Resource scheme) {
\r
82 Resource project = Simantics.getProjectResource();
\r
83 if (project == null)
\r
84 throw new IllegalStateException("no project is active");
\r
85 setFlagLabelingScheme(Simantics.getSession(), project, scheme);
\r
88 public static void setFlagLabelingScheme(Session session, final Resource forTarget, final Resource scheme) {
\r
89 session.asyncRequest(new WriteRequest() {
\r
91 public void perform(WriteGraph graph) throws DatabaseException {
\r
92 setFlagLabelingScheme(graph, forTarget, scheme);
\r
94 }, new Callback<DatabaseException>() {
\r
96 public void run(DatabaseException parameter) {
\r
97 if (parameter != null)
\r
98 ErrorLogger.defaultLogError(parameter);
\r
103 public static void setFlagLabelingScheme(WriteGraph graph, Resource forTarget, Resource scheme) throws DatabaseException {
\r
104 DiagramResource DIA = DiagramResource.getInstance(graph);
\r
105 graph.deny(forTarget, DIA.UsesLocalFlagLabelingScheme);
\r
106 graph.claim(forTarget, DIA.UsesLocalFlagLabelingScheme, scheme);
\r