--- /dev/null
+package org.simantics.browsing.ui.model.browsecontexts;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.Collection;\r
+import java.util.List;\r
+\r
+import org.simantics.browsing.ui.BuiltinKeys;\r
+import org.simantics.browsing.ui.NodeContext;\r
+import org.simantics.browsing.ui.common.NodeContextBuilder;\r
+import org.simantics.browsing.ui.model.actions.ActionBrowseContext;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.RequestProcessor;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.procedure.adapter.TransientCacheListener;\r
+import org.simantics.db.common.request.UnaryRead;\r
+import org.simantics.db.exception.DatabaseException;\r
+\r
+/**\r
+ * Local utilities for BrowseContext/ActionBrowseContext internal use.\r
+ * \r
+ * @author Tuukka Lehtonen\r
+ */\r
+public final class BrowseContexts {\r
+\r
+ public static String[] toSortedURIs(ReadGraph graph, Collection<Resource> rs) throws DatabaseException {\r
+ String[] result = new String[rs.size()];\r
+ int i = 0;\r
+ for (Resource r : rs) {\r
+ String uri = graph.getPossibleURI(r);\r
+ if (uri != null)\r
+ result[i++] = uri;\r
+ }\r
+ if (i > 1)\r
+ Arrays.sort(result, 0, i);\r
+ return i < result.length ? Arrays.copyOf(result, i) : result;\r
+ }\r
+\r
+ /**\r
+ * Wrapper for SCL usage because SCL does not know effect <code>RequestProcessor</code>\r
+ * \r
+ * @param graph\r
+ * @param uris\r
+ * @return\r
+ * @throws DatabaseException\r
+ */\r
+ public static BrowseContext toBrowseContextG(ReadGraph graph, String[] uris) throws DatabaseException {\r
+ return toBrowseContext(graph, uris);\r
+ }\r
+ \r
+ public static BrowseContext toBrowseContext(RequestProcessor processor, String[] uris) throws DatabaseException {\r
+ return processor.syncRequest(new URIsToBrowseContext(Arrays.asList(uris)), TransientCacheListener.<BrowseContext>instance());\r
+ }\r
+\r
+ /**\r
+ * Wrapper for SCL usage because SCL does not know effect <code>RequestProcessor</code>\r
+ * \r
+ * @param graph\r
+ * @param uris\r
+ * @return\r
+ * @throws DatabaseException\r
+ */\r
+ public static ActionBrowseContext toActionBrowseContextG(ReadGraph graph, String[] uris) throws DatabaseException {\r
+ return toActionBrowseContext(graph, uris);\r
+ }\r
+ \r
+ public static ActionBrowseContext toActionBrowseContext(RequestProcessor processor, String[] uris) throws DatabaseException {\r
+ return processor.syncRequest(new URIsToActionBrowseContext(Arrays.asList(uris)), TransientCacheListener.<ActionBrowseContext>instance());\r
+ }\r
+ \r
+ public static NodeContext getNodeContextForResource(Resource resource) {\r
+ return NodeContextBuilder.buildWithData(BuiltinKeys.INPUT, resource);\r
+ }\r
+\r
+ public static class URIsToBrowseContext extends UnaryRead<List<String>, BrowseContext> {\r
+\r
+ public URIsToBrowseContext(List<String> parameter) {\r
+ super(parameter);\r
+ }\r
+\r
+ @Override\r
+ public BrowseContext perform(ReadGraph graph) throws DatabaseException {\r
+ Collection<Resource> resources = graph.syncRequest( new URIsToResources(parameter) );\r
+ return resources.isEmpty() ? null : graph.syncRequest( new BrowseContextRequest(resources) );\r
+ }\r
+\r
+ }\r
+\r
+ public static class URIsToActionBrowseContext extends UnaryRead<List<String>, ActionBrowseContext> {\r
+\r
+ public URIsToActionBrowseContext(List<String> parameter) {\r
+ super(parameter);\r
+ }\r
+\r
+ @Override\r
+ public ActionBrowseContext perform(ReadGraph graph) throws DatabaseException {\r
+ Collection<Resource> resources = graph.syncRequest( new URIsToResources(parameter) );\r
+ return resources.isEmpty() ? null : graph.syncRequest( new ActionBrowseContextRequest(resources) );\r
+ }\r
+\r
+ }\r
+\r
+ public static class URIsToResources extends UnaryRead<List<String>, Collection<Resource>> {\r
+\r
+ public URIsToResources(List<String> parameter) {\r
+ super(parameter);\r
+ }\r
+\r
+ @Override\r
+ public Collection<Resource> perform(ReadGraph graph) throws DatabaseException {\r
+ Collection<Resource> result = new ArrayList<Resource>(parameter.size());\r
+ for (String uri : parameter) {\r
+ Resource r = graph.getPossibleResource(uri);\r
+ if (r != null)\r
+ result.add(r);\r
+ }\r
+ return result;\r
+ }\r
+\r
+ }\r
+\r
+ public static class ResourcesToURIs extends UnaryRead<Collection<Resource>, List<String>> {\r
+\r
+ public ResourcesToURIs(Collection<Resource> parameter) {\r
+ super(parameter);\r
+ }\r
+\r
+ @Override\r
+ public List<String> perform(ReadGraph graph) throws DatabaseException {\r
+ List<String> result = new ArrayList<String>(parameter.size());\r
+ for (Resource r : parameter) {\r
+ String uri = graph.getPossibleURI(r);\r
+ if (uri != null)\r
+ result.add(uri);\r
+ }\r
+ return result;\r
+ }\r
+\r
+ }\r
+\r
+}\r