diff options
Diffstat (limited to 'openecomp-be/lib/openecomp-sdc-notification-lib/openecomp-sdc-notification-websocket')
-rw-r--r-- | openecomp-be/lib/openecomp-sdc-notification-lib/openecomp-sdc-notification-websocket/src/main/java/org/openecomp/sdc/notification/websocket/NotificationWebsocketHandler.java | 109 |
1 files changed, 47 insertions, 62 deletions
diff --git a/openecomp-be/lib/openecomp-sdc-notification-lib/openecomp-sdc-notification-websocket/src/main/java/org/openecomp/sdc/notification/websocket/NotificationWebsocketHandler.java b/openecomp-be/lib/openecomp-sdc-notification-lib/openecomp-sdc-notification-websocket/src/main/java/org/openecomp/sdc/notification/websocket/NotificationWebsocketHandler.java index 1e424631f7..7f21dee9a2 100644 --- a/openecomp-be/lib/openecomp-sdc-notification-lib/openecomp-sdc-notification-websocket/src/main/java/org/openecomp/sdc/notification/websocket/NotificationWebsocketHandler.java +++ b/openecomp-be/lib/openecomp-sdc-notification-lib/openecomp-sdc-notification-websocket/src/main/java/org/openecomp/sdc/notification/websocket/NotificationWebsocketHandler.java @@ -17,10 +17,14 @@ * limitations under the License. * ============LICENSE_END========================================================= */ - package org.openecomp.sdc.notification.websocket; import com.google.gson.Gson; +import java.io.IOException; +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; +import java.util.function.Consumer; import org.openecomp.sdc.logging.api.Logger; import org.openecomp.sdc.logging.api.LoggerFactory; import org.openecomp.sdc.notification.types.NotificationsStatusDto; @@ -31,100 +35,81 @@ import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.handler.TextWebSocketHandler; -import java.io.IOException; -import java.util.Objects; -import java.util.Optional; -import java.util.UUID; -import java.util.function.Consumer; - public class NotificationWebsocketHandler extends TextWebSocketHandler { - private static final String USER_ID_HEADER_PARAM = "USER_ID"; - private static final String LAST_DELIVERED_QUERY_PARAM = "LAST_DELIVERED_EVENT_ID"; - private static final String COOKIE = "Cookie"; - private static Logger LOGGER = LoggerFactory.getLogger(NotificationWebsocketHandler.class); - private NotificationWorker worker; + private static final String USER_ID_HEADER_PARAM = "USER_ID"; + private static final String LAST_DELIVERED_QUERY_PARAM = "LAST_DELIVERED_EVENT_ID"; + private static final String COOKIE = "Cookie"; + private static Logger LOGGER = LoggerFactory.getLogger(NotificationWebsocketHandler.class); + private NotificationWorker worker; - public NotificationWebsocketHandler(NotificationWorker worker) { - super(); - this.worker = Objects.requireNonNull(worker, "NotificationWorker object is not initialized."); - } + public NotificationWebsocketHandler(NotificationWorker worker) { + super(); + this.worker = Objects.requireNonNull(worker, "NotificationWorker object is not initialized."); + } - @Override + @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { super.afterConnectionEstablished(session); - - String ownerId = getOwnerId(session); - if (ownerId == null) { - return; - } - UUID lastDelivered = getLastEventId(session); - - Consumer<NotificationsStatusDto> notesProcessor = (notes) -> notifyReceiver(session, notes); - - worker.register(ownerId, lastDelivered, notesProcessor); + String ownerId = getOwnerId(session); + if (ownerId == null) { + return; + } + UUID lastDelivered = getLastEventId(session); + Consumer<NotificationsStatusDto> notesProcessor = (notes) -> notifyReceiver(session, notes); + worker.register(ownerId, lastDelivered, notesProcessor); } - @Override + @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { - String ownerId = getOwnerId(session); - if (ownerId != null) { - worker.unregister(ownerId); - } - super.afterConnectionClosed(session, status); + String ownerId = getOwnerId(session); + if (ownerId != null) { + worker.unregister(ownerId); + } + super.afterConnectionClosed(session, status); } - private void notifyReceiver(WebSocketSession session, NotificationsStatusDto notificationsStatusDto) { - - try { - session.sendMessage(new TextMessage(new Gson().toJson(notificationsStatusDto))); - } catch (IOException e) { - LOGGER.error("IO Exception during Receiver notification.", e); - } - } + private void notifyReceiver(WebSocketSession session, NotificationsStatusDto notificationsStatusDto) { + try { + session.sendMessage(new TextMessage(new Gson().toJson(notificationsStatusDto))); + } catch (IOException e) { + LOGGER.error("IO Exception during Receiver notification.", e); + } + } private String getOwnerId(WebSocketSession session) { - HttpHeaders handshakeHeaders = session.getHandshakeHeaders(); if (handshakeHeaders.containsKey(COOKIE)) { - String[] cookies = handshakeHeaders.get(COOKIE).get(0).split("; "); - Optional<String> cookie = extractValue(cookies, USER_ID_HEADER_PARAM); - if (cookie.isPresent()) { - return cookie.get(); - } - } - - LOGGER.error("No " + USER_ID_HEADER_PARAM + " specified in the session cookies."); - return null; + String[] cookies = handshakeHeaders.get(COOKIE).get(0).split("; "); + Optional<String> cookie = extractValue(cookies, USER_ID_HEADER_PARAM); + if (cookie.isPresent()) { + return cookie.get(); + } + } + LOGGER.error("No " + USER_ID_HEADER_PARAM + " specified in the session cookies."); + return null; } private UUID getLastEventId(WebSocketSession session) { - String uriQuery = session.getUri().getQuery(); if (uriQuery != null) { - String[] queries = uriQuery.split("; "); Optional<String> paramValue = extractValue(queries, LAST_DELIVERED_QUERY_PARAM); if (paramValue.isPresent()) { return UUID.fromString(paramValue.get()); } } - LOGGER.warn("No " + LAST_DELIVERED_QUERY_PARAM + " specified in the request URI."); return null; } - private Optional<String> extractValue(String[] pairs, String name) { - - for (String nameValuePair : pairs) { - + private Optional<String> extractValue(String[] pairs, String name) { + for (String nameValuePair : pairs) { String[] value = nameValuePair.split("="); if (value[0].equals(name)) { return Optional.of(value[1]); } } - - return Optional.empty(); - } - + return Optional.empty(); + } } |