1 package org.simantics.browsing.ui.model.browsecontexts;
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.Collection;
8 import org.simantics.browsing.ui.NodeContext;
9 import org.simantics.browsing.ui.common.NodeContextBuilder;
10 import org.simantics.browsing.ui.model.actions.ActionBrowseContext;
11 import org.simantics.browsing.ui.model.nodetypes.EntityNodeType;
12 import org.simantics.browsing.ui.model.nodetypes.NodeType;
13 import org.simantics.db.ReadGraph;
14 import org.simantics.db.RequestProcessor;
15 import org.simantics.db.Resource;
16 import org.simantics.db.common.procedure.adapter.TransientCacheListener;
17 import org.simantics.db.common.request.UnaryRead;
18 import org.simantics.db.exception.DatabaseException;
21 * Local utilities for BrowseContext/ActionBrowseContext internal use.
23 * @author Tuukka Lehtonen
25 public final class BrowseContexts {
27 public static String[] toSortedURIs(ReadGraph graph, Collection<Resource> rs) throws DatabaseException {
28 String[] result = new String[rs.size()];
30 for (Resource r : rs) {
31 String uri = graph.getPossibleURI(r);
36 Arrays.sort(result, 0, i);
37 return i < result.length ? Arrays.copyOf(result, i) : result;
41 * Wrapper for SCL usage because SCL does not know effect <code>RequestProcessor</code>
46 * @throws DatabaseException
48 public static BrowseContext toBrowseContextG(ReadGraph graph, String[] uris) throws DatabaseException {
49 return toBrowseContext(graph, uris);
52 public static BrowseContext toBrowseContext(RequestProcessor processor, String[] uris) throws DatabaseException {
53 return processor.syncRequest(new URIsToBrowseContext(Arrays.asList(uris)), TransientCacheListener.<BrowseContext>instance());
57 * Wrapper for SCL usage because SCL does not know effect <code>RequestProcessor</code>
62 * @throws DatabaseException
64 public static ActionBrowseContext toActionBrowseContextG(ReadGraph graph, String[] uris) throws DatabaseException {
65 return toActionBrowseContext(graph, uris);
68 public static ActionBrowseContext toActionBrowseContext(RequestProcessor processor, String[] uris) throws DatabaseException {
69 return processor.syncRequest(new URIsToActionBrowseContext(Arrays.asList(uris)), TransientCacheListener.<ActionBrowseContext>instance());
72 public static NodeContext getNodeContextForResource(Resource resource) {
73 return NodeContextBuilder.buildWithInput(resource);
76 public static NodeContext getNodeContextWithTypeForResource(ReadGraph graph, Resource resource) {
78 return NodeContextBuilder.buildWithData(
79 NodeType.KEY_SEQUENCE,
80 new Object[] { resource, EntityNodeType.getNodeTypeFor(graph, resource) });
81 } catch (DatabaseException e) {
82 return NodeContextBuilder.buildWithInput(resource);
86 public static class URIsToBrowseContext extends UnaryRead<List<String>, BrowseContext> {
88 public URIsToBrowseContext(List<String> parameter) {
93 public BrowseContext perform(ReadGraph graph) throws DatabaseException {
94 Collection<Resource> resources = graph.syncRequest( new URIsToResources(parameter) );
95 return resources.isEmpty() ? null : graph.syncRequest( new BrowseContextRequest(resources) );
100 public static class URIsToActionBrowseContext extends UnaryRead<List<String>, ActionBrowseContext> {
102 public URIsToActionBrowseContext(List<String> parameter) {
107 public ActionBrowseContext perform(ReadGraph graph) throws DatabaseException {
108 Collection<Resource> resources = graph.syncRequest( new URIsToResources(parameter) );
109 return resources.isEmpty() ? null : graph.syncRequest( new ActionBrowseContextRequest(resources) );
114 public static class URIsToResources extends UnaryRead<List<String>, Collection<Resource>> {
116 public URIsToResources(List<String> parameter) {
121 public Collection<Resource> perform(ReadGraph graph) throws DatabaseException {
122 Collection<Resource> result = new ArrayList<Resource>(parameter.size());
123 for (String uri : parameter) {
124 Resource r = graph.getPossibleResource(uri);
133 public static class ResourcesToURIs extends UnaryRead<Collection<Resource>, List<String>> {
135 public ResourcesToURIs(Collection<Resource> parameter) {
140 public List<String> perform(ReadGraph graph) throws DatabaseException {
141 List<String> result = new ArrayList<String>(parameter.size());
142 for (Resource r : parameter) {
143 String uri = graph.getPossibleURI(r);