]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/browsecontexts/BrowseContexts.java b/bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/browsecontexts/BrowseContexts.java
new file mode 100644 (file)
index 0000000..1daf5dd
--- /dev/null
@@ -0,0 +1,141 @@
+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