Add websocket client code.
[policy/engine.git] / PolicyEngineAPI / src / main / java / org / onap / policy / std / ManualClientEnd.java
index 991bdca..2fe6dc0 100644 (file)
 
 package org.onap.policy.std;
 
-import java.io.IOException;
 import java.net.URI;
 import java.util.concurrent.CountDownLatch;
-
 import javax.websocket.ClientEndpoint;
-import javax.websocket.OnClose;
-import javax.websocket.OnError;
-import javax.websocket.OnMessage;
-import javax.websocket.OnOpen;
-import javax.websocket.Session;
-
 import org.java_websocket.client.WebSocketClient;
 import org.java_websocket.handshake.ServerHandshake;
 import org.onap.policy.api.NotificationScheme;
 import org.onap.policy.api.NotificationType;
 import org.onap.policy.api.PDPNotification;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
 import org.onap.policy.std.StdPDPNotification;
-
 import org.onap.policy.xacml.api.XACMLErrorConstants;
 
-import org.onap.policy.common.logging.flexlogger.*; 
-
 @ClientEndpoint
 public class ManualClientEnd extends WebSocketClient {
-       private static CountDownLatch latch;
-       private static StdPDPNotification notification = null;
-       private static String resultJson = null;
-       private static Logger logger = FlexLogger.getLogger(ManualClientEnd.class.getName());
-       private static ManualClientEnd client;
-       
-       public ManualClientEnd(URI serverUri) {
-               super(serverUri);
-       }
+    private static CountDownLatch latch;
+    private static StdPDPNotification notification = null;
+    private static String resultJson = null;
+    private static Logger logger = FlexLogger.getLogger(ManualClientEnd.class.getName());
+    private static ManualClientEnd client;
+
+    public ManualClientEnd(URI serverUri) {
+        super(serverUri);
+    }
+
+    @Override
+    public void onClose(int code, String reason, boolean remote) {
+        logger.info("ManualClientEnd disconnected from: " + getURI() + "; Code: " + code + ", reason :  " + reason);
+        latch.countDown();
+    }
 
-       @Override
-       public void onClose(int arg0, String arg1, boolean arg2) {
-               // Not implemented
-       }
+    @Override
+    public void onError(Exception ex) {
+        logger.error("XACMLErrorConstants.ERROR_PROCESS_FLOW + ManualClientEnd - Error connecting to: " + getURI()
+                + ", Exception occured ...\n" + ex);
+        latch.countDown();
+    }
 
-       @Override
-       public void onError(Exception arg0) {
-               // Not implemented
-       }
+    @Override
+    public void onMessage(String message) {
+        logger.info("Manual Notification Recieved Message from : " + getURI() + ", Notification: " + message);
+        ManualClientEnd.resultJson = message;
+        try {
+            ManualClientEnd.notification = NotificationUnMarshal.notificationJSON(message);
+            latch.countDown();
+        } catch (Exception e) {
+            logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e);
+            latch.countDown();
+        }
+    }
 
-       @Override
-       public void onMessage(String arg0) {
-               // Not implemented
-       }
+    @Override
+    public void onOpen(ServerHandshake arg0) {
+        logger.info("Manual Notification Session Started... " + getURI());
+        send("Manual");
+    }
 
-       @Override
-       public void onOpen(ServerHandshake arg0) {
-               // Not implemented
-       }
+    /**
+     * Start.
+     *
+     * @param url the url
+     */
+    public static void start(String url) {
+        latch = new CountDownLatch(1);
 
-       public static void start(String url) {
-               latch = new CountDownLatch(1);
+        if (url.contains("https")) {
+            url = url.replaceAll("https", "wss");
+        } else {
+            url = url.replaceAll("http", "ws");
+        }
 
-               if (url.contains("https")) {
-                       url = url.replaceAll("https", "wss");
-               }
-               else {
-                       url = url.replaceAll("http", "ws");
-               }
-               
-               try {
-                       client = new ManualClientEnd(new URI(url+"notifications"));
-                       latch.await();
-               } catch (Exception e) {
-                       logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
-               }
-       }
+        try {
+            client = new ManualClientEnd(new URI(url + "notifications"));
+            client.connect();
+            latch.await();
+            client.close();
+        } catch (Exception e) {
+            logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
+        }
+    }
 
-       public static PDPNotification result(NotificationScheme scheme) {
-               if (resultJson == null || notification == null) {
-                       logger.debug("No Result" );
-                       return null;
-               } else {
-                       if(scheme.equals(NotificationScheme.MANUAL_ALL_NOTIFICATIONS)) {
-                               boolean removed = false;
-                               boolean updated = false; 
-                               if(notification.getRemovedPolicies()!=null && !notification.getRemovedPolicies().isEmpty()){
-                                       removed = true;
-                               }
-                               if(notification.getLoadedPolicies()!=null && !notification.getLoadedPolicies().isEmpty()){
-                                       updated = true;
-                               }
-                               if(removed && updated) {
-                                       notification.setNotificationType(NotificationType.BOTH);
-                               }else if(removed){
-                                       notification.setNotificationType(NotificationType.REMOVE);
-                               }else if(updated){
-                                       notification.setNotificationType(NotificationType.UPDATE);
-                               }
-                               return notification;
-                       }else if(scheme.equals(NotificationScheme.MANUAL_NOTIFICATIONS)) {
-                               return MatchStore.checkMatch(notification);
-                       }else {
-                               return null;
-                       }
-               }
-       }
-       
-       // WebSockets Code.. 
-       @OnOpen
-       public void onOpen(Session session) throws IOException {
-               logger.info("Session Started with : " + session.getId());
-               session.getBasicRemote().sendText("Manual");
-       }
-       
-       @OnError
-       public void onError(Session session, Throwable e) {
-               logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error in: "+ session.getId());
-               latch.countDown();
-       }
-       
-       @OnClose
-       public void onClose(Session session) {
-               logger.info("Session ended with "+ session.getId());
-               latch.countDown();
-               client.close();
-       }
-       
-       @OnMessage
-       public static void onMessage(String message, Session session){
-               logger.debug(" Manual Notification Recieved Message : " + message +" Session info is : "+ session.getId());
-               resultJson = message;
-               try {
-                       notification = NotificationUnMarshal.notificationJSON(message);
-               } catch (Exception e) {
-                       logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e);
-                       latch.countDown();
-               }
-               try {
-                       session.close();
-               } catch (IOException e) {
-                       logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
-                       latch.countDown();
-               } // For Manual Client..
-               latch.countDown();
-       }
+    /**
+     * Result.
+     *
+     * @param scheme the scheme
+     * @return the PDP notification
+     */
+    public static PDPNotification result(NotificationScheme scheme) {
+        if (resultJson == null || notification == null) {
+            logger.info("ManualClientENd - No Result available");
+            return null;
+        } else {
+            if (scheme.equals(NotificationScheme.MANUAL_ALL_NOTIFICATIONS)) {
+                boolean removed = false;
+                boolean updated = false;
+                if (notification.getRemovedPolicies() != null && !notification.getRemovedPolicies().isEmpty()) {
+                    removed = true;
+                    notification.setNotificationType(NotificationType.REMOVE);
+                }
+                if (notification.getLoadedPolicies() != null && !notification.getLoadedPolicies().isEmpty()) {
+                    updated = true;
+                    notification.setNotificationType(NotificationType.UPDATE);
+                }
+                if (removed && updated) {
+                    notification.setNotificationType(NotificationType.BOTH);
+                }
+                return notification;
+            } else if (scheme.equals(NotificationScheme.MANUAL_NOTIFICATIONS)) {
+                return MatchStore.checkMatch(notification);
+            } else {
+                return null;
+            }
+        }
+    }
 }