[PORTAL-7] Rebase
[portal.git] / ecomp-portal-BE-common / src / main / java / org / openecomp / portalapp / portal / controller / TicketEventController.java
1 /*-\r
2  * ================================================================================\r
3  * ECOMP Portal\r
4  * ================================================================================\r
5  * Copyright (C) 2017 AT&T Intellectual Property\r
6  * ================================================================================\r
7  * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * you may not use this file except in compliance with the License.\r
9  * You may obtain a copy of the License at\r
10  * \r
11  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * \r
13  * Unless required by applicable law or agreed to in writing, software\r
14  * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * See the License for the specific language governing permissions and\r
17  * limitations under the License.\r
18  * ================================================================================\r
19  */\r
20 package org.openecomp.portalapp.portal.controller;\r
21 \r
22 import java.util.Arrays;\r
23 import java.util.Calendar;\r
24 import java.util.Date;\r
25 import java.util.HashSet;\r
26 import java.util.List;\r
27 import java.util.Set;\r
28 \r
29 import javax.servlet.http.HttpServletRequest;\r
30 import javax.servlet.http.HttpServletResponse;\r
31 \r
32 import org.openecomp.portalapp.portal.domain.EPUser;\r
33 import org.openecomp.portalapp.portal.ecomp.model.PortalRestResponse;\r
34 import org.openecomp.portalapp.portal.ecomp.model.PortalRestStatusEnum;\r
35 import org.openecomp.portalapp.portal.logging.aop.EPAuditLog;\r
36 import org.openecomp.portalapp.portal.service.UserNotificationService;\r
37 import org.openecomp.portalapp.portal.transport.EpNotificationItem;\r
38 import org.openecomp.portalapp.portal.transport.EpRoleNotificationItem;\r
39 import org.openecomp.portalapp.portal.utils.PortalConstants;\r
40 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;\r
41 import org.springframework.beans.factory.annotation.Autowired;\r
42 import org.springframework.context.annotation.Configuration;\r
43 import org.springframework.context.annotation.EnableAspectJAutoProxy;\r
44 import org.springframework.web.bind.annotation.RequestBody;\r
45 import org.springframework.web.bind.annotation.RequestMapping;\r
46 import org.springframework.web.bind.annotation.RequestMethod;\r
47 import org.springframework.web.bind.annotation.RestController;\r
48 \r
49 import com.fasterxml.jackson.databind.JsonNode;\r
50 import com.fasterxml.jackson.databind.ObjectMapper;\r
51 \r
52 import io.swagger.annotations.ApiOperation;\r
53 \r
54 /**\r
55  * Receives messages from the Collaboration Bus (C-BUS) notification and event\r
56  * brokering tool. Creates notifications for ECOMP Portal users.\r
57  */\r
58 @RestController\r
59 @RequestMapping(PortalConstants.REST_AUX_API)\r
60 @Configuration\r
61 @EnableAspectJAutoProxy\r
62 @EPAuditLog\r
63 public class TicketEventController implements BasicAuthenticationController {\r
64 \r
65         @Autowired\r
66         private UserNotificationService userNotificationService;\r
67 \r
68         private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(TicketEventController.class);\r
69 \r
70         public boolean isAuxRESTfulCall() {\r
71                 return true;\r
72         }\r
73 \r
74         private final ObjectMapper mapper = new ObjectMapper();\r
75 \r
76         @ApiOperation(value = "Accepts messages from external ticketing systems and creates notifications for Portal users.", response = PortalRestResponse.class)\r
77         @RequestMapping(value = { "/ticketevent" }, method = RequestMethod.POST)\r
78         public PortalRestResponse<String> handleRequest(HttpServletRequest request, HttpServletResponse response,\r
79                         @RequestBody String ticketEventJson) throws Exception {\r
80 \r
81                 logger.debug(EELFLoggerDelegate.debugLogger, "Ticket Event notification" + ticketEventJson);\r
82                 PortalRestResponse<String> portalResponse = new PortalRestResponse<>();\r
83                 try {\r
84                         JsonNode ticketEventNotif = mapper.readTree(ticketEventJson);\r
85 \r
86                         // Reject request if required fields are missing.\r
87                         String error = validateTicketEventMessage(ticketEventNotif);\r
88                         if (error != null) {\r
89                                 portalResponse.setStatus(PortalRestStatusEnum.ERROR);\r
90                                 portalResponse.setMessage(error);\r
91                                 response.setStatus(400);\r
92                                 return portalResponse;\r
93                         }\r
94 \r
95                         EpNotificationItem epItem = new EpNotificationItem();\r
96                         epItem.setCreatedDate(new Date());\r
97                         epItem.setIsForOnlineUsers("Y");\r
98                         epItem.setIsForAllRoles("N");\r
99                         epItem.setActiveYn("Y");\r
100                         //JsonNode application = ticketEventNotif.get("application");\r
101                         JsonNode event = ticketEventNotif.get("event");\r
102                         JsonNode header = event.get("header");\r
103                         JsonNode body = event.get("body");\r
104                         epItem.setMsgDescription(body.toString());\r
105                         Long eventDate = body.get("eventDate").asLong();\r
106 \r
107                         String assetID = body.get("assetID").asText();\r
108                         epItem.setMsgHeader(assetID);\r
109                         String eventSource = header.get("eventSource").asText();\r
110                         epItem.setMsgSource(eventSource);\r
111                         epItem.setStartTime(new Date(eventDate));\r
112                         Calendar calendar = Calendar.getInstance();\r
113                         calendar.setTime(epItem.getStartTime());\r
114                         int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);\r
115                         calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth + 30);\r
116                         epItem.setEndTime(calendar.getTime());\r
117                         String severityString=  (body.get("severity").toString()).substring(1, 2);\r
118                         Long  severity=Long.parseLong(severityString);\r
119                         epItem.setPriority(severity);\r
120                         epItem.setCreatorId(null);\r
121                         Set<EpRoleNotificationItem> roles = new HashSet<>();\r
122                         JsonNode SubscriberInfo = ticketEventNotif.get("SubscriberInfo");\r
123                         JsonNode userList = SubscriberInfo.get("UserList");\r
124                         String UserIds[] = userList.toString().replace("[", "").replace("]", "").trim().replace("\"", "")\r
125                                         .split(",");\r
126                         List<EPUser> users = userNotificationService.getUsersByOrgIds(Arrays.asList(UserIds));\r
127                         for (String userId : UserIds) {\r
128                                 EpRoleNotificationItem roleNotifItem = new EpRoleNotificationItem();\r
129                                 for (EPUser user : users) {\r
130                                         if (user.getOrgUserId().equals(userId)) {\r
131                                                 roleNotifItem.setRecvUserId(user.getId().intValue());\r
132                                                 roles.add(roleNotifItem);\r
133                                                 break;\r
134                                         }\r
135                                 }\r
136 \r
137                         }\r
138                         epItem.setRoles(roles);\r
139                         userNotificationService.saveNotification(epItem);\r
140 \r
141                         portalResponse.setStatus(PortalRestStatusEnum.OK);\r
142                         portalResponse.setMessage("processEventNotification: notification created");\r
143                         portalResponse.setResponse("NotificationId is :" + epItem.notificationId);\r
144                 } catch (Exception ex) {\r
145                         portalResponse.setStatus(PortalRestStatusEnum.ERROR);\r
146                         response.setStatus(400);\r
147                         portalResponse.setMessage(ex.toString());\r
148                 }\r
149                 return portalResponse;\r
150         }\r
151 \r
152         /**\r
153          * Validates that mandatory fields are present.\r
154          * \r
155          * @param ticketEventNotif\r
156          * @return Error message if a problem is found; null if all is well.\r
157          */\r
158         private String validateTicketEventMessage(JsonNode ticketEventNotif) {\r
159                 JsonNode application = ticketEventNotif.get("application");\r
160                 JsonNode event = ticketEventNotif.get("event");\r
161                 JsonNode header = event.get("header");\r
162                 JsonNode body = event.get("body");\r
163                 JsonNode SubscriberInfo = ticketEventNotif.get("SubscriberInfo");\r
164                 if (application == null)\r
165                         return "application is mandatory";\r
166                 if (body == null)\r
167                         return "body is mandatory";\r
168                 if (body.get("assetID") == null)\r
169                         return "Asset Id is mandatory";\r
170                 if (body.get("eventDate") == null)\r
171                         return "Event Date is mandatory";\r
172                 if (header.get("eventSource") == null)\r
173                         return "Message Source is mandatory";\r
174                 if (SubscriberInfo.get("UserList") == null)\r
175                         return "At least one user Id is mandatory";\r
176                 return null;\r
177         }\r
178         \r
179 }\r