Adding more DR-Node unit tests
[dmaap/datarouter.git] / datarouter-node / src / main / java / org / onap / dmaap / datarouter / node / RedirManager.java
index a557e7a..b4a3f0a 100644 (file)
 
 package org.onap.dmaap.datarouter.node;
 
-import java.util.*;
-import java.io.*;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import java.io.BufferedReader;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.OutputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Timer;
 
 /**
- * Track redirections of subscriptions
+ * Track redirections of subscriptions.
  */
-public class RedirManager {
-    private Hashtable<String, String> sid2primary = new Hashtable<String, String>();
-    private Hashtable<String, String> sid2secondary = new Hashtable<String, String>();
+class RedirManager {
+
+    private static EELFLogger eelfLogger = EELFManager.getInstance().getLogger(RedirManager.class);
+    private RateLimitedOperation op;
+    private HashMap<String, String> sid2primary = new HashMap<>();
+    private HashMap<String, String> sid2secondary = new HashMap<>();
     private String redirfile;
-    RateLimitedOperation op;
 
     /**
      * Create a mechanism for maintaining subscription redirections.
      *
-     * @param redirfile   The file to store the redirection information.
+     * @param redirfile The file to store the redirection information.
      * @param mininterval The minimum number of milliseconds between writes to the redirection information file.
-     * @param timer       The timer thread used to run delayed file writes.
+     * @param timer The timer thread used to run delayed file writes.
      */
-    public RedirManager(String redirfile, long mininterval, Timer timer) {
+    RedirManager(String redirfile, long mininterval, Timer timer) {
         this.redirfile = redirfile;
         op = new RateLimitedOperation(mininterval, timer) {
             public void run() {
                 try {
-                    StringBuffer sb = new StringBuffer();
-                    for (String s : sid2primary.keySet()) {
-                        sb.append(s).append(' ').append(sid2primary.get(s)).append(' ').append(sid2secondary.get(s)).append('\n');
+                    StringBuilder sb = new StringBuilder();
+                    for (Map.Entry<String, String> entry : sid2primary.entrySet()) {
+                        String key = entry.getKey();
+                        String value = entry.getValue();
+                        sb.append(key).append(' ').append(value).append(' ')
+                                .append(sid2secondary.get(key)).append('\n');
+                    }
+                    try (OutputStream os = new FileOutputStream(RedirManager.this.redirfile)) {
+                        os.write(sb.toString().getBytes());
                     }
-                    OutputStream os = new FileOutputStream(RedirManager.this.redirfile);
-                    os.write(sb.toString().getBytes());
-                    os.close();
                 } catch (Exception e) {
+                    eelfLogger.error("Exception", e);
                 }
             }
         };
         try {
-            String s;
-            BufferedReader br = new BufferedReader(new FileReader(redirfile));
-            while ((s = br.readLine()) != null) {
-                s = s.trim();
-                String[] sx = s.split(" ");
-                if (s.startsWith("#") || sx.length != 3) {
-                    continue;
+            String line;
+            try (BufferedReader br = new BufferedReader(new FileReader(redirfile))) {
+                while ((line = br.readLine()) != null) {
+                    addSubRedirInfo(line);
                 }
-                sid2primary.put(sx[0], sx[1]);
-                sid2secondary.put(sx[0], sx[2]);
             }
-            br.close();
         } catch (Exception e) {
-            // missing file is normal
+            eelfLogger.debug("Missing file is normal", e);
         }
     }
 
     /**
-     * Set up redirection.  If a request is to be sent to subscription ID sid, and that is configured to go to URL primary, instead, go to secondary.
+     * Set up redirection.  If a request is to be sent to subscription ID sid, and that is configured to go to URL
+     * primary, instead, go to secondary.
      *
-     * @param sid       The subscription ID to be redirected
-     * @param primary   The URL associated with that subscription ID
+     * @param sid The subscription ID to be redirected
+     * @param primary The URL associated with that subscription ID
      * @param secondary The replacement URL to use instead
      */
-    public synchronized void redirect(String sid, String primary, String secondary) {
+    synchronized void redirect(String sid, String primary, String secondary) {
         sid2primary.put(sid, primary);
         sid2secondary.put(sid, secondary);
         op.request();
@@ -93,22 +101,23 @@ public class RedirManager {
     /**
      * Cancel redirection.  If a request is to be sent to subscription ID sid, send it to its primary URL.
      *
-     * @param    sid    The subscription ID to remove from the table.
+     * @param sid The subscription ID to remove from the table.
      */
-    public synchronized void forget(String sid) {
+    synchronized void forget(String sid) {
         sid2primary.remove(sid);
         sid2secondary.remove(sid);
         op.request();
     }
 
     /**
-     * Look up where to send a subscription.  If the primary has changed or there is no redirection, use the primary.  Otherwise, redirect to the secondary URL.
+     * Look up where to send a subscription.  If the primary has changed or there is no redirection, use the primary.
+     * Otherwise, redirect to the secondary URL.
      *
-     * @param    sid    The subscription ID to look up.
-     * @param    primary    The configured primary URL.
+     * @param sid The subscription ID to look up.
+     * @param primary The configured primary URL.
      * @return The destination URL to really use.
      */
-    public synchronized String lookup(String sid, String primary) {
+    synchronized String lookup(String sid, String primary) {
         String oprim = sid2primary.get(sid);
         if (primary.equals(oprim)) {
             return (sid2secondary.get(sid));
@@ -119,9 +128,19 @@ public class RedirManager {
     }
 
     /**
-     * Is a subscription redirected?
+     * Is a subscription redirected.
      */
-    public synchronized boolean isRedirected(String sid) {
+    synchronized boolean isRedirected(String sid) {
         return (sid != null && sid2secondary.get(sid) != null);
     }
+
+    private void addSubRedirInfo(String subRedirInfo) {
+        subRedirInfo = subRedirInfo.trim();
+        String[] sx = subRedirInfo.split(" ");
+        if (subRedirInfo.startsWith("#") || sx.length != 3) {
+            return;
+        }
+        sid2primary.put(sx[0], sx[1]);
+        sid2secondary.put(sx[0], sx[2]);
+    }
 }