diff options
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.java | 63 |
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 @@ | |||
1 | package tools.refinery.language.web.xtext.servlet; | ||
2 | |||
3 | import java.util.Map; | ||
4 | import java.util.Set; | ||
5 | |||
6 | import org.eclipse.xtext.web.server.IServiceContext; | ||
7 | import org.eclipse.xtext.web.server.ISession; | ||
8 | import org.eclipse.xtext.web.server.InvalidRequestException; | ||
9 | |||
10 | import com.google.common.collect.ImmutableMap; | ||
11 | import com.google.common.collect.ImmutableSet; | ||
12 | |||
13 | record 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 | } | ||