]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/browsecontexts/BrowseContexts.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.browsing.ui.model / src / org / simantics / browsing / ui / model / browsecontexts / BrowseContexts.java
1 package org.simantics.browsing.ui.model.browsecontexts;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Arrays;\r
5 import java.util.Collection;\r
6 import java.util.List;\r
7 \r
8 import org.simantics.browsing.ui.BuiltinKeys;\r
9 import org.simantics.browsing.ui.NodeContext;\r
10 import org.simantics.browsing.ui.common.NodeContextBuilder;\r
11 import org.simantics.browsing.ui.model.actions.ActionBrowseContext;\r
12 import org.simantics.db.ReadGraph;\r
13 import org.simantics.db.RequestProcessor;\r
14 import org.simantics.db.Resource;\r
15 import org.simantics.db.common.procedure.adapter.TransientCacheListener;\r
16 import org.simantics.db.common.request.UnaryRead;\r
17 import org.simantics.db.exception.DatabaseException;\r
18 \r
19 /**\r
20  * Local utilities for BrowseContext/ActionBrowseContext internal use.\r
21  * \r
22  * @author Tuukka Lehtonen\r
23  */\r
24 public final class BrowseContexts {\r
25 \r
26         public static String[] toSortedURIs(ReadGraph graph, Collection<Resource> rs) throws DatabaseException {\r
27                 String[] result = new String[rs.size()];\r
28                 int i = 0;\r
29                 for (Resource r : rs) {\r
30                         String uri = graph.getPossibleURI(r);\r
31                         if (uri != null)\r
32                                 result[i++] = uri;\r
33                 }\r
34                 if (i > 1)\r
35                         Arrays.sort(result, 0, i);\r
36                 return i < result.length ? Arrays.copyOf(result, i) : result;\r
37         }\r
38 \r
39         /**\r
40          * Wrapper for SCL usage because SCL does not know effect <code>RequestProcessor</code>\r
41          * \r
42          * @param graph\r
43          * @param uris\r
44          * @return\r
45          * @throws DatabaseException\r
46          */\r
47         public static BrowseContext toBrowseContextG(ReadGraph graph, String[] uris) throws DatabaseException {\r
48             return toBrowseContext(graph, uris);\r
49         }\r
50         \r
51         public static BrowseContext toBrowseContext(RequestProcessor processor, String[] uris) throws DatabaseException {\r
52                 return processor.syncRequest(new URIsToBrowseContext(Arrays.asList(uris)), TransientCacheListener.<BrowseContext>instance());\r
53         }\r
54 \r
55            /**\r
56      * Wrapper for SCL usage because SCL does not know effect <code>RequestProcessor</code>\r
57      * \r
58      * @param graph\r
59      * @param uris\r
60      * @return\r
61      * @throws DatabaseException\r
62      */\r
63         public static ActionBrowseContext toActionBrowseContextG(ReadGraph graph, String[] uris) throws DatabaseException {\r
64             return toActionBrowseContext(graph, uris);\r
65         }\r
66         \r
67         public static ActionBrowseContext toActionBrowseContext(RequestProcessor processor, String[] uris) throws DatabaseException {\r
68                 return processor.syncRequest(new URIsToActionBrowseContext(Arrays.asList(uris)), TransientCacheListener.<ActionBrowseContext>instance());\r
69         }\r
70         \r
71         public static NodeContext getNodeContextForResource(Resource resource) {\r
72             return NodeContextBuilder.buildWithData(BuiltinKeys.INPUT, resource);\r
73         }\r
74 \r
75         public static class URIsToBrowseContext extends UnaryRead<List<String>, BrowseContext> {\r
76 \r
77                 public URIsToBrowseContext(List<String> parameter) {\r
78                         super(parameter);\r
79                 }\r
80 \r
81                 @Override\r
82                 public BrowseContext perform(ReadGraph graph) throws DatabaseException {\r
83                         Collection<Resource> resources = graph.syncRequest( new URIsToResources(parameter) );\r
84                         return resources.isEmpty() ? null : graph.syncRequest( new BrowseContextRequest(resources) );\r
85                 }\r
86 \r
87         }\r
88 \r
89         public static class URIsToActionBrowseContext extends UnaryRead<List<String>, ActionBrowseContext> {\r
90 \r
91                 public URIsToActionBrowseContext(List<String> parameter) {\r
92                         super(parameter);\r
93                 }\r
94 \r
95                 @Override\r
96                 public ActionBrowseContext perform(ReadGraph graph) throws DatabaseException {\r
97                         Collection<Resource> resources = graph.syncRequest( new URIsToResources(parameter) );\r
98                         return resources.isEmpty() ? null : graph.syncRequest( new ActionBrowseContextRequest(resources) );\r
99                 }\r
100 \r
101         }\r
102 \r
103         public static class URIsToResources extends UnaryRead<List<String>, Collection<Resource>> {\r
104 \r
105                 public URIsToResources(List<String> parameter) {\r
106                         super(parameter);\r
107                 }\r
108 \r
109                 @Override\r
110                 public Collection<Resource> perform(ReadGraph graph) throws DatabaseException {\r
111                         Collection<Resource> result = new ArrayList<Resource>(parameter.size());\r
112                         for (String uri : parameter) {\r
113                                 Resource r = graph.getPossibleResource(uri);\r
114                                 if (r != null)\r
115                                         result.add(r);\r
116                         }\r
117                         return result;\r
118                 }\r
119 \r
120         }\r
121 \r
122         public static class ResourcesToURIs extends UnaryRead<Collection<Resource>, List<String>> {\r
123 \r
124                 public ResourcesToURIs(Collection<Resource> parameter) {\r
125                         super(parameter);\r
126                 }\r
127 \r
128                 @Override\r
129                 public List<String> perform(ReadGraph graph) throws DatabaseException {\r
130                         List<String> result = new ArrayList<String>(parameter.size());\r
131                         for (Resource r : parameter) {\r
132                                 String uri = graph.getPossibleURI(r);\r
133                                 if (uri != null)\r
134                                         result.add(uri);\r
135                         }\r
136                         return result;\r
137                 }\r
138 \r
139         }\r
140 \r
141 }\r