]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.diagram/src/org/simantics/diagram/flag/DiagramFlagPreferences.java
b11d89151b0c0aada933c9a96fb52233dde92df7
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / flag / DiagramFlagPreferences.java
1 package org.simantics.diagram.flag;
2
3 import org.simantics.Simantics;
4 import org.simantics.db.ReadGraph;
5 import org.simantics.db.RequestProcessor;
6 import org.simantics.db.Resource;
7 import org.simantics.db.Session;
8 import org.simantics.db.WriteGraph;
9 import org.simantics.db.common.primitiverequest.PossibleObject;
10 import org.simantics.db.common.request.ResourceRead;
11 import org.simantics.db.common.request.WriteRequest;
12 import org.simantics.db.exception.DatabaseException;
13 import org.simantics.diagram.stubs.DiagramResource;
14 import org.simantics.utils.datastructures.Callback;
15 import org.simantics.utils.ui.ErrorLogger;
16
17 /**
18  * @author Tuukka Lehtonen
19  */
20 public class DiagramFlagPreferences {
21
22     /**
23      * Return the resource describing the currently active flag labeling scheme
24      * from the specified resource. The default intended resource for checking
25      * the scheme from is the active project.
26      */
27     public static class ReadFlagLabelingSchemeResource extends ResourceRead<Resource> {
28
29         public ReadFlagLabelingSchemeResource(Resource resource) {
30             super(resource);
31         }
32
33         @Override
34         public Resource perform(ReadGraph graph) throws DatabaseException {
35             DiagramResource DIA = DiagramResource.getInstance(graph);
36             Resource scheme = graph.syncRequest(new PossibleObject(resource,
37                     DIA.UsesLocalFlagLabelingScheme));
38             return scheme;
39         }
40
41     }
42
43     /**
44      * Adapt {@link FlagLabelingScheme} instance from the resource describing
45      * the currently active flag labeling scheme according to
46      * {@link ReadFlagLabelingSchemeResource}.
47      */
48     public static class ReadFlagLabelingScheme extends ResourceRead<FlagLabelingScheme> {
49
50         public ReadFlagLabelingScheme(Resource resource) {
51             super(resource);
52         }
53
54         @Override
55         public FlagLabelingScheme perform(ReadGraph graph) throws DatabaseException {
56             DiagramResource DIA = DiagramResource.getInstance(graph);
57             Resource scheme = graph.syncRequest(new ReadFlagLabelingSchemeResource(resource));
58             if (scheme == null)
59                 return graph.adapt(DIA.FlagLabelingScheme_Alphabetical, FlagLabelingScheme.class);
60             return graph.adapt(scheme, FlagLabelingScheme.class);
61         }
62
63     }
64
65     public static Resource getActiveFlagLabelingSchemeResource(RequestProcessor processor) throws DatabaseException {
66         Resource project = Simantics.getProjectResource();
67         if (project == null)
68             throw new IllegalStateException("no project is active");
69
70         return processor.syncRequest(new ReadFlagLabelingSchemeResource(project));
71     }
72
73     public static FlagLabelingScheme getActiveFlagLabelingScheme(RequestProcessor processor) throws DatabaseException {
74         Resource project = Simantics.getProjectResource();
75         if (project == null)
76             throw new IllegalStateException("no project is active");
77
78         return processor.syncRequest(new ReadFlagLabelingScheme(project));
79     }
80
81     public static void setProjectFlagLabelingScheme(Resource scheme) {
82         Resource project = Simantics.getProjectResource();
83         if (project == null)
84             throw new IllegalStateException("no project is active");
85         setFlagLabelingScheme(Simantics.getSession(), project, scheme);
86     }
87
88     public static void setFlagLabelingScheme(Session session, final Resource forTarget, final Resource scheme) {
89         session.asyncRequest(new WriteRequest() {
90             @Override
91             public void perform(WriteGraph graph) throws DatabaseException {
92                 setFlagLabelingScheme(graph, forTarget, scheme);
93             }
94         }, new Callback<DatabaseException>() {
95             @Override
96             public void run(DatabaseException parameter) {
97                 if (parameter != null)
98                     ErrorLogger.defaultLogError(parameter);
99             }
100         });
101     }
102
103     public static void setFlagLabelingScheme(WriteGraph graph, Resource forTarget, Resource scheme) throws DatabaseException {
104         DiagramResource DIA = DiagramResource.getInstance(graph);
105         graph.deny(forTarget, DIA.UsesLocalFlagLabelingScheme);
106         graph.claim(forTarget, DIA.UsesLocalFlagLabelingScheme, scheme);
107     }
108
109 }