698ec13c006793b5cacde3cc5c9c105d57ec89e3
[so.git] /
1 package org.openecomp.mso.bpmn.common.workflow.service;\r
2 \r
3 import java.util.HashMap;\r
4 import java.util.Map;\r
5 \r
6 import javax.ws.rs.Consumes;\r
7 import javax.ws.rs.HeaderParam;\r
8 import javax.ws.rs.POST;\r
9 import javax.ws.rs.Path;\r
10 import javax.ws.rs.PathParam;\r
11 import javax.ws.rs.Produces;\r
12 import javax.ws.rs.core.MediaType;\r
13 import javax.ws.rs.core.Response;\r
14 \r
15 import org.openecomp.mso.logger.MessageEnum;\r
16 import org.openecomp.mso.logger.MsoLogger;\r
17 \r
18 /**\r
19  * Generalized REST interface that injects a message event into a waiting BPMN process.\r
20  * Examples:\r
21  * <pre>\r
22  *     /WorkflowMessage/SDNCAResponse/6d10d075-100c-42d0-9d84-a52432681cae-1478486185286\r
23  *     /WorkflowMessage/SDNCAEvent/USOSTCDALTX0101UJZZ01\r
24  * </pre>\r
25  */\r
26 @Path("/")\r
27 public class WorkflowMessageResource extends AbstractCallbackService {\r
28         private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);\r
29         private static final String LOGMARKER = "[WORKFLOW-MESSAGE]";\r
30         \r
31         @POST\r
32         @Path("/WorkflowMessage/{messageType}/{correlator}")\r
33         @Consumes("*/*")\r
34         @Produces(MediaType.TEXT_PLAIN)\r
35         public Response deliver(\r
36                         @HeaderParam("Content-Type") String contentType,\r
37                         @PathParam("messageType") String messageType,\r
38                         @PathParam("correlator") String correlator,\r
39                         String message) {\r
40 \r
41                 String method = "receiveWorkflowMessage";\r
42                 MsoLogger.setServiceName("MSO." + method);\r
43                 MsoLogger.setLogContext(correlator, "N/A");\r
44 \r
45                 LOGGER.debug(LOGMARKER + " Received workflow message"\r
46                         + " type='" + messageType + "'"\r
47                         + " correlator='" + correlator + "'"\r
48                         + (contentType == null ? "" : " contentType='" + contentType + "'")\r
49                         + " message=" + System.lineSeparator() + message);\r
50 \r
51                 if (messageType == null || messageType.isEmpty()) {\r
52                         String msg = "Missing message type";\r
53                         LOGGER.debug(LOGMARKER + " " + msg);\r
54                         LOGGER.error(MessageEnum.BPMN_GENERAL_EXCEPTION, "BPMN", MsoLogger.getServiceName(),\r
55                                 MsoLogger.ErrorCode.DataError, LOGMARKER + ":" + msg);\r
56                         return Response.status(400).entity(msg).build();\r
57                 }\r
58 \r
59                 if (correlator == null || correlator.isEmpty()) {\r
60                         String msg = "Missing correlator";\r
61                         LOGGER.debug(LOGMARKER + " " + msg);\r
62                         LOGGER.error(MessageEnum.BPMN_GENERAL_EXCEPTION, "BPMN", MsoLogger.getServiceName(),\r
63                                 MsoLogger.ErrorCode.DataError, LOGMARKER + ":" + msg);\r
64                         return Response.status(400).entity(msg).build();\r
65                 }\r
66 \r
67                 String messageEventName = "WorkflowMessage";\r
68                 String messageVariable = messageType + "_MESSAGE";\r
69                 String correlationVariable = messageType + "_CORRELATOR";\r
70                 String correlationValue = correlator;\r
71                 String contentTypeVariable = messageType + "_CONTENT_TYPE";\r
72 \r
73                 Map<String, Object> variables = new HashMap<String, Object>();\r
74 \r
75                 if (contentType != null) {\r
76                         variables.put(contentTypeVariable, contentType);\r
77                 }\r
78 \r
79                 CallbackResult result = handleCallback(method, message, messageEventName,\r
80                         messageVariable, correlationVariable, correlationValue, LOGMARKER, variables);\r
81 \r
82                 if (result instanceof CallbackError) {\r
83                         return Response.status(500).entity(((CallbackError)result).getErrorMessage()).build();\r
84                 } else {\r
85                         return Response.status(204).build();\r
86                 }\r
87         }\r
88 }