aboutsummaryrefslogtreecommitdiffstats
path: root/language-web/src/main/java/tools/refinery/language/web/xtext/servlet/SimpleServiceContext.java
diff options
context:
space:
mode:
Diffstat (limited to 'language-web/src/main/java/tools/refinery/language/web/xtext/servlet/SimpleServiceContext.java')
-rw-r--r--language-web/src/main/java/tools/refinery/language/web/xtext/servlet/SimpleServiceContext.java63
1 files changed, 63 insertions, 0 deletions
diff --git a/language-web/src/main/java/tools/refinery/language/web/xtext/servlet/SimpleServiceContext.java b/language-web/src/main/java/tools/refinery/language/web/xtext/servlet/SimpleServiceContext.java
new file mode 100644
index 00000000..945d5db0
--- /dev/null
+++ b/language-web/src/main/java/tools/refinery/language/web/xtext/servlet/SimpleServiceContext.java
@@ -0,0 +1,63 @@
1package tools.refinery.language.web.xtext.servlet;
2
3import java.util.Map;
4import java.util.Set;
5
6import org.eclipse.xtext.web.server.IServiceContext;
7import org.eclipse.xtext.web.server.ISession;
8import org.eclipse.xtext.web.server.InvalidRequestException;
9
10import com.google.common.collect.ImmutableMap;
11import com.google.common.collect.ImmutableSet;
12
13record SimpleServiceContext(ISession session, Map<String, String> parameters) implements IServiceContext {
14
15 public static final String RESOURCE_NAME_PARAMETER = "resource";
16
17 public static final String CONTENT_TYPE_PARAMETER = "contentType";
18
19 public static final String STATE_ID_PARAMETER = "requiredStateId";
20
21 @Override
22 public Set<String> getParameterKeys() {
23 return ImmutableSet.copyOf(parameters.keySet());
24 }
25
26 @Override
27 public String getParameter(String key) {
28 return parameters.get(key);
29 }
30
31 @Override
32 public ISession getSession() {
33 return session;
34 }
35
36 public static IServiceContext ofTransaction(ISession session, XtextWebSocketRequest request, String stateId,
37 int index) {
38 var parameters = request.getRequestData().get(index);
39 checkParameters(parameters, RESOURCE_NAME_PARAMETER);
40 checkParameters(parameters, CONTENT_TYPE_PARAMETER);
41 checkParameters(parameters, STATE_ID_PARAMETER);
42 var builder = ImmutableMap.<String, String>builder();
43 builder.putAll(parameters);
44 if (request.getResourceName() != null) {
45 builder.put(RESOURCE_NAME_PARAMETER, request.getResourceName());
46 }
47 if (request.getContentType() != null) {
48 builder.put(CONTENT_TYPE_PARAMETER, request.getContentType());
49 }
50 if (stateId != null) {
51 builder.put(STATE_ID_PARAMETER, stateId);
52 }
53 var allParameters = builder.build();
54 return new SimpleServiceContext(session, allParameters);
55 }
56
57 private static void checkParameters(Map<String, String> parameters, String perTransactionParameter) {
58 if (parameters.containsKey(perTransactionParameter)) {
59 throw new InvalidRequestException.InvalidParametersException(
60 "Parameters map must not contain '" + perTransactionParameter + "' parameter.");
61 }
62 }
63}