123305b077ab719336c82ae9fe8d06b215e5facb
[policy/apex-pdp.git] / core / core-infrastructure / src / main / java / org / onap / policy / apex / core / infrastructure / messaging / impl / ws / messageblock / MessageBlockHandler.java
1 /*-
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
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
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.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.apex.core.infrastructure.messaging.impl.ws.messageblock;
22
23 import com.google.common.eventbus.EventBus;
24
25 import org.onap.policy.apex.core.infrastructure.messaging.MessageListener;
26 import org.slf4j.ext.XLogger;
27 import org.slf4j.ext.XLoggerFactory;
28
29 /**
30  * This class is used to pass messages received on a Java web socket to listening application class instances using an
31  * event bus.
32  *
33  * @author Sajeevan Achuthan (sajeevan.achuthan@ericsson.com)
34  * @param <M> the generic type
35  */
36 public class MessageBlockHandler<M> {
37     // Logger for this class
38     private static final XLogger LOGGER = XLoggerFactory.getXLogger(MessageBlockHandler.class);
39
40     /**
41      * This event bus will forward the events to all of its subscribers.
42      */
43     private EventBus eventBus = null;
44
45     /**
46      * Instantiates a new data handler.
47      *
48      * @param eventBusName the name of the event bus for this message block handler
49      */
50     public MessageBlockHandler(final String eventBusName) {
51         eventBus = new EventBus(eventBusName);
52         LOGGER.trace("message bus {} created ", eventBusName);
53     }
54
55     /**
56      * Post a raw message block on the data handler event bus of this class.
57      *
58      * @param rawMessageBlock the block containing raw messages
59      */
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());
65             }
66             eventBus.post(rawMessageBlock);
67         }
68     }
69
70     /**
71      * Post a block of typed messages on the data handler event bus of this class.
72      *
73      * @param messageBlock the block containing typed messages
74      */
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());
80             }
81             eventBus.post(messageBlock);
82         }
83     }
84
85     /**
86      * Post a string message on the data handler event bus of this class.
87      *
88      * @param messageString the string message
89      */
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);
94             }
95             eventBus.post(messageString);
96         }
97     }
98
99     /**
100      * Register a listener to event bus.
101      *
102      * @param listener is an instance of WebSocketMessageListener
103      */
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");
108         }
109         eventBus.register(listener);
110         LOGGER.debug("message listener {} is registered with forwarder", listener);
111         LOGGER.exit();
112     }
113
114     /**
115      * Remove the listener subscribed to the event bus.
116      *
117      * @param listener the listener
118      */
119     public void unRegisterMessageHandler(final MessageListener<M> listener) {
120         if (listener == null) {
121             throw new IllegalArgumentException("listener object cannot be null");
122         }
123         LOGGER.entry(listener);
124         eventBus.unregister(listener);
125         LOGGER.trace(" message listener {} unregistered from forwarder", listener);
126         LOGGER.exit();
127     }
128 }