1 package org.simantics.browsing.ui.model.browsecontexts;
\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
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
20 * Local utilities for BrowseContext/ActionBrowseContext internal use.
\r
22 * @author Tuukka Lehtonen
\r
24 public final class BrowseContexts {
\r
26 public static String[] toSortedURIs(ReadGraph graph, Collection<Resource> rs) throws DatabaseException {
\r
27 String[] result = new String[rs.size()];
\r
29 for (Resource r : rs) {
\r
30 String uri = graph.getPossibleURI(r);
\r
35 Arrays.sort(result, 0, i);
\r
36 return i < result.length ? Arrays.copyOf(result, i) : result;
\r
40 * Wrapper for SCL usage because SCL does not know effect <code>RequestProcessor</code>
\r
45 * @throws DatabaseException
\r
47 public static BrowseContext toBrowseContextG(ReadGraph graph, String[] uris) throws DatabaseException {
\r
48 return toBrowseContext(graph, uris);
\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
56 * Wrapper for SCL usage because SCL does not know effect <code>RequestProcessor</code>
\r
61 * @throws DatabaseException
\r
63 public static ActionBrowseContext toActionBrowseContextG(ReadGraph graph, String[] uris) throws DatabaseException {
\r
64 return toActionBrowseContext(graph, uris);
\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
71 public static NodeContext getNodeContextForResource(Resource resource) {
\r
72 return NodeContextBuilder.buildWithData(BuiltinKeys.INPUT, resource);
\r
75 public static class URIsToBrowseContext extends UnaryRead<List<String>, BrowseContext> {
\r
77 public URIsToBrowseContext(List<String> parameter) {
\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
89 public static class URIsToActionBrowseContext extends UnaryRead<List<String>, ActionBrowseContext> {
\r
91 public URIsToActionBrowseContext(List<String> parameter) {
\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
103 public static class URIsToResources extends UnaryRead<List<String>, Collection<Resource>> {
\r
105 public URIsToResources(List<String> parameter) {
\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
122 public static class ResourcesToURIs extends UnaryRead<Collection<Resource>, List<String>> {
\r
124 public ResourcesToURIs(Collection<Resource> parameter) {
\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