2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2016-2018 Ericsson. All rights reserved.
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.apex.core.infrastructure.messaging.impl.ws.messageblock;
23 import com.google.common.eventbus.EventBus;
25 import org.onap.policy.apex.core.infrastructure.messaging.MessageListener;
26 import org.slf4j.ext.XLogger;
27 import org.slf4j.ext.XLoggerFactory;
30 * This class is used to pass messages received on a Java web socket to listening application class instances using an
33 * @author Sajeevan Achuthan (sajeevan.achuthan@ericsson.com)
34 * @param <M> the generic type
36 public class MessageBlockHandler<M> {
37 // Logger for this class
38 private static final XLogger LOGGER = XLoggerFactory.getXLogger(MessageBlockHandler.class);
41 * This event bus will forward the events to all of its subscribers.
43 private EventBus eventBus = null;
46 * Instantiates a new data handler.
48 * @param eventBusName the name of the event bus for this message block handler
50 public MessageBlockHandler(final String eventBusName) {
51 eventBus = new EventBus(eventBusName);
52 LOGGER.trace("message bus {} created ", eventBusName);
56 * Post a raw message block on the data handler event bus of this class.
58 * @param rawMessageBlock the block containing raw messages
60 public void post(final RawMessageBlock rawMessageBlock) {
61 if (rawMessageBlock.getMessage() != null) {
62 if (LOGGER.isDebugEnabled()) {
63 LOGGER.debug("new raw message recieved from {}", rawMessageBlock.getConn() == null ? "server"
64 : rawMessageBlock.getConn().getRemoteSocketAddress().getHostName());
66 eventBus.post(rawMessageBlock);
71 * Post a block of typed messages on the data handler event bus of this class.
73 * @param messageBlock the block containing typed messages
75 public void post(final MessageBlock<M> messageBlock) {
76 if (messageBlock.getMessages() != null) {
77 if (LOGGER.isDebugEnabled()) {
78 LOGGER.debug("new data message recieved from {}", messageBlock.getConnection() == null ? "server"
79 : messageBlock.getConnection().getRemoteSocketAddress().getHostName());
81 eventBus.post(messageBlock);
86 * Post a string message on the data handler event bus of this class.
88 * @param messageString the string message
90 public void post(final String messageString) {
91 if (messageString != null) {
92 if (LOGGER.isDebugEnabled()) {
93 LOGGER.debug("new string message recieved from server: {}", messageString);
95 eventBus.post(messageString);
100 * Register a listener to event bus.
102 * @param listener is an instance of WebSocketMessageListener
104 public void registerMessageHandler(final MessageListener<M> listener) {
105 LOGGER.entry(listener);
106 if (listener == null) {
107 throw new IllegalArgumentException("listener object cannot be null");
109 eventBus.register(listener);
110 LOGGER.debug("message listener {} is registered with forwarder", listener);
115 * Remove the listener subscribed to the event bus.
117 * @param listener the listener
119 public void unRegisterMessageHandler(final MessageListener<M> listener) {
120 if (listener == null) {
121 throw new IllegalArgumentException("listener object cannot be null");
123 LOGGER.entry(listener);
124 eventBus.unregister(listener);
125 LOGGER.trace(" message listener {} unregistered from forwarder", listener);