]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/browsecontexts/BrowseContexts.java
Utility for creating NodeContext with NodeType from SCL
[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;
2
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.Collection;
6 import java.util.List;
7
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;
19
20 /**
21  * Local utilities for BrowseContext/ActionBrowseContext internal use.
22  * 
23  * @author Tuukka Lehtonen
24  */
25 public final class BrowseContexts {
26
27         public static String[] toSortedURIs(ReadGraph graph, Collection<Resource> rs) throws DatabaseException {
28                 String[] result = new String[rs.size()];
29                 int i = 0;
30                 for (Resource r : rs) {
31                         String uri = graph.getPossibleURI(r);
32                         if (uri != null)
33                                 result[i++] = uri;
34                 }
35                 if (i > 1)
36                         Arrays.sort(result, 0, i);
37                 return i < result.length ? Arrays.copyOf(result, i) : result;
38         }
39
40         /**
41          * Wrapper for SCL usage because SCL does not know effect <code>RequestProcessor</code>
42          * 
43          * @param graph
44          * @param uris
45          * @return
46          * @throws DatabaseException
47          */
48         public static BrowseContext toBrowseContextG(ReadGraph graph, String[] uris) throws DatabaseException {
49             return toBrowseContext(graph, uris);
50         }
51         
52         public static BrowseContext toBrowseContext(RequestProcessor processor, String[] uris) throws DatabaseException {
53                 return processor.syncRequest(new URIsToBrowseContext(Arrays.asList(uris)), TransientCacheListener.<BrowseContext>instance());
54         }
55
56            /**
57      * Wrapper for SCL usage because SCL does not know effect <code>RequestProcessor</code>
58      * 
59      * @param graph
60      * @param uris
61      * @return
62      * @throws DatabaseException
63      */
64         public static ActionBrowseContext toActionBrowseContextG(ReadGraph graph, String[] uris) throws DatabaseException {
65             return toActionBrowseContext(graph, uris);
66         }
67         
68         public static ActionBrowseContext toActionBrowseContext(RequestProcessor processor, String[] uris) throws DatabaseException {
69                 return processor.syncRequest(new URIsToActionBrowseContext(Arrays.asList(uris)), TransientCacheListener.<ActionBrowseContext>instance());
70         }
71         
72         public static NodeContext getNodeContextForResource(Resource resource) {
73                 return NodeContextBuilder.buildWithInput(resource);
74         }
75
76         public static NodeContext getNodeContextWithTypeForResource(ReadGraph graph, Resource resource) {
77                 try {
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);
83                 }
84         }
85
86         public static class URIsToBrowseContext extends UnaryRead<List<String>, BrowseContext> {
87
88                 public URIsToBrowseContext(List<String> parameter) {
89                         super(parameter);
90                 }
91
92                 @Override
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) );
96                 }
97
98         }
99
100         public static class URIsToActionBrowseContext extends UnaryRead<List<String>, ActionBrowseContext> {
101
102                 public URIsToActionBrowseContext(List<String> parameter) {
103                         super(parameter);
104                 }
105
106                 @Override
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) );
110                 }
111
112         }
113
114         public static class URIsToResources extends UnaryRead<List<String>, Collection<Resource>> {
115
116                 public URIsToResources(List<String> parameter) {
117                         super(parameter);
118                 }
119
120                 @Override
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);
125                                 if (r != null)
126                                         result.add(r);
127                         }
128                         return result;
129                 }
130
131         }
132
133         public static class ResourcesToURIs extends UnaryRead<Collection<Resource>, List<String>> {
134
135                 public ResourcesToURIs(Collection<Resource> parameter) {
136                         super(parameter);
137                 }
138
139                 @Override
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);
144                                 if (uri != null)
145                                         result.add(uri);
146                         }
147                         return result;
148                 }
149
150         }
151
152 }