]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.diagram/src/org/simantics/diagram/flag/DiagramFlagPreferences.java
Merge "Databoard and SCL enchancements."
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / flag / DiagramFlagPreferences.java
1 package org.simantics.diagram.flag;\r
2 \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
16 \r
17 /**\r
18  * @author Tuukka Lehtonen\r
19  */\r
20 public class DiagramFlagPreferences {\r
21 \r
22     /**\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
26      */\r
27     public static class ReadFlagLabelingSchemeResource extends ResourceRead<Resource> {\r
28 \r
29         public ReadFlagLabelingSchemeResource(Resource resource) {\r
30             super(resource);\r
31         }\r
32 \r
33         @Override\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
38             return scheme;\r
39         }\r
40 \r
41     }\r
42 \r
43     /**\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
47      */\r
48     public static class ReadFlagLabelingScheme extends ResourceRead<FlagLabelingScheme> {\r
49 \r
50         public ReadFlagLabelingScheme(Resource resource) {\r
51             super(resource);\r
52         }\r
53 \r
54         @Override\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
58             if (scheme == null)\r
59                 return graph.adapt(DIA.FlagLabelingScheme_Alphabetical, FlagLabelingScheme.class);\r
60             return graph.adapt(scheme, FlagLabelingScheme.class);\r
61         }\r
62 \r
63     }\r
64 \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
69 \r
70         return processor.syncRequest(new ReadFlagLabelingSchemeResource(project));\r
71     }\r
72 \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
77 \r
78         return processor.syncRequest(new ReadFlagLabelingScheme(project));\r
79     }\r
80 \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
86     }\r
87 \r
88     public static void setFlagLabelingScheme(Session session, final Resource forTarget, final Resource scheme) {\r
89         session.asyncRequest(new WriteRequest() {\r
90             @Override\r
91             public void perform(WriteGraph graph) throws DatabaseException {\r
92                 setFlagLabelingScheme(graph, forTarget, scheme);\r
93             }\r
94         }, new Callback<DatabaseException>() {\r
95             @Override\r
96             public void run(DatabaseException parameter) {\r
97                 if (parameter != null)\r
98                     ErrorLogger.defaultLogError(parameter);\r
99             }\r
100         });\r
101     }\r
102 \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
107     }\r
108 \r
109 }\r