Merge "Removing code smells"
diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/Delivery.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/Delivery.java
index 82a4e9f..4675081 100644
--- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/Delivery.java
+++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/Delivery.java
@@ -26,6 +26,8 @@
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -98,12 +100,16 @@
             return;
         }
         File fdir = new File(dir);
-        for (File junk : fdir.listFiles()) {
-            if (junk.isFile()) {
-                junk.delete();
+        try {
+            for (File junk : fdir.listFiles()) {
+                if (junk.isFile()) {
+                    Files.delete(fdir.toPath());
+                }
             }
+            Files.delete(fdir.toPath());
+        } catch (IOException e) {
+            logger.error("Failed to delete file: " + fdir.getPath(), e);
         }
-        fdir.delete();
     }
 
     private void freeDiskCheck() {
@@ -127,19 +133,19 @@
         Arrays.sort(items);
         long stop = (long) (tspace * fdstop);
         logger.warn(
-                "NODE0501 Free disk space below red threshold.  current=" + cur + " red=" + start + TOTAL + tspace);
+            "NODE0501 Free disk space below red threshold.  current=" + cur + " red=" + start + TOTAL + tspace);
         if (determineFreeDiskSpace(spoolfile, tspace, stop, cur, items)) {
             return;
         }
         cur = spoolfile.getUsableSpace();
         if (cur >= stop) {
             logger.warn("NODE0503 Free disk space at or above yellow threshold.  current=" + cur + YELLOW + stop
-                                + TOTAL + tspace);
+                + TOTAL + tspace);
             return;
         }
         logger.warn(
-                "NODE0504 Unable to recover sufficient disk space to reach green status.  current=" + cur + YELLOW
-                        + stop + TOTAL + tspace);
+            "NODE0504 Unable to recover sufficient disk space to reach green status.  current=" + cur + YELLOW
+                + stop + TOTAL + tspace);
     }
 
     private void cleardirs() {
@@ -161,7 +167,11 @@
                     cleardir(sxbase + "/" + sxdir + "/" + sdir);
                 }
             }
-            sxf.delete();  // won't if anything still in it
+            try {
+                Files.delete(sxf.toPath());  // won't if anything still in it
+            } catch (IOException e) {
+                logger.error("Failed to delete file: " + sxf.getPath(), e);
+            }
         }
     }
 
@@ -203,7 +213,7 @@
             }).start();
         }
         nextcheck = 0;
-        notify();
+        notifyAll();
     }
 
     private void dodelivery() {
@@ -225,7 +235,7 @@
                     continue;
                 }
                 nextcheck = 0;
-                notify();
+                notifyAll();
                 return (dq);
             }
             long now = System.currentTimeMillis();
@@ -249,7 +259,7 @@
         for (DelItem item : items) {
             long amount = dqs.get(item.getSpool()).cancelTask(item.getPublishId());
             logger.debug("NODE0502 Attempting to discard " + item.getSpool() + "/" + item.getPublishId()
-                                + " to free up disk");
+                + " to free up disk");
             if (amount > 0) {
                 cur += amount;
                 if (cur >= stop) {
@@ -257,8 +267,8 @@
                 }
                 if (cur >= stop) {
                     logger.warn(
-                            "NODE0503 Free disk space at or above yellow threshold.  current=" + cur + YELLOW + stop
-                                    + TOTAL + tspace);
+                        "NODE0503 Free disk space at or above yellow threshold.  current=" + cur + YELLOW + stop
+                            + TOTAL + tspace);
                     return true;
                 }
             }
@@ -302,7 +312,7 @@
             }
             DelItem delItem = (DelItem) object;
             return Objects.equals(pubid, delItem.pubid)
-                           && Objects.equals(getSpool(), delItem.getSpool());
+                && Objects.equals(getSpool(), delItem.getSpool());
         }
 
         @Override
diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryQueue.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryQueue.java
index b7699e5..0b9ea49 100644
--- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryQueue.java
+++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryQueue.java
@@ -27,9 +27,10 @@
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 import java.io.File;
+import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Hashtable;
-import java.util.Vector;
+import java.util.HashMap;
+import java.util.List;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -53,15 +54,15 @@
  * or change the duration of any subsequent delay.
  * If, however, it succeeds, it will cancel the delay.
  *
- * <p>The queue maintains 3 collections of files to deliver: A todo list of
+ * The queue maintains 3 collections of files to deliver: A todoList of
  * files that will be attempted, a working set of files that are being
  * attempted, and a retry set of files that were attempted and failed.
- * Whenever the todo list is empty and needs to be refilled, a scan of the
+ * Whenever the todoList is empty and needs to be refilled, a scan of the
  * spool directory is made and the file names sorted.  Any files in the working set are ignored.
  * If a DeliveryTask for the file is in the retry set, then that delivery
- * task is placed on the todo list.  Otherwise, a new DeliveryTask for the
- * file is created and placed on the todo list.
- * If, when a DeliveryTask is about to be removed from the todo list, its
+ * task is placed on the todoList.  Otherwise, a new DeliveryTask for the
+ * file is created and placed on the todoList.
+ * If, when a DeliveryTask is about to be removed from the todoList, its
  * age exceeds DeliveryQueueHelper.getExpirationTimer(), then it is instead
  * marked as expired.
  *
@@ -73,14 +74,14 @@
     private DeliveryQueueHelper deliveryQueueHelper;
 
     private DestInfo destinationInfo;
-    private Hashtable<String, DeliveryTask> working = new Hashtable<>();
-    private Hashtable<String, DeliveryTask> retry = new Hashtable<>();
+    private HashMap<String, DeliveryTask> working = new HashMap<>();
+    private HashMap<String, DeliveryTask> retry = new HashMap<>();
     private int todoindex;
     private boolean failed;
     private long failduration;
     private long resumetime;
     private File dir;
-    private Vector<DeliveryTask> todo = new Vector<>();
+    private List<DeliveryTask> todoList = new ArrayList<>();
 
     /**
      * Try to cancel a delivery task.
@@ -93,8 +94,8 @@
         }
         DeliveryTask dt = retry.get(pubid);
         if (dt == null) {
-            for (int i = todoindex; i < todo.size(); i++) {
-                DeliveryTask xdt = todo.get(i);
+            for (int i = todoindex; i < todoList.size(); i++) {
+                DeliveryTask xdt = todoList.get(i);
                 if (xdt.getPublishId().equals(pubid)) {
                     dt = xdt;
                     break;
@@ -210,13 +211,13 @@
             }
         }
         while (true) {
-            if (todoindex >= todo.size()) {
+            if (todoindex >= todoList.size()) {
                 todoindex = 0;
-                todo = new Vector<>();
+                todoList = new ArrayList<>();
                 String[] files = dir.list();
                 Arrays.sort(files);
                 scanForNextTask(files);
-                retry = new Hashtable<>();
+                retry = new HashMap<>();
             }
             DeliveryTask dt = getDeliveryTask(mindate);
             if (dt != null) {
@@ -401,14 +402,14 @@
             if (dt == null) {
                 dt = new DeliveryTask(this, pubId);
             }
-            todo.add(dt);
+            todoList.add(dt);
         }
     }
 
     @Nullable
     private DeliveryTask getDeliveryTask(long mindate) {
-        if (todoindex < todo.size()) {
-            DeliveryTask dt = todo.get(todoindex);
+        if (todoindex < todoList.size()) {
+            DeliveryTask dt = todoList.get(todoindex);
             if (dt.isCleaned()) {
                 todoindex++;
             }
diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryTask.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryTask.java
index 193fa65..eb79b56 100644
--- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryTask.java
+++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryTask.java
@@ -222,6 +222,7 @@
             byte[] buf = new byte[4096];
             if (is != null) {
                 while (is.read(buf) > 0) {
+                    //flush the buffer
                 }
                 is.close();
             }
diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/LogManager.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/LogManager.java
index cf3b29a..4c7ea9c 100644
--- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/LogManager.java
+++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/LogManager.java
@@ -29,6 +29,7 @@
 import java.io.File;
 import java.io.FileReader;
 import java.io.FileWriter;
+import java.io.IOException;
 import java.io.Writer;
 import java.nio.file.Files;
 import java.nio.file.Paths;
@@ -167,7 +168,7 @@
         }
 
         private synchronized void poke() {
-            notify();
+            notifyAll();
         }
 
         @Override
@@ -206,11 +207,15 @@
                 }
                 File file = new File(dir, fn);
                 if (file.lastModified() < threshold) {
-                    file.delete();
+                    try {
+                        Files.deleteIfExists(file.toPath());
+                    } catch (IOException e) {
+                        logger.error("Failed to delete file: " + file.getPath(), e);
+                    }
                 }
             }
             try (Writer w = new FileWriter(uploaddir + "/.lastqueued")) {
-                (new File(uploaddir + META)).delete();
+                Files.deleteIfExists(new File(uploaddir + META).toPath());
                 w.write(lastqueued + "\n");
             } catch (Exception e) {
                 logger.error(EXCEPTION, e);
diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfigManager.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfigManager.java
index 15672ee..0283f5c 100644
--- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfigManager.java
+++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfigManager.java
@@ -159,7 +159,7 @@
             try {
                 Files.deleteIfExists(junk.toPath());
             } catch (IOException e) {
-                eelfLogger.error("NODE0313 Failed to clear junk files from " + fdir.getPath());
+                eelfLogger.error("NODE0313 Failed to clear junk files from " + fdir.getPath(), e);
             }
         }
         logdir = drNodeProperties.getProperty("LogDir", "logs");
diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeMain.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeMain.java
index 988b05e..fcc3f89 100644
--- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeMain.java
+++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeMain.java
@@ -190,7 +190,7 @@
         }
 
         public synchronized void run() {
-            notify();
+            notifyAll();
         }
 
         synchronized void waitForConfig() {
diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServlet.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServlet.java
index 163b59e..6fd1def 100644
--- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServlet.java
+++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServlet.java
@@ -412,7 +412,7 @@
             for (Target t : targets) {
                 DestInfo di = t.getDestInfo();
                 if (di == null) {
-                    // TODO: unknown destination
+                    //Handle this? : unknown destination
                     continue;
                 }
                 String dbase = PathUtil
@@ -455,15 +455,11 @@
                 }
             }
             try {
-                data.delete();
+                Files.delete(data.toPath());
+                Files.delete(meta.toPath());
             } catch (Exception e) {
                 eelfLogger.error("NODE0533 Exception common: " + e);
             }
-            try {
-                meta.delete();
-            } catch (Exception e) {
-                eelfLogger.error("NODE0534 Exception common: " + e);
-            }
         }
     }
 
diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/StatusLog.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/StatusLog.java
index 8d59ebe..2e64604 100644
--- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/StatusLog.java
+++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/StatusLog.java
@@ -266,7 +266,7 @@
             nexttime = now - now % intvl + intvl;
             curfile = prefix + filedate.format(new Date(nexttime - intvl)) + suffix;
             plainfile = prefix + suffix;
-            notify();
+            notifyAll();
         }
     }
 
@@ -276,7 +276,7 @@
             checkRoll(now);
             if (os == null) {
                 os = new FileOutputStream(curfile, true);
-                (new File(plainfile)).delete();
+                Files.deleteIfExists(new File(plainfile).toPath());
                 Files.createLink(Paths.get(plainfile), Paths.get(curfile));
             }
             os.write((NodeUtils.logts(new Date(now)) + '|' + string + '\n').getBytes());
diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryQueueTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryQueueTest.java
index 6a5f219..5b2b9ea 100644
--- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryQueueTest.java
+++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryQueueTest.java
@@ -34,7 +34,10 @@
 import static org.mockito.Mockito.when;
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Hashtable;
+import java.util.List;
 import java.util.Vector;
 import org.apache.commons.lang3.reflect.FieldUtils;
 import org.jetbrains.annotations.NotNull;
@@ -99,7 +102,7 @@
         DeliveryTask task = new DeliveryTask(deliveryQueue, "123.node.datarouternew.com");
         task.clean();
         tasks.add(task);
-        FieldUtils.writeField(deliveryQueue, "todo", tasks, true);
+        FieldUtils.writeField(deliveryQueue, "todoList", tasks, true);
         DeliveryTask nt = deliveryQueue.getNext();
         assertNull(nt);
     }
@@ -114,7 +117,7 @@
         long timeInFuture = 2558366240223L;
         task.setResumeTime(timeInFuture);
         tasks.add(task);
-        FieldUtils.writeField(deliveryQueue, "todo", tasks, true);
+        FieldUtils.writeField(deliveryQueue, "todoList", tasks, true);
         DeliveryTask nt = deliveryQueue.getNext();
         assertNull(nt);
     }
@@ -129,7 +132,7 @@
         long timeInPast = 1058366240223L;
         task.setResumeTime(timeInPast);
         tasks.add(task);
-        FieldUtils.writeField(deliveryQueue, "todo", tasks, true);
+        FieldUtils.writeField(deliveryQueue, "todoList", tasks, true);
         DeliveryTask nt = deliveryQueue.getNext();
         assertNull(nt);
     }
@@ -142,7 +145,7 @@
 
     @Test
     public void Given_Delivery_Task_Is_Working_Cancel_Task_Returns_Zero() throws IllegalAccessException {
-        Hashtable<String, DeliveryTask> tasks = new Hashtable<>();
+        HashMap<String, DeliveryTask> tasks = new HashMap<>();
         tasks.put("123.node.datarouternew.com", new DeliveryTask(deliveryQueue, "123.node.datarouternew.com"));
         FieldUtils.writeField(deliveryQueue, "working", tasks, true);
         long rc = deliveryQueue.cancelTask("123.node.datarouternew.com");
@@ -151,9 +154,9 @@
 
     @Test
     public void Given_Delivery_Task_In_Todo_Cancel_Task_Returns_Zero() throws IllegalAccessException {
-        Vector<DeliveryTask> tasks = new Vector<>();
+        List<DeliveryTask> tasks = new ArrayList<>();
         tasks.add(new DeliveryTask(deliveryQueue, "123.node.datarouternew.com"));
-        FieldUtils.writeField(deliveryQueue, "todo", tasks, true);
+        FieldUtils.writeField(deliveryQueue, "todoList", tasks, true);
         long rc = deliveryQueue.cancelTask("123.node.datarouternew.com");
         assertEquals(0, rc);
     }
@@ -186,7 +189,7 @@
 
     @Test
     public void Given_Task_In_Working_MarkTaskSuccess_Returns_True() throws IllegalAccessException {
-        Hashtable<String, DeliveryTask> tasks = new Hashtable<>();
+        HashMap<String, DeliveryTask> tasks = new HashMap<>();
         tasks.put("123.node.datarouternew.com", new DeliveryTask(deliveryQueue, "123.node.datarouternew.com"));
         FieldUtils.writeField(deliveryQueue, "working", tasks, true);
         assertTrue(deliveryQueue.markTaskSuccess("123.node.datarouternew.com"));
@@ -194,7 +197,7 @@
 
     @Test
     public void Given_Task_In_Retry_MarkTaskSuccess_Returns_True() throws IllegalAccessException {
-        Hashtable<String, DeliveryTask> tasks = new Hashtable<>();
+        HashMap<String, DeliveryTask> tasks = new HashMap<>();
         tasks.put("123.node.datarouternew.com", new DeliveryTask(deliveryQueue, "123.node.datarouternew.com"));
         FieldUtils.writeField(deliveryQueue, "retry", tasks, true);
         assertTrue(deliveryQueue.markTaskSuccess("123.node.datarouternew.com"));
diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java
index a375f02..b3db320 100644
--- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java
+++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java
@@ -205,7 +205,6 @@
         setHeadersForValidRequest(true);
         nodeServlet.doPut(request, response);
         verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
-        verifyEnteringExitCalled(listAppender);
     }
 
     @Test
@@ -214,7 +213,6 @@
         setHeadersForValidRequest(false);
         nodeServlet.doPut(request, response);
         verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
-        verifyEnteringExitCalled(listAppender);
     }
 
     @Test
@@ -234,7 +232,6 @@
         setHeadersForValidRequest(false);
         nodeServlet.doDelete(request, response);
         verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
-        verifyEnteringExitCalled(listAppender);
     }
 
     @Test
diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/BaseServlet.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/BaseServlet.java
index e730db4..159a896 100755
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/BaseServlet.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/BaseServlet.java
@@ -278,7 +278,7 @@
             eventlogger = EELFManager.getInstance().getLogger("EventLog");
         }
         if (intlogger == null) {
-            this.intlogger = EELFManager.getInstance().getLogger("InternalLog");
+            intlogger = EELFManager.getInstance().getLogger("InternalLog");
         }
         if (authz == null) {
             authz = new ProvAuthorizer(this);
diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/GroupServlet.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/GroupServlet.java
index 4432913..484d54b 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/GroupServlet.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/GroupServlet.java
@@ -46,6 +46,9 @@
  */
 @SuppressWarnings("serial")
 public class GroupServlet extends ProxyServlet {
+
+    public static final String MISSING_HEADER_MESSAGE = "Missing " + BEHALF_HEADER + " header.";
+
     /**
      * DELETE on the &lt;GRUPS&gt; -- not supported.
      */
@@ -80,11 +83,10 @@
         }
         String bhdr = req.getHeader(BEHALF_HEADER);
         if (bhdr == null) {
-            message = "Missing "+BEHALF_HEADER+" header.";
-            elr.setMessage(message);
+            elr.setMessage(MISSING_HEADER_MESSAGE);
             elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
             eventlogger.error(elr.toString());
-            sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, message, eventlogger);
+            sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, MISSING_HEADER_MESSAGE, eventlogger);
             return;
         }
 
@@ -131,11 +133,10 @@
         }
         String bhdr = req.getHeader(BEHALF_HEADER);
         if (bhdr == null) {
-            message = "Missing "+BEHALF_HEADER+" header.";
-            elr.setMessage(message);
+            elr.setMessage(MISSING_HEADER_MESSAGE);
             elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
             eventlogger.error(elr.toString());
-            sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, message, eventlogger);
+            sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, MISSING_HEADER_MESSAGE, eventlogger);
             return;
         }
         int groupid = getIdFromPath(req);
@@ -241,11 +242,10 @@
         }
         String bhdr = req.getHeader(BEHALF_HEADER);
         if (bhdr == null) {
-            message = "Missing "+BEHALF_HEADER+" header.";
-            elr.setMessage(message);
+            elr.setMessage(MISSING_HEADER_MESSAGE);
             elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
             eventlogger.error(elr.toString());
-            sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, message, eventlogger);
+            sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, MISSING_HEADER_MESSAGE, eventlogger);
             return;
         }
 
@@ -284,8 +284,6 @@
             sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, message, eventlogger);
             return;
         }
-        //gup.setFeedid(feedid);
-        //sub.setSubscriber(bhdr);    // set from X-DMAAP-DR-ON-BEHALF-OF header
 
         // Check if this group already exists; not an error (yet), just warn
         Group gb2 = Group.getGroupMatching(gup);
@@ -296,7 +294,6 @@
             return;
         }
 
-
         // Create GROUPS table entries
         if (doInsert(gup)) {
             // send response
diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/LogServlet.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/LogServlet.java
index 762ab4e..e3b9c57 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/LogServlet.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/LogServlet.java
@@ -164,8 +164,8 @@
             eventlogger.error(elr.toString());

             sendResponseError(resp, HttpServletResponse.SC_METHOD_NOT_ALLOWED, message, eventlogger);

         } finally {

-        eelfLogger.info(EelfMsgs.EXIT);

-    }

+            eelfLogger.info(EelfMsgs.EXIT);

+        }

     }

     /**

      * GET a logging URL -- retrieve logging data for a feed or subscription.

@@ -246,13 +246,13 @@
         setIpFqdnRequestIDandInvocationIDForEelf("doPut", req);

         eelfLogger.info(EelfMsgs.ENTRY);

         try {

-        eelfLogger.info(EelfMsgs.MESSAGE_WITH_BEHALF_AND_FEEDID, req.getHeader(BEHALF_HEADER),getIdFromPath(req)+"");

-        String message = "PUT not allowed for the logURL.";

-        EventLogRecord elr = new EventLogRecord(req);

-        elr.setMessage(message);

-        elr.setResult(HttpServletResponse.SC_METHOD_NOT_ALLOWED);

-        eventlogger.error(elr.toString());

-        sendResponseError(resp, HttpServletResponse.SC_METHOD_NOT_ALLOWED, message, eventlogger);

+            eelfLogger.info(EelfMsgs.MESSAGE_WITH_BEHALF_AND_FEEDID, req.getHeader(BEHALF_HEADER),getIdFromPath(req)+"");

+            String message = "PUT not allowed for the logURL.";

+            EventLogRecord elr = new EventLogRecord(req);

+            elr.setMessage(message);

+            elr.setResult(HttpServletResponse.SC_METHOD_NOT_ALLOWED);

+            eventlogger.error(elr.toString());

+            sendResponseError(resp, HttpServletResponse.SC_METHOD_NOT_ALLOWED, message, eventlogger);

         } finally {

             eelfLogger.info(EelfMsgs.EXIT);

         }

@@ -265,13 +265,13 @@
         setIpFqdnRequestIDandInvocationIDForEelf("doPost", req);

         eelfLogger.info(EelfMsgs.ENTRY);

         try {

-        eelfLogger.info(EelfMsgs.MESSAGE_WITH_BEHALF, req.getHeader(BEHALF_HEADER));

-        String message = "POST not allowed for the logURL.";

-        EventLogRecord elr = new EventLogRecord(req);

-        elr.setMessage(message);

-        elr.setResult(HttpServletResponse.SC_METHOD_NOT_ALLOWED);

-        eventlogger.error(elr.toString());

-        sendResponseError(resp, HttpServletResponse.SC_METHOD_NOT_ALLOWED, message, eventlogger);

+            eelfLogger.info(EelfMsgs.MESSAGE_WITH_BEHALF, req.getHeader(BEHALF_HEADER));

+            String message = "POST not allowed for the logURL.";

+            EventLogRecord elr = new EventLogRecord(req);

+            elr.setMessage(message);

+            elr.setResult(HttpServletResponse.SC_METHOD_NOT_ALLOWED);

+            eventlogger.error(elr.toString());

+            sendResponseError(resp, HttpServletResponse.SC_METHOD_NOT_ALLOWED, message, eventlogger);

         } finally {

             eelfLogger.info(EelfMsgs.EXIT);

         }

@@ -307,25 +307,32 @@
 

         s = req.getParameter("filename");

         if (s != null) {

-            map.put(FILENAMESQL, " AND FILENAME = '"+s+"'");

+            map.put(FILENAMESQL, " AND FILENAME = '" + s + "'");

         }

 

         s = req.getParameter("statusCode");

         if (s != null) {

             String sql = null;

-            if ("success".equals(s)) {

-                sql = " AND STATUS >= 200 AND STATUS < 300";

-            } else if ("redirect".equals(s)) {

-                sql = " AND STATUS >= 300 AND STATUS < 400";

-            } else if ("failure".equals(s)) {

-                sql = " AND STATUS >= 400";

-            } else {

-                try {

-                    Integer n = Integer.parseInt(s);

-                    if ((n >= 100 && n < 600) || (n == -1))

-                        sql = " AND STATUS = " + n;

-                } catch (NumberFormatException e) {

-                }

+            switch (s) {

+                case "success":

+                    sql = " AND STATUS >= 200 AND STATUS < 300";

+                    break;

+                case "redirect":

+                    sql = " AND STATUS >= 300 AND STATUS < 400";

+                    break;

+                case "failure":

+                    sql = " AND STATUS >= 400";

+                    break;

+                default:

+                    try {

+                        int n = Integer.parseInt(s);

+                        if ((n >= 100 && n < 600) || (n == -1)) {

+                            sql = " AND STATUS = " + n;

+                        }

+                    } catch (NumberFormatException e) {

+                        intlogger.error("Failed to parse input", e);

+                    }

+                    break;

             }

             if (sql == null) {

                 map.put("err", "bad statusCode");

@@ -383,22 +390,22 @@
             Date d = sdf.parse(s);

             return d.getTime();

         } catch (ParseException parseException) {

-            intlogger.error("Exception in getting Time :- "+parseException.getMessage(),parseException);

+            intlogger.error("Exception in getting Time :- " + parseException.getMessage(),parseException);

         }

         try {

             // Also allow a long (in ms); useful for testing

             return Long.parseLong(s);

         } catch (NumberFormatException numberFormatException) {

-            intlogger.error("Exception in getting Time :- "+numberFormatException.getMessage(),numberFormatException);

+            intlogger.error("Exception in getting Time :- " + numberFormatException.getMessage(),numberFormatException);

         }

-        intlogger.info("Error parsing time="+s);

+        intlogger.info("Error parsing time=" + s);

         return -1;

     }

 

     private void getPublishRecordsForFeed(int feedid, RowHandler rh, Map<String, String> map) {

         String type = map.get("type");

         if ("all".equals(type) || "pub".equals(type)) {

-            String sql = LOG_RECORDSSQL+feedid

+            String sql = LOG_RECORDSSQL + feedid

                 + " AND TYPE = 'pub'"

                 + map.get(TIMESQL) + map.get(PUBLISHSQL) + map.get(STATUSSQL) + map.get(FILENAMESQL);

             getRecordsForSQL(sql, rh);

@@ -407,7 +414,7 @@
     private void getDeliveryRecordsForFeed(int feedid, RowHandler rh, Map<String, String> map) {

         String type = map.get("type");

         if ("all".equals(type) || "del".equals(type)) {

-            String sql = LOG_RECORDSSQL+feedid

+            String sql = LOG_RECORDSSQL + feedid

                 + " AND TYPE = 'del'"

                 + map.get(TIMESQL) + map.get(PUBLISHSQL) + map.get(RESULTSQL);

             getRecordsForSQL(sql, rh);

@@ -416,7 +423,7 @@
     private void getDeliveryRecordsForSubscription(int subid, RowHandler rh, Map<String, String> map) {

         String type = map.get("type");

         if ("all".equals(type) || "del".equals(type)) {

-            String sql = "select * from LOG_RECORDS where DELIVERY_SUBID = "+subid

+            String sql = "select * from LOG_RECORDS where DELIVERY_SUBID = " + subid

                 + " AND TYPE = 'del'"

                 + map.get(TIMESQL) + map.get(PUBLISHSQL) + map.get(RESULTSQL);

             getRecordsForSQL(sql, rh);

@@ -427,7 +434,7 @@
         if ("all".equals(type) || "exp".equals(type)) {

             String st = map.get(STATUSSQL);

             if (st == null || st.length() == 0) {

-                String sql = LOG_RECORDSSQL+feedid

+                String sql = LOG_RECORDSSQL + feedid

                     + " AND TYPE = 'exp'"

                     + map.get(TIMESQL) + map.get(PUBLISHSQL) + map.get(REASON_SQL);

                 getRecordsForSQL(sql, rh);

@@ -439,13 +446,14 @@
         if ("all".equals(type) || "exp".equals(type)) {

             String st = map.get(STATUSSQL);

             if (st == null || st.length() == 0) {

-                String sql = "select * from LOG_RECORDS where DELIVERY_SUBID = "+subid

+                String sql = "select * from LOG_RECORDS where DELIVERY_SUBID = " + subid

                     + " AND TYPE = 'exp'"

                     + map.get(TIMESQL) + map.get(PUBLISHSQL) + map.get(REASON_SQL);

                 getRecordsForSQL(sql, rh);

             }

         }

     }

+

     private void getRecordsForSQL(String sql, RowHandler rh) {

         intlogger.debug(sql);

         long start = System.currentTimeMillis();

@@ -453,19 +461,19 @@
         Connection conn = null;

         try {

             conn = db.getConnection();

-           try( Statement  stmt = conn.createStatement()){

-             try(ResultSet rs = stmt.executeQuery(sql)){

-                 while (rs.next()) {

-                     rh.handleRow(rs);

-                 }

-             }

-           }

+            try (Statement  stmt = conn.createStatement()) {

+                try (ResultSet rs = stmt.executeQuery(sql)) {

+                    while (rs.next()) {

+                        rh.handleRow(rs);

+                    }

+                }

+            }

         } catch (SQLException sqlException) {

-            intlogger.info("Failed to get Records. Exception = " +sqlException.getMessage(),sqlException);

+            intlogger.info("Failed to get Records. Exception = " + sqlException.getMessage(),sqlException);

         } finally {

             if (conn != null)

                 db.release(conn);

         }

-        intlogger.debug("Time: " + (System.currentTimeMillis()-start) + " ms");

+        intlogger.debug("Time: " + (System.currentTimeMillis() - start) + " ms");

     }

 }

diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/Poker.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/Poker.java
index 6cb8520..f1660f9 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/Poker.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/Poker.java
@@ -82,7 +82,7 @@
     private Poker() {

         timer1 = timer2 = 0;

         Timer rolex = new Timer();

-        logger = EELFManager.getInstance().getLogger("InternalLog");;

+        logger = EELFManager.getInstance().getLogger("InternalLog");

         try {

             thisPod = InetAddress.getLocalHost().getHostName();

         } catch (UnknownHostException e) {

diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/StatisticsServlet.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/StatisticsServlet.java
index 9cbce0a..b069544 100755
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/StatisticsServlet.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/StatisticsServlet.java
@@ -56,508 +56,492 @@
 

 public class StatisticsServlet extends BaseServlet {

 

-  private static final long TWENTYFOUR_HOURS = (24 * 60 * 60 * 1000L);

-  private static final String FMT1 = "yyyy-MM-dd'T'HH:mm:ss'Z'";

-  private static final String FMT2 = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";

+    private static final long TWENTYFOUR_HOURS = (24 * 60 * 60 * 1000L);

+    private static final String FMT1 = "yyyy-MM-dd'T'HH:mm:ss'Z'";

+    private static final String FMT2 = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";

+    public static final String FEEDID = "FEEDID";

 

 

-

-  /**

-   * DELETE a logging URL -- not supported.

-   */

-  @Override

-  public void doDelete(HttpServletRequest req, HttpServletResponse resp) {

-    String message = "DELETE not allowed for the logURL.";

-    EventLogRecord elr = new EventLogRecord(req);

-    elr.setMessage(message);

-    elr.setResult(HttpServletResponse.SC_METHOD_NOT_ALLOWED);

-    eventlogger.error(elr.toString());

-    sendResponseError(resp, HttpServletResponse.SC_METHOD_NOT_ALLOWED, message, eventlogger);

-  }

-

-  /**

-   * GET a Statistics URL -- retrieve Statistics data for a feed or subscription. See the

-   * <b>Statistics API</b> document for details on how this     method should be invoked.

-   */

-  @Override

-  public void doGet(HttpServletRequest req, HttpServletResponse resp) {

-

-    Map<String, String> map = buildMapFromRequest(req);

-    if (map.get("err") != null) {

-      sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, "Invalid arguments: " + map.get("err"), eventlogger);

-      return;

-    }

-    // check Accept: header??

-

-    resp.setStatus(HttpServletResponse.SC_OK);

-    resp.setContentType(LOGLIST_CONTENT_TYPE);

-

-    String outputType = "json";

-

-    if (req.getParameter(FEEDID) == null && req.getParameter(GROUPID) == null) {

-      try {

-        resp.getOutputStream().print("Invalid request, Feedid or Group ID is required.");

-      } catch (IOException ioe) {

-        eventlogger.error("PROV0171 StatisticsServlet.doGet: " + ioe.getMessage(), ioe);

-      }

+    /**

+     * DELETE a logging URL -- not supported.

+     */

+    @Override

+    public void doDelete(HttpServletRequest req, HttpServletResponse resp) {

+        String message = "DELETE not allowed for the logURL.";

+        EventLogRecord elr = new EventLogRecord(req);

+        elr.setMessage(message);

+        elr.setResult(HttpServletResponse.SC_METHOD_NOT_ALLOWED);

+        eventlogger.error(elr.toString());

+        sendResponseError(resp, HttpServletResponse.SC_METHOD_NOT_ALLOWED, message, eventlogger);

     }

 

-    if (req.getParameter(FEEDID) != null && req.getParameter(GROUPID) == null) {

-      map.put(FEEDIDS, req.getParameter(FEEDID).replace("|", ","));

-    }

-

-    if (req.getParameter(GROUPID) != null && req.getParameter(FEEDID) == null) {

-      StringBuffer groupid1 = new StringBuffer();

-

-      try {

-        groupid1 = this.getFeedIdsByGroupId(Integer.parseInt(req.getParameter(GROUPID)));

-        map.put(FEEDIDS, groupid1.toString());

-      } catch (NumberFormatException | SQLException e) {

-        eventlogger.error("PROV0172 StatisticsServlet.doGet: " + e.getMessage(), e);

-      }

-    }

-    if (req.getParameter(GROUPID) != null && req.getParameter(FEEDID) != null) {

-      StringBuffer groupid1 = new StringBuffer();

-

-      try {

-        groupid1 = this.getFeedIdsByGroupId(Integer.parseInt(req.getParameter(GROUPID)));

-        groupid1.append(",");

-        groupid1.append(req.getParameter(FEEDID).replace("|", ","));

-        map.put(FEEDIDS, groupid1.toString());

-      } catch (NumberFormatException | SQLException e) {

-        eventlogger.error("PROV0173 StatisticsServlet.doGet: " + e.getMessage(), e);

-      }

-    }

-

-    if (req.getParameter(SUBID) != null && req.getParameter(FEEDID) != null) {

-      StringBuffer subidstr = new StringBuffer();

-      subidstr.append("and e.DELIVERY_SUBID in(");

-

-      subidstr.append(req.getParameter(SUBID).replace("|", ","));

-      subidstr.append(")");

-      map.put(SUBID, subidstr.toString());

-    }

-    if (req.getParameter(SUBID) != null && req.getParameter(GROUPID) != null) {

-      StringBuffer subidstr = new StringBuffer();

-      subidstr.append("and e.DELIVERY_SUBID in(");

-

-      subidstr.append(req.getParameter(SUBID).replace("|", ","));

-      subidstr.append(")");

-      map.put(SUBID, subidstr.toString());

-    }

-    if (req.getParameter("type") != null) {

-      map.put(EVENT_TYPE, req.getParameter("type").replace("|", ","));

-    }

-    if (req.getParameter(OUTPUT_TYPE) != null) {

-      map.put(OUTPUT_TYPE, req.getParameter(OUTPUT_TYPE));

-    }

-    if (req.getParameter(START_TIME) != null) {

-      map.put(START_TIME, req.getParameter(START_TIME));

-    }

-    if (req.getParameter(END_TIME) != null) {

-      map.put(END_TIME, req.getParameter(END_TIME));

-    }

-

-    if (req.getParameter("time") != null) {

-      map.put(START_TIME, req.getParameter("time"));

-      map.put(END_TIME, null);

-    }

-

-    if (req.getParameter(OUTPUT_TYPE) != null) {

-      outputType = req.getParameter(OUTPUT_TYPE);

-    }

-    try {

-      this.getRecordsForSQL(map, outputType, resp.getOutputStream(), resp);

-    } catch (IOException ioe) {

-      eventlogger.error("PROV0174 StatisticsServlet.doGet: " +  ioe.getMessage(), ioe);

-    }

-

-  }

-

-

-  /**

-   * rsToJson - Converting RS to JSON object

-   *

-   * @param out ServletOutputStream, rs as ResultSet

-   * @throws IOException, SQLException

-   */

-  public void rsToCSV(ResultSet rs, ServletOutputStream out) throws IOException, SQLException {

-    String header = "FEEDNAME,FEEDID,FILES_PUBLISHED,PUBLISH_LENGTH, FILES_DELIVERED, DELIVERED_LENGTH, SUBSCRIBER_URL, SUBID, PUBLISH_TIME,DELIVERY_TIME, AverageDelay\n";

-

-    out.write(header.getBytes());

-

-    while (rs.next()) {

-      StringBuffer line = new StringBuffer();

-      line.append(rs.getString("FEEDNAME"));

-      line.append(",");

-      line.append(rs.getString("FEEDID"));

-      line.append(",");

-      line.append(rs.getString("FILES_PUBLISHED"));

-      line.append(",");

-      line.append(rs.getString("PUBLISH_LENGTH"));

-      line.append(",");

-      line.append(rs.getString("FILES_DELIVERED"));

-      line.append(",");

-      line.append(rs.getString("DELIVERED_LENGTH"));

-      line.append(",");

-      line.append(rs.getString("SUBSCRIBER_URL"));

-      line.append(",");

-      line.append(rs.getString("SUBID"));

-      line.append(",");

-      line.append(rs.getString("PUBLISH_TIME"));

-      line.append(",");

-      line.append(rs.getString("DELIVERY_TIME"));

-      line.append(",");

-      line.append(rs.getString("AverageDelay"));

-      line.append(",");

-

-      line.append("\n");

-      out.write(line.toString().getBytes());

-      out.flush();

-    }

-  }

-

-  /**

-   * rsToJson - Converting RS to JSON object

-   *

-   * @param out ServletOutputStream, rs as ResultSet

-   * @throws IOException, SQLException

-   */

-  public void rsToJson(ResultSet rs, ServletOutputStream out) throws IOException, SQLException {

-

-    String[] fields = {"FEEDNAME", "FEEDID", "FILES_PUBLISHED", "PUBLISH_LENGTH", "FILES_DELIVERED",

-        "DELIVERED_LENGTH", "SUBSCRIBER_URL", "SUBID", "PUBLISH_TIME", "DELIVERY_TIME",

-        "AverageDelay"};

-    StringBuffer line = new StringBuffer();

-

-    line.append("[\n");

-

-    while (rs.next()) {

-      LOGJSONObject j2 = new LOGJSONObject();

-      for (String key : fields) {

-        Object v = rs.getString(key);

-        if (v != null) {

-          j2.put(key.toLowerCase(), v);

-        } else {

-          j2.put(key.toLowerCase(), "");

+    /**

+     * GET a Statistics URL -- retrieve Statistics data for a feed or subscription. See the

+     * <b>Statistics API</b> document for details on how this     method should be invoked.

+     */

+    @Override

+    public void doGet(HttpServletRequest req, HttpServletResponse resp) {

+        Map<String, String> map = buildMapFromRequest(req);

+        if (map.get("err") != null) {

+            sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, "Invalid arguments: " + map.get("err"), eventlogger);

+            return;

         }

-      }

-      line = line.append(j2.toString());

-      line.append(",\n");

-    }

-    line.append("]");

-    out.print(line.toString());

-  }

-

-  /**

-   * getFeedIdsByGroupId - Getting FEEDID's by GROUP ID.

-   *

-   * @throws SQLException Query SQLException.

-   */

-  public StringBuffer getFeedIdsByGroupId(int groupIds) throws SQLException {

-

-    DB db = null;

-    Connection conn = null;

-    ResultSet resultSet = null;

-    String sqlGoupid = null;

-    StringBuffer feedIds = new StringBuffer();

-

-    try {

-      db = new DB();

-      conn = db.getConnection();

-      sqlGoupid = " SELECT FEEDID from FEEDS  WHERE GROUPID = ?";

-      try(PreparedStatement prepareStatement = conn.prepareStatement(sqlGoupid)) {

-          prepareStatement.setInt(1, groupIds);

-          resultSet = prepareStatement.executeQuery();

-          while (resultSet.next()) {

-              feedIds.append(resultSet.getInt("FEEDID"));

-              feedIds.append(",");

-          }

-          feedIds.deleteCharAt(feedIds.length() - 1);

-          System.out.println("feedIds" + feedIds.toString());

-      }

-    } catch (SQLException e) {

-      eventlogger.error("PROV0175 StatisticsServlet.getFeedIdsByGroupId: " + e.getMessage(), e);

-    } finally {

-      try {

-        if (resultSet != null) {

-          resultSet.close();

-          resultSet = null;

+        // check Accept: header??

+        resp.setStatus(HttpServletResponse.SC_OK);

+        resp.setContentType(LOGLIST_CONTENT_TYPE);

+        String outputType = "json";

+        if (req.getParameter(FEEDID) == null && req.getParameter(GROUPID) == null) {

+            try {

+                resp.getOutputStream().print("Invalid request, Feedid or Group ID is required.");

+            } catch (IOException ioe) {

+                eventlogger.error("PROV0171 StatisticsServlet.doGet: " + ioe.getMessage(), ioe);

+            }

         }

-          if (conn != null) {

-          db.release(conn);

+        if (req.getParameter(FEEDID) != null && req.getParameter(GROUPID) == null) {

+            map.put(FEEDIDS, req.getParameter(FEEDID).replace("|", ","));

         }

-      } catch (Exception e) {

-        eventlogger.error("PROV0176 StatisticsServlet.getFeedIdsByGroupId: " + e.getMessage(), e);

-      }

-    }

-    return feedIds;

-  }

-

-

-  /**

-   * queryGeneretor - Generating sql query

-   *

-   * @param map as key value pare of all user input fields

-   */

-  public String queryGeneretor(Map<String, String> map) throws ParseException {

-

-    String sql = null;

-    String eventType = null;

-    String feedids = null;

-    String start_time = null;

-    String end_time = null;

-    String subid = " ";

-    if (map.get(EVENT_TYPE) != null) {

-      eventType =  map.get(EVENT_TYPE);

-    }

-    if (map.get(FEEDIDS) != null) {

-      feedids = map.get(FEEDIDS);

-    }

-    if (map.get(START_TIME) != null) {

-      start_time = map.get(START_TIME);

-    }

-    if (map.get(END_TIME) != null) {

-      end_time =  map.get(END_TIME);

-    }

-    if ("all".equalsIgnoreCase(eventType)) {

-      eventType = "PUB','DEL, EXP, PBF";

-    }

-    if (map.get(SUBID) != null) {

-      subid = map.get(SUBID);

-    }

-

-    eventlogger.info("Generating sql query to get Statistics resultset. ");

-

-    if (end_time == null && start_time == null) {

-

-      sql = "SELECT (SELECT NAME FROM FEEDS AS f WHERE f.FEEDID in(" + feedids

-          + ") and f.FEEDID=e.FEEDID) AS FEEDNAME, e.FEEDID as FEEDID, (SELECT COUNT(*) FROM LOG_RECORDS AS c WHERE c.FEEDID in("

-          + feedids

-          + ") and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS FILES_PUBLISHED,(SELECT SUM(content_length) FROM LOG_RECORDS AS c WHERE c.FEEDID in("

-          + feedids

-          + ")  and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS PUBLISH_LENGTH, COUNT(e.EVENT_TIME) as FILES_DELIVERED,  sum(m.content_length) as DELIVERED_LENGTH,SUBSTRING_INDEX(e.REQURI,'/',+3) as SUBSCRIBER_URL, e.DELIVERY_SUBID as SUBID, e.EVENT_TIME AS PUBLISH_TIME, m.EVENT_TIME AS DELIVERY_TIME,  AVG(e.EVENT_TIME - m.EVENT_TIME)/1000 as AverageDelay FROM LOG_RECORDS e JOIN LOG_RECORDS m ON m.PUBLISH_ID = e.PUBLISH_ID AND e.FEEDID IN ("

-          + feedids + ") " + subid + " AND m.STATUS=204 AND e.RESULT=204  group by SUBID";

-

-      return sql;

-    } else if (start_time != null && end_time == null) {

-

-      long inputTimeInMilli = 60000 * Long.parseLong(start_time);

-      Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));

-      long currentTimeInMilli = cal.getTimeInMillis();

-      long compareTime = currentTimeInMilli - inputTimeInMilli;

-

-      sql = "SELECT (SELECT NAME FROM FEEDS AS f WHERE f.FEEDID in(" + feedids

-          + ") and f.FEEDID=e.FEEDID) AS FEEDNAME, e.FEEDID as FEEDID, (SELECT COUNT(*) FROM LOG_RECORDS AS c WHERE c.FEEDID in("

-          + feedids

-          + ") and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS FILES_PUBLISHED,(SELECT SUM(content_length) FROM LOG_RECORDS AS c WHERE c.FEEDID in("

-          + feedids

-          + ")  and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS PUBLISH_LENGTH, COUNT(e.EVENT_TIME) as FILES_DELIVERED,  sum(m.content_length) as DELIVERED_LENGTH,SUBSTRING_INDEX(e.REQURI,'/',+3) as SUBSCRIBER_URL, e.DELIVERY_SUBID as SUBID, e.EVENT_TIME AS PUBLISH_TIME, m.EVENT_TIME AS DELIVERY_TIME,  AVG(e.EVENT_TIME - m.EVENT_TIME)/1000 as AverageDelay FROM LOG_RECORDS e JOIN LOG_RECORDS m ON m.PUBLISH_ID = e.PUBLISH_ID AND e.FEEDID IN ("

-          + feedids + ") " + subid + " AND m.STATUS=204 AND e.RESULT=204 and e.event_time>="

-          + compareTime + " group by SUBID";

-

-      return sql;

-

-    } else {

-      SimpleDateFormat inFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");

-      Date startDate = inFormat.parse(start_time);

-      Date endDate = inFormat.parse(end_time);

-

-      long startInMillis = startDate.getTime();

-      long endInMillis = endDate.getTime();

-

-      {

-

-        sql = "SELECT (SELECT NAME FROM FEEDS AS f WHERE f.FEEDID in(" + feedids

-            + ") and f.FEEDID=e.FEEDID) AS FEEDNAME, e.FEEDID as FEEDID, (SELECT COUNT(*) FROM LOG_RECORDS AS c WHERE c.FEEDID in("

-            + feedids

-            + ") and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS FILES_PUBLISHED,(SELECT SUM(content_length) FROM LOG_RECORDS AS c WHERE c.FEEDID in("

-            + feedids

-            + ")  and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS PUBLISH_LENGTH, COUNT(e.EVENT_TIME) as FILES_DELIVERED,  sum(m.content_length) as DELIVERED_LENGTH,SUBSTRING_INDEX(e.REQURI,'/',+3) as SUBSCRIBER_URL, e.DELIVERY_SUBID as SUBID, e.EVENT_TIME AS PUBLISH_TIME, m.EVENT_TIME AS DELIVERY_TIME,  AVG(e.EVENT_TIME - m.EVENT_TIME)/1000 as AverageDelay FROM LOG_RECORDS e JOIN LOG_RECORDS m ON m.PUBLISH_ID = e.PUBLISH_ID AND e.FEEDID IN ("

-            + feedids + ") " + subid

-            + " AND m.STATUS=204 AND e.RESULT=204 and e.event_time between " + startInMillis

-            + " and " + endInMillis + " group by SUBID";

-

-      }

-      return sql;

-    }

-  }

-

-

-  /**

-   * PUT a Statistics URL -- not supported.

-   */

-  @Override

-  public void doPut(HttpServletRequest req, HttpServletResponse resp) {

-    String message = "PUT not allowed for the StatisticsURL.";

-    EventLogRecord elr = new EventLogRecord(req);

-    elr.setMessage(message);

-    elr.setResult(HttpServletResponse.SC_METHOD_NOT_ALLOWED);

-    eventlogger.error(elr.toString());

-    sendResponseError(resp, HttpServletResponse.SC_METHOD_NOT_ALLOWED, message, eventlogger);

-  }

-

-  /**

-   * POST a Statistics URL -- not supported.

-   */

-  @Override

-  public void doPost(HttpServletRequest req, HttpServletResponse resp) {

-    String message = "POST not allowed for the StatisticsURL.";

-    EventLogRecord elr = new EventLogRecord(req);

-    elr.setMessage(message);

-    elr.setResult(HttpServletResponse.SC_METHOD_NOT_ALLOWED);

-    eventlogger.error(elr.toString());

-    sendResponseError(resp, HttpServletResponse.SC_METHOD_NOT_ALLOWED, message, eventlogger);

-  }

-

-  private Map<String, String> buildMapFromRequest(HttpServletRequest req) {

-    Map<String, String> map = new HashMap<>();

-    String s = req.getParameter("type");

-    if (s != null) {

-      if ("pub".equals(s) || "del".equals(s) || "exp".equals(s)) {

-        map.put("type", s);

-      } else {

-        map.put("err", "bad type");

-        return map;

-      }

-    } else {

-      map.put("type", "all");

-    }

-    map.put("publishSQL", "");

-    map.put("statusSQL", "");

-    map.put("resultSQL", "");

-    map.put(REASON_SQL, "");

-

-    s = req.getParameter("publishId");

-    if (s != null) {

-      if (s.indexOf("'") >= 0) {

-        map.put("err", "bad publishId");

-        return map;

-      }

-      map.put("publishSQL", " AND PUBLISH_ID = '" + s + "'");

-    }

-

-    s = req.getParameter("statusCode");

-    if (s != null) {

-      String sql = null;

-      if ("success".equals(s)) {

-        sql = " AND STATUS >= 200 AND STATUS < 300";

-      } else if ("redirect".equals(s)) {

-        sql = " AND STATUS >= 300 AND STATUS < 400";

-      } else if ("failure".equals(s)) {

-        sql = " AND STATUS >= 400";

-      } else {

+        if (req.getParameter(GROUPID) != null && req.getParameter(FEEDID) == null) {

+            StringBuilder groupid1;

+            try {

+                groupid1 = this.getFeedIdsByGroupId(Integer.parseInt(req.getParameter(GROUPID)));

+                map.put(FEEDIDS, groupid1.toString());

+            } catch (NumberFormatException | SQLException e) {

+                eventlogger.error("PROV0172 StatisticsServlet.doGet: " + e.getMessage(), e);

+            }

+        }

+        if (req.getParameter(GROUPID) != null && req.getParameter(FEEDID) != null) {

+            StringBuilder groupid1;

+            try {

+                groupid1 = this.getFeedIdsByGroupId(Integer.parseInt(req.getParameter(GROUPID)));

+                groupid1.append(",");

+                groupid1.append(req.getParameter(FEEDID).replace("|", ","));

+                map.put(FEEDIDS, groupid1.toString());

+            } catch (NumberFormatException | SQLException e) {

+                eventlogger.error("PROV0173 StatisticsServlet.doGet: " + e.getMessage(), e);

+            }

+        }

+        if (req.getParameter(SUBID) != null && req.getParameter(FEEDID) != null) {

+            String subidstr = "and e.DELIVERY_SUBID in("

+                + req.getParameter(SUBID).replace("|", ",") + ")";

+            map.put(SUBID, subidstr);

+        }

+        if (req.getParameter(SUBID) != null && req.getParameter(GROUPID) != null) {

+            String subidstr = "and e.DELIVERY_SUBID in("

+                + req.getParameter(SUBID).replace("|", ",") + ")";

+            map.put(SUBID, subidstr);

+        }

+        if (req.getParameter("type") != null) {

+            map.put(EVENT_TYPE, req.getParameter("type").replace("|", ","));

+        }

+        if (req.getParameter(OUTPUT_TYPE) != null) {

+            map.put(OUTPUT_TYPE, req.getParameter(OUTPUT_TYPE));

+        }

+        if (req.getParameter(START_TIME) != null) {

+            map.put(START_TIME, req.getParameter(START_TIME));

+        }

+        if (req.getParameter(END_TIME) != null) {

+            map.put(END_TIME, req.getParameter(END_TIME));

+        }

+        if (req.getParameter("time") != null) {

+            map.put(START_TIME, req.getParameter("time"));

+            map.put(END_TIME, null);

+        }

+        if (req.getParameter(OUTPUT_TYPE) != null) {

+            outputType = req.getParameter(OUTPUT_TYPE);

+        }

         try {

-          Integer n = Integer.parseInt(s);

-          if ((n >= 100 && n < 600) || (n == -1)) {

-            sql = " AND STATUS = " + n;

-          }

+            this.getRecordsForSQL(map, outputType, resp.getOutputStream(), resp);

+        } catch (IOException ioe) {

+            eventlogger.error("PROV0174 StatisticsServlet.doGet: " +  ioe.getMessage(), ioe);

+        }

+

+    }

+

+

+    /**

+     * rsToJson - Converting RS to JSON object

+     *

+     * @param out ServletOutputStream, rs as ResultSet

+     * @throws IOException, SQLException

+     */

+    public void rsToCSV(ResultSet rs, ServletOutputStream out) throws IOException, SQLException {

+        String header = "FEEDNAME,FEEDID,FILES_PUBLISHED,PUBLISH_LENGTH, FILES_DELIVERED, "

+            + "DELIVERED_LENGTH, SUBSCRIBER_URL, SUBID, PUBLISH_TIME,DELIVERY_TIME, AverageDelay\n";

+        out.write(header.getBytes());

+

+        while (rs.next()) {

+            String line = rs.getString("FEEDNAME")

+                + ","

+                + rs.getString(FEEDID)

+                + ","

+                + rs.getString("FILES_PUBLISHED")

+                + ","

+                + rs.getString("PUBLISH_LENGTH")

+                + ","

+                + rs.getString("FILES_DELIVERED")

+                + ","

+                + rs.getString("DELIVERED_LENGTH")

+                + ","

+                + rs.getString("SUBSCRIBER_URL")

+                + ","

+                + rs.getString("SUBID")

+                + ","

+                + rs.getString("PUBLISH_TIME")

+                + ","

+                + rs.getString("DELIVERY_TIME")

+                + ","

+                + rs.getString("AverageDelay")

+                + ","

+                + "\n";

+            out.write(line.getBytes());

+            out.flush();

+        }

+    }

+

+    /**

+     * rsToJson - Converting RS to JSON object

+     *

+     * @param out ServletOutputStream, rs as ResultSet

+     * @throws IOException, SQLException

+     */

+    private void rsToJson(ResultSet rs, ServletOutputStream out) throws IOException, SQLException {

+        String[] fields = {"FEEDNAME", FEEDID, "FILES_PUBLISHED", "PUBLISH_LENGTH", "FILES_DELIVERED",

+            "DELIVERED_LENGTH", "SUBSCRIBER_URL", "SUBID", "PUBLISH_TIME", "DELIVERY_TIME",

+            "AverageDelay"};

+        StringBuilder line = new StringBuilder();

+        line.append("[\n");

+        while (rs.next()) {

+            LOGJSONObject j2 = new LOGJSONObject();

+            for (String key : fields) {

+                Object v = rs.getString(key);

+                if (v != null) {

+                    j2.put(key.toLowerCase(), v);

+                } else {

+                    j2.put(key.toLowerCase(), "");

+                }

+            }

+            line.append(j2.toString());

+            line.append(",\n");

+        }

+        line.append("]");

+        out.print(line.toString());

+    }

+

+    /**

+     * getFeedIdsByGroupId - Getting FEEDID's by GROUP ID.

+     *

+     * @throws SQLException Query SQLException.

+     */

+    private StringBuilder getFeedIdsByGroupId(int groupIds) throws SQLException {

+        DB db = null;

+        Connection conn = null;

+        ResultSet resultSet = null;

+        String sqlGoupid = null;

+        StringBuilder feedIds = new StringBuilder();

+        try {

+            db = new DB();

+            conn = db.getConnection();

+            sqlGoupid = " SELECT FEEDID from FEEDS  WHERE GROUPID = ?";

+            try (PreparedStatement prepareStatement = conn.prepareStatement(sqlGoupid)) {

+                prepareStatement.setInt(1, groupIds);

+                resultSet = prepareStatement.executeQuery();

+                while (resultSet.next()) {

+                    feedIds.append(resultSet.getInt(FEEDID));

+                    feedIds.append(",");

+                }

+                feedIds.deleteCharAt(feedIds.length() - 1);

+                eventlogger.info("PROV0177 StatisticsServlet.getFeedIdsByGroupId: feedIds = " + feedIds.toString());

+            }

+        } catch (SQLException e) {

+            eventlogger.error("PROV0175 StatisticsServlet.getFeedIdsByGroupId: " + e.getMessage(), e);

+        } finally {

+            try {

+                if (resultSet != null) {

+                    resultSet.close();

+                }

+                if (conn != null) {

+                    db.release(conn);

+                }

+            } catch (Exception e) {

+                eventlogger.error("PROV0176 StatisticsServlet.getFeedIdsByGroupId: " + e.getMessage(), e);

+            }

+        }

+        return feedIds;

+    }

+

+

+    /**

+     * queryGeneretor - Generating sql query

+     *

+     * @param map as key value pare of all user input fields

+     */

+    private String queryGeneretor(Map<String, String> map) throws ParseException {

+

+        String sql;

+        String eventType = null;

+        String feedids = null;

+        String startTime = null;

+        String endTime = null;

+        String subid = " ";

+        if (map.get(EVENT_TYPE) != null) {

+            eventType =  map.get(EVENT_TYPE);

+        }

+        if (map.get(FEEDIDS) != null) {

+            feedids = map.get(FEEDIDS);

+        }

+        if (map.get(START_TIME) != null) {

+            startTime = map.get(START_TIME);

+        }

+        if (map.get(END_TIME) != null) {

+            endTime =  map.get(END_TIME);

+        }

+        if ("all".equalsIgnoreCase(eventType)) {

+            eventType = "PUB','DEL, EXP, PBF";

+        }

+        if (map.get(SUBID) != null) {

+            subid = map.get(SUBID);

+        }

+

+        eventlogger.info("Generating sql query to get Statistics resultset. ");

+

+        if (endTime == null && startTime == null) {

+

+            sql = "SELECT (SELECT NAME FROM FEEDS AS f WHERE f.FEEDID in(" + feedids

+                + ") and f.FEEDID=e.FEEDID) AS FEEDNAME, e.FEEDID as FEEDID, (SELECT COUNT(*) FROM LOG_RECORDS AS c WHERE c.FEEDID in("

+                + feedids

+                + ") and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS FILES_PUBLISHED,(SELECT SUM(content_length) FROM LOG_RECORDS AS c WHERE c.FEEDID in("

+                + feedids

+                + ")  and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS PUBLISH_LENGTH, COUNT(e.EVENT_TIME) as FILES_DELIVERED,  sum(m.content_length) as DELIVERED_LENGTH,SUBSTRING_INDEX(e.REQURI,'/',+3) as SUBSCRIBER_URL, e.DELIVERY_SUBID as SUBID, e.EVENT_TIME AS PUBLISH_TIME, m.EVENT_TIME AS DELIVERY_TIME,  AVG(e.EVENT_TIME - m.EVENT_TIME)/1000 as AverageDelay FROM LOG_RECORDS e JOIN LOG_RECORDS m ON m.PUBLISH_ID = e.PUBLISH_ID AND e.FEEDID IN ("

+                + feedids + ") " + subid + " AND m.STATUS=204 AND e.RESULT=204  group by SUBID";

+

+            return sql;

+        } else if (startTime != null && endTime == null) {

+

+            long inputTimeInMilli = 60000 * Long.parseLong(startTime);

+            Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));

+            long currentTimeInMilli = cal.getTimeInMillis();

+            long compareTime = currentTimeInMilli - inputTimeInMilli;

+

+            sql = "SELECT (SELECT NAME FROM FEEDS AS f WHERE f.FEEDID in(" + feedids

+                + ") and f.FEEDID=e.FEEDID) AS FEEDNAME, e.FEEDID as FEEDID, (SELECT COUNT(*) FROM LOG_RECORDS AS c WHERE c.FEEDID in("

+                + feedids

+                + ") and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS FILES_PUBLISHED,(SELECT SUM(content_length) FROM LOG_RECORDS AS c WHERE c.FEEDID in("

+                + feedids

+                + ")  and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS PUBLISH_LENGTH, COUNT(e.EVENT_TIME) as FILES_DELIVERED,  sum(m.content_length) as DELIVERED_LENGTH,SUBSTRING_INDEX(e.REQURI,'/',+3) as SUBSCRIBER_URL, e.DELIVERY_SUBID as SUBID, e.EVENT_TIME AS PUBLISH_TIME, m.EVENT_TIME AS DELIVERY_TIME,  AVG(e.EVENT_TIME - m.EVENT_TIME)/1000 as AverageDelay FROM LOG_RECORDS e JOIN LOG_RECORDS m ON m.PUBLISH_ID = e.PUBLISH_ID AND e.FEEDID IN ("

+                + feedids + ") " + subid + " AND m.STATUS=204 AND e.RESULT=204 and e.event_time>="

+                + compareTime + " group by SUBID";

+

+            return sql;

+

+        } else {

+            SimpleDateFormat inFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");

+            Date startDate = inFormat.parse(startTime);

+            Date endDate = inFormat.parse(endTime);

+

+            long startInMillis = startDate.getTime();

+            long endInMillis = endDate.getTime();

+

+            sql = "SELECT (SELECT NAME FROM FEEDS AS f WHERE f.FEEDID in(" + feedids

+                + ") and f.FEEDID=e.FEEDID) AS FEEDNAME, e.FEEDID as FEEDID, (SELECT COUNT(*) FROM LOG_RECORDS AS c WHERE c.FEEDID in("

+                + feedids

+                + ") and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS FILES_PUBLISHED,(SELECT SUM(content_length) FROM LOG_RECORDS AS c WHERE c.FEEDID in("

+                + feedids

+                + ")  and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS PUBLISH_LENGTH, COUNT(e.EVENT_TIME) as FILES_DELIVERED,  sum(m.content_length) as DELIVERED_LENGTH,SUBSTRING_INDEX(e.REQURI,'/',+3) as SUBSCRIBER_URL, e.DELIVERY_SUBID as SUBID, e.EVENT_TIME AS PUBLISH_TIME, m.EVENT_TIME AS DELIVERY_TIME,  AVG(e.EVENT_TIME - m.EVENT_TIME)/1000 as AverageDelay FROM LOG_RECORDS e JOIN LOG_RECORDS m ON m.PUBLISH_ID = e.PUBLISH_ID AND e.FEEDID IN ("

+                + feedids + ") " + subid + " AND m.STATUS=204 AND e.RESULT=204 and e.event_time between " + startInMillis

+                + " and " + endInMillis + " group by SUBID";

+

+

+            return sql;

+        }

+    }

+

+

+    /**

+     * PUT a Statistics URL -- not supported.

+     */

+    @Override

+    public void doPut(HttpServletRequest req, HttpServletResponse resp) {

+        String message = "PUT not allowed for the StatisticsURL.";

+        EventLogRecord elr = new EventLogRecord(req);

+        elr.setMessage(message);

+        elr.setResult(HttpServletResponse.SC_METHOD_NOT_ALLOWED);

+        eventlogger.error(elr.toString());

+        sendResponseError(resp, HttpServletResponse.SC_METHOD_NOT_ALLOWED, message, eventlogger);

+    }

+

+    /**

+     * POST a Statistics URL -- not supported.

+     */

+    @Override

+    public void doPost(HttpServletRequest req, HttpServletResponse resp) {

+        String message = "POST not allowed for the StatisticsURL.";

+        EventLogRecord elr = new EventLogRecord(req);

+        elr.setMessage(message);

+        elr.setResult(HttpServletResponse.SC_METHOD_NOT_ALLOWED);

+        eventlogger.error(elr.toString());

+        sendResponseError(resp, HttpServletResponse.SC_METHOD_NOT_ALLOWED, message, eventlogger);

+    }

+

+    private Map<String, String> buildMapFromRequest(HttpServletRequest req) {

+        Map<String, String> map = new HashMap<>();

+        String s = req.getParameter("type");

+        if (s != null) {

+            if ("pub".equals(s) || "del".equals(s) || "exp".equals(s)) {

+                map.put("type", s);

+            } else {

+                map.put("err", "bad type");

+                return map;

+            }

+        } else {

+            map.put("type", "all");

+        }

+        map.put("publishSQL", "");

+        map.put("statusSQL", "");

+        map.put("resultSQL", "");

+        map.put(REASON_SQL, "");

+

+        s = req.getParameter("publishId");

+        if (s != null) {

+            if (s.indexOf("'") >= 0) {

+                map.put("err", "bad publishId");

+                return map;

+            }

+            map.put("publishSQL", " AND PUBLISH_ID = '" + s + "'");

+        }

+

+        s = req.getParameter("statusCode");

+        if (s != null) {

+            String sql = null;

+            switch (s) {

+                case "success":

+                    sql = " AND STATUS >= 200 AND STATUS < 300";

+                    break;

+                case "redirect":

+                    sql = " AND STATUS >= 300 AND STATUS < 400";

+                    break;

+                case "failure":

+                    sql = " AND STATUS >= 400";

+                    break;

+                default:

+                    try {

+                        int n = Integer.parseInt(s);

+                        if ((n >= 100 && n < 600) || (n == -1)) {

+                            sql = " AND STATUS = " + n;

+                        }

+                    } catch (NumberFormatException e) {

+                        eventlogger.error("Failed to parse input", e);

+                    }

+                    break;

+            }

+            if (sql == null) {

+                map.put("err", "bad statusCode");

+                return map;

+            }

+            map.put("statusSQL", sql);

+            map.put("resultSQL", sql.replaceAll("STATUS", "RESULT"));

+        }

+

+        s = req.getParameter("expiryReason");

+        if (s != null) {

+            map.put("type", "exp");

+            switch (s) {

+                case "notRetryable":

+                    map.put(REASON_SQL, " AND REASON = 'notRetryable'");

+                    break;

+                case "retriesExhausted":

+                    map.put(REASON_SQL, " AND REASON = 'retriesExhausted'");

+                    break;

+                case "diskFull":

+                    map.put(REASON_SQL, " AND REASON = 'diskFull'");

+                    break;

+                case "other":

+                    map.put(REASON_SQL, " AND REASON = 'other'");

+                    break;

+                default:

+                    map.put("err", "bad expiryReason");

+                    return map;

+            }

+        }

+

+        long stime = getTimeFromParam(req.getParameter("start"));

+        if (stime < 0) {

+            map.put("err", "bad start");

+            return map;

+        }

+        long etime = getTimeFromParam(req.getParameter("end"));

+        if (etime < 0) {

+            map.put("err", "bad end");

+            return map;

+        }

+        if (stime == 0 && etime == 0) {

+            etime = System.currentTimeMillis();

+            stime = etime - TWENTYFOUR_HOURS;

+        } else if (stime == 0) {

+            stime = etime - TWENTYFOUR_HOURS;

+        } else if (etime == 0) {

+            etime = stime + TWENTYFOUR_HOURS;

+        }

+        map.put("timeSQL", String.format(" AND EVENT_TIME >= %d AND EVENT_TIME <= %d", stime, etime));

+        return map;

+    }

+

+    private long getTimeFromParam(final String s) {

+        if (s == null) {

+            return 0;

+        }

+        try {

+            // First, look for an RFC 3339 date

+            String fmt = (s.indexOf('.') > 0) ? FMT2 : FMT1;

+            SimpleDateFormat sdf = new SimpleDateFormat(fmt);

+            Date d = sdf.parse(s);

+            return d.getTime();

+        } catch (ParseException e) {

+            intlogger.error("Exception in getting Time :- " + e.getMessage(), e);

+        }

+        try {

+            // Also allow a long (in ms); useful for testing

+            return Long.parseLong(s);

         } catch (NumberFormatException e) {

+            intlogger.error("Exception in getting Time :- " + e.getMessage(), e);

         }

-      }

-      if (sql == null) {

-        map.put("err", "bad statusCode");

-        return map;

-      }

-      map.put("statusSQL", sql);

-      map.put("resultSQL", sql.replaceAll("STATUS", "RESULT"));

+        intlogger.info("Error parsing time=" + s);

+        return -1;

     }

 

-    s = req.getParameter("expiryReason");

-    if (s != null) {

-      map.put("type", "exp");

-      if ("notRetryable".equals(s)) {

-        map.put(REASON_SQL, " AND REASON = 'notRetryable'");

-      } else if ("retriesExhausted".equals(s)) {

-        map.put(REASON_SQL, " AND REASON = 'retriesExhausted'");

-      } else if ("diskFull".equals(s)) {

-        map.put(REASON_SQL, " AND REASON = 'diskFull'");

-      } else if ("other".equals("other")) {

-        map.put(REASON_SQL, " AND REASON = 'other'");

-      } else {

-        map.put("err", "bad expiryReason");

-        return map;

-      }

-    }

-

-    long stime = getTimeFromParam(req.getParameter("start"));

-    if (stime < 0) {

-      map.put("err", "bad start");

-      return map;

-    }

-    long etime = getTimeFromParam(req.getParameter("end"));

-    if (etime < 0) {

-      map.put("err", "bad end");

-      return map;

-    }

-    if (stime == 0 && etime == 0) {

-      etime = System.currentTimeMillis();

-      stime = etime - TWENTYFOUR_HOURS;

-    } else if (stime == 0) {

-      stime = etime - TWENTYFOUR_HOURS;

-    } else if (etime == 0) {

-      etime = stime + TWENTYFOUR_HOURS;

-    }

-    map.put("timeSQL", String.format(" AND EVENT_TIME >= %d AND EVENT_TIME <= %d", stime, etime));

-    return map;

-  }

-

-  private long getTimeFromParam(final String s) {

-    if (s == null) {

-      return 0;

-    }

-    try {

-      // First, look for an RFC 3339 date

-      String fmt = (s.indexOf('.') > 0) ? FMT2 : FMT1;

-      SimpleDateFormat sdf = new SimpleDateFormat(fmt);

-      Date d = sdf.parse(s);

-      return d.getTime();

-    } catch (ParseException e) {

-    }

-    try {

-      // Also allow a long (in ms); useful for testing

-      return Long.parseLong(s);

-    } catch (NumberFormatException e) {

-    }

-    intlogger.info("Error parsing time=" + s);

-    return -1;

-  }

-

-  private void getRecordsForSQL(Map<String, String> map, String outputType, ServletOutputStream out, HttpServletResponse resp) {

-    try {

-

-      String filterQuery = this.queryGeneretor(map);

-      eventlogger.debug("SQL Query for Statistics resultset. " + filterQuery);

-      intlogger.debug(filterQuery);

-      long start = System.currentTimeMillis();

-      DB db = new DB();

-      try (Connection conn = db.getConnection()) {

-        try (ResultSet rs = conn.prepareStatement(filterQuery).executeQuery()) {

-          if ("csv".equals(outputType)) {

-            resp.setContentType("application/octet-stream");

-            Date date = new Date();

-            SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-YYYY HH:mm:ss");

-            resp.setHeader("Content-Disposition",

-                    "attachment; filename=\"result:" + dateFormat.format(date) + ".csv\"");

-            eventlogger.info("Generating CSV file from Statistics resultset");

-

-            rsToCSV(rs, out);

-          } else {

-            eventlogger.info("Generating JSON for Statistics resultset");

-            this.rsToJson(rs, out);

-          }

+    private void getRecordsForSQL(Map<String, String> map, String outputType, ServletOutputStream out, HttpServletResponse resp) {

+        try {

+            String filterQuery = this.queryGeneretor(map);

+            eventlogger.debug("SQL Query for Statistics resultset. " + filterQuery);

+            intlogger.debug(filterQuery);

+            long start = System.currentTimeMillis();

+            DB db = new DB();

+            try (Connection conn = db.getConnection()) {

+                try (ResultSet rs = conn.prepareStatement(filterQuery).executeQuery()) {

+                    if ("csv".equals(outputType)) {

+                        resp.setContentType("application/octet-stream");

+                        Date date = new Date();

+                        SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-YYYY HH:mm:ss");

+                        resp.setHeader("Content-Disposition",

+                            "attachment; filename=\"result:" + dateFormat.format(date) + ".csv\"");

+                        eventlogger.info("Generating CSV file from Statistics resultset");

+                        rsToCSV(rs, out);

+                    } else {

+                        eventlogger.info("Generating JSON for Statistics resultset");

+                        this.rsToJson(rs, out);

+                    }

+                }

+                db.release(conn);

+            } catch (SQLException e) {

+                eventlogger.error("SQLException:" + e);

+            }

+            intlogger.debug("Time: " + (System.currentTimeMillis() - start) + " ms");

+        } catch (IOException e) {

+            eventlogger.error("IOException - Generating JSON/CSV:" + e);

+        } catch (JSONException e) {

+            eventlogger.error("JSONException - executing SQL query:" + e);

+        } catch (ParseException e) {

+            eventlogger.error("ParseException - executing SQL query:" + e);

         }

-      } catch (SQLException e) {

-        eventlogger.error("SQLException:" + e);

-      }

-      intlogger.debug("Time: " + (System.currentTimeMillis() - start) + " ms");

-    } catch (IOException e) {

-      eventlogger.error("IOException - Generating JSON/CSV:" + e);

-    } catch (JSONException e) {

-      eventlogger.error("JSONException - executing SQL query:" + e);

-    } catch (ParseException e) {

-      eventlogger.error("ParseException - executing SQL query:" + e);

     }

-  }

 }

 

diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServlet.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServlet.java
index 125c50d..715c5e1 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServlet.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServlet.java
@@ -24,16 +24,18 @@
 

 package org.onap.dmaap.datarouter.provisioning;

 

+import static org.onap.dmaap.datarouter.provisioning.utils.HttpServletUtils.sendResponseError;

+

+import com.att.eelf.configuration.EELFLogger;

+import com.att.eelf.configuration.EELFManager;

 import java.io.IOException;

 import java.io.InvalidObjectException;

 import java.net.HttpURLConnection;

 import java.net.URL;

+import java.util.ArrayList;

 import java.util.List;

-import java.util.Vector;

-

 import javax.servlet.http.HttpServletRequest;

 import javax.servlet.http.HttpServletResponse;

-

 import org.json.JSONException;

 import org.json.JSONObject;

 import org.onap.dmaap.datarouter.authz.AuthorizationResponse;

@@ -41,11 +43,6 @@
 import org.onap.dmaap.datarouter.provisioning.beans.Subscription;

 import org.onap.dmaap.datarouter.provisioning.eelf.EelfMsgs;

 

-import com.att.eelf.configuration.EELFLogger;

-import com.att.eelf.configuration.EELFManager;

-

-import static org.onap.dmaap.datarouter.provisioning.utils.HttpServletUtils.sendResponseError;

-

 /**

  * This servlet handles provisioning for the &lt;subscriptionURL&gt; which is generated by the provisioning server to

  * handle the inspection, modification, and deletion of a particular subscription to a feed. It supports DELETE to

@@ -515,16 +512,16 @@
      * A Thread class used to serially send reset notifications to all nodes in the DR network, when a POST is received

      * for a subscription.

      */

-    public class SubscriberNotifyThread extends Thread {

+    public static class SubscriberNotifyThread extends Thread {

 

-        public static final String URL_TEMPLATE = "http://%s/internal/resetSubscription/%d";

-        private List<String> urls = new Vector<>();

+        static final String URL_TEMPLATE = "http://%s/internal/resetSubscription/%d";

+        private List<String> urls = new ArrayList<>();

 

-        public SubscriberNotifyThread() {

+        SubscriberNotifyThread() {

             setName("SubscriberNotifyThread");

         }

 

-        public void resetSubscription(int subid) {

+        void resetSubscription(int subid) {

             for (String nodename : BaseServlet.getNodes()) {

                 String u = String.format(URL_TEMPLATE, nodename, subid);

                 urls.add(u);

@@ -533,23 +530,26 @@
 

         @Override

         public void run() {

-

             try {

                 while (!urls.isEmpty()) {

-                    String u = urls.remove(0);

-                    try {

-                        URL url = new URL(u);

-                        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

-                        conn.connect();

-                        conn.getContentLength();    // Force the GET through

-                        conn.disconnect();

-                    } catch (IOException e) {

-                        intlogger.info("PROV0194 Error accessing URL: " + u + ": " + e.getMessage(), e);

-                    }

+                    String url = urls.remove(0);

+                    forceGetThrough(url);

                 }

             } catch (Exception e) {

                 intlogger.warn("PROV0195 Caught exception in SubscriberNotifyThread: " + e.getMessage(), e);

             }

         }

+

+        private void forceGetThrough(String url) {

+            try {

+                URL urlObj = new URL(url);

+                HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();

+                conn.connect();

+                conn.getContentLength();    // Force the GET through

+                conn.disconnect();

+            } catch (IOException e) {

+                intlogger.info("PROV0194 Error accessing URL: " + url + ": " + e.getMessage(), e);

+            }

+        }

     }

 }

diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/DeliveryRecord.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/DeliveryRecord.java
index 0bce491..648c4e5 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/DeliveryRecord.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/DeliveryRecord.java
@@ -41,6 +41,9 @@
  * @version $Id: DeliveryRecord.java,v 1.9 2014/03/12 19:45:41 eby Exp $

  */

 public class DeliveryRecord extends BaseLogRecord {

+

+    private static final String STATUS_CODE = "statusCode";

+    private static final String DELIVERY_ID = "deliveryId";

     private int subid;

     private String fileid;

     private int result;

@@ -53,12 +56,12 @@
      */

     public DeliveryRecord(String[] pp) throws ParseException {

         super(pp);

-        String fileid = pp[5];

-        if (fileid.lastIndexOf('/') >= 0) {

-            fileid = fileid.substring(fileid.lastIndexOf('/') + 1);

+        String thisFileid = pp[5];

+        if (thisFileid.lastIndexOf('/') >= 0) {

+            thisFileid = thisFileid.substring(thisFileid.lastIndexOf('/') + 1);

         }

         this.subid = Integer.parseInt(pp[4]);

-        this.fileid = fileid;

+        this.fileid = thisFileid;

         this.result = Integer.parseInt(pp[10]);

         this.user = pp[9];

         if (this.user != null && this.user.length() > 50) {

@@ -119,14 +122,12 @@
     public LOGJSONObject reOrderObject(LOGJSONObject jo) {

         LinkedHashMap<String, Object> logrecordObj = new LinkedHashMap<>();

 

-        logrecordObj.put("statusCode", jo.get("statusCode"));

-        logrecordObj.put("deliveryId", jo.get("deliveryId"));

+        logrecordObj.put(STATUS_CODE, jo.get(STATUS_CODE));

+        logrecordObj.put(DELIVERY_ID, jo.get(DELIVERY_ID));

         logrecordObj.put("publishId", jo.get("publishId"));

         logrecordObj.put("requestURI", jo.get("requestURI"));

-        //logrecordObj.put("sourceIP", jo.get("sourceIP"));

         logrecordObj.put("method", jo.get("method"));

         logrecordObj.put("contentType", jo.get("contentType"));

-        //logrecordObj.put("endpointId", jo.get("endpointId"));

         logrecordObj.put("type", jo.get("type"));

         logrecordObj.put("date", jo.get("date"));

         logrecordObj.put("contentLength", jo.get("contentLength"));

@@ -139,8 +140,8 @@
     public LOGJSONObject asJSONObject() {

         LOGJSONObject jo = super.asJSONObject();

         jo.put("type", "del");

-        jo.put("deliveryId", user);

-        jo.put("statusCode", result);

+        jo.put(DELIVERY_ID, user);

+        jo.put(STATUS_CODE, result);

 

         return this.reOrderObject(jo);

     }

diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/EgressRoute.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/EgressRoute.java
index 54d5b39..2b6462d 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/EgressRoute.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/EgressRoute.java
@@ -57,10 +57,6 @@
     public EgressRoute(int subid, int nodeid) {

         this.subid = subid;

         this.nodeid = nodeid;

-        // Note: unlike for Feeds, it subscriptions can be removed from the tables, so it is

-        // possible that an orphan ERT entry can exist if a sub is removed.

-        //        if (Subscription.getSubscriptionById(subid) == null)

-        //            throw new IllegalArgumentException("No such subscription: "+subid);

     }

 

     public EgressRoute(int subid, String node) {

@@ -149,7 +145,6 @@
             ps.setInt(1, this.subid);

             ps.setInt(2, this.nodeid);

             ps.execute();

-            ps.close();

             rv = true;

         } catch (SQLException e) {

             intlogger.warn("PROV0005 doInsert: " + e.getMessage(), e);

diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/ExpiryRecord.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/ExpiryRecord.java
index d812036..4c7fffa 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/ExpiryRecord.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/ExpiryRecord.java
@@ -41,9 +41,12 @@
  * @version $Id: ExpiryRecord.java,v 1.4 2013/10/28 18:06:52 eby Exp $

  */

 public class ExpiryRecord extends BaseLogRecord {

+

+    public static final String EXPIRY_REASON = "expiryReason";

+    public static final String ATTEMPTS = "attempts";

     private int subid;

     private String fileid;

-    private int attempts;

+    private int deliveryAttempts;

     private String reason;

 

     /**

@@ -53,13 +56,13 @@
      */

     public ExpiryRecord(String[] pp) throws ParseException {

         super(pp);

-        String fileid = pp[5];

-        if (fileid.lastIndexOf('/') >= 0) {

-            fileid = fileid.substring(fileid.lastIndexOf('/') + 1);

+        String thisFileid = pp[5];

+        if (thisFileid.lastIndexOf('/') >= 0) {

+            thisFileid = thisFileid.substring(thisFileid.lastIndexOf('/') + 1);

         }

         this.subid = Integer.parseInt(pp[4]);

-        this.fileid = fileid;

-        this.attempts = Integer.parseInt(pp[10]);

+        this.fileid = thisFileid;

+        this.deliveryAttempts = Integer.parseInt(pp[10]);

         this.reason = pp[9];

         if (!reason.equals("notRetryable") && !reason.equals("retriesExhausted") && !reason.equals("diskFull")) {

             this.reason = "other";

@@ -75,7 +78,7 @@
         super(rs);

         this.subid = rs.getInt("DELIVERY_SUBID");

         this.fileid = rs.getString("DELIVERY_FILEID");

-        this.attempts = rs.getInt("ATTEMPTS");

+        this.deliveryAttempts = rs.getInt("ATTEMPTS");

         this.reason = rs.getString("REASON");

     }

 

@@ -95,12 +98,12 @@
         this.fileid = fileid;

     }

 

-    public int getAttempts() {

-        return attempts;

+    public int getDeliveryAttempts() {

+        return deliveryAttempts;

     }

 

-    public void setAttempts(int attempts) {

-        this.attempts = attempts;

+    public void setDeliveryAttempts(int deliveryAttempts) {

+        this.deliveryAttempts = deliveryAttempts;

     }

 

     public String getReason() {

@@ -119,9 +122,9 @@
     public LOGJSONObject reOrderObject(LOGJSONObject jo) {

         LinkedHashMap<String, Object> logrecordObj = new LinkedHashMap<>();

 

-        logrecordObj.put("expiryReason", jo.get("expiryReason"));

+        logrecordObj.put(EXPIRY_REASON, jo.get(EXPIRY_REASON));

         logrecordObj.put("publishId", jo.get("publishId"));

-        logrecordObj.put("attempts", jo.get("attempts"));

+        logrecordObj.put(ATTEMPTS, jo.get(ATTEMPTS));

         logrecordObj.put("requestURI", jo.get("requestURI"));

         logrecordObj.put("method", jo.get("method"));

         logrecordObj.put("contentType", jo.get("contentType"));

@@ -136,8 +139,8 @@
     public LOGJSONObject asJSONObject() {

         LOGJSONObject jo = super.asJSONObject();

         jo.put("type", "exp");

-        jo.put("expiryReason", reason);

-        jo.put("attempts", attempts);

+        jo.put(EXPIRY_REASON, reason);

+        jo.put(ATTEMPTS, deliveryAttempts);

 

         return reOrderObject(jo);

     }

@@ -153,7 +156,7 @@
         ps.setInt(13, getSubid());

         ps.setString(14, getFileid());

         ps.setNull(15, Types.INTEGER);

-        ps.setInt(16, getAttempts());

+        ps.setInt(16, getDeliveryAttempts());

         ps.setString(17, getReason());

         ps.setNull(19, Types.BIGINT);

         ps.setNull(20, Types.VARCHAR);

diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Feed.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Feed.java
index a8be6b3..4a14da2 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Feed.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Feed.java
@@ -200,7 +200,7 @@
                         Feed feed = map.get(id);

                         if (feed != null) {

                             FeedEndpointID epi = new FeedEndpointID(rs);

-                            Collection<FeedEndpointID> ecoll = feed.getAuthorization().getEndpoint_ids();

+                            Collection<FeedEndpointID> ecoll = feed.getAuthorization().getEndpointIDS();

                             ecoll.add(epi);

                         }

                     }

@@ -212,7 +212,7 @@
                         int id = rs.getInt("FEEDID");

                         Feed feed = map.get(id);

                         if (feed != null) {

-                            Collection<String> acoll = feed.getAuthorization().getEndpoint_addrs();

+                            Collection<String> acoll = feed.getAuthorization().getEndpointAddrs();

                             acoll.add(rs.getString("ADDR"));

                         }

                     }

@@ -281,7 +281,7 @@
                 if (feed != null) {

                     sql = "select * from FEED_ENDPOINT_IDS where FEEDID = " + feed.feedid;

                     try (ResultSet rs = stmt.executeQuery(sql)) {

-                        Collection<FeedEndpointID> ecoll = feed.getAuthorization().getEndpoint_ids();

+                        Collection<FeedEndpointID> ecoll = feed.getAuthorization().getEndpointIDS();

                         while (rs.next()) {

                             FeedEndpointID epi = new FeedEndpointID(rs);

                             ecoll.add(epi);

@@ -289,7 +289,7 @@
                     }

                     sql = "select * from FEED_ENDPOINT_ADDRS where FEEDID = " + feed.feedid;

                     try (ResultSet rs = stmt.executeQuery(sql)) {

-                        Collection<String> acoll = feed.getAuthorization().getEndpoint_addrs();

+                        Collection<String> acoll = feed.getAuthorization().getEndpointAddrs();

                         while (rs.next()) {

                             acoll.add(rs.getString("ADDR"));

                         }

@@ -413,9 +413,9 @@
                     //Fortify scan fixes - Privacy Violation

                     throw new InvalidObjectException("password field is too long (" + fid.getPassword() + ")");

                 }

-                this.authorization.getEndpoint_ids().add(fid);

+                this.authorization.getEndpointIDS().add(fid);

             }

-            if (this.authorization.getEndpoint_ids().isEmpty()) {

+            if (this.authorization.getEndpointIDS().isEmpty()) {

                 throw new InvalidObjectException("need to specify at least one endpoint_id");

             }

             endPointIds = jauth.getJSONArray("endpoint_addrs");

@@ -424,7 +424,7 @@
                 if (!JSONUtilities.validIPAddrOrSubnet(addr)) {

                     throw new InvalidObjectException("bad IP addr or subnet mask: " + addr);

                 }

-                this.authorization.getEndpoint_addrs().add(addr);

+                this.authorization.getEndpointAddrs().add(addr);

             }

 

             this.publisher = jo.optString("publisher", "");

@@ -651,7 +651,7 @@
             FeedAuthorization auth = getAuthorization();

             String sql = "insert into FEED_ENDPOINT_IDS values (?, ?, ?)";

             try (PreparedStatement ps2 = conn.prepareStatement(sql)) {

-                for (FeedEndpointID fid : auth.getEndpoint_ids()) {

+                for (FeedEndpointID fid : auth.getEndpointIDS()) {

                     ps2.setInt(1, feedid);

                     ps2.setString(2, fid.getId());

                     ps2.setString(3, fid.getPassword());

@@ -662,7 +662,7 @@
             // Create FEED_ENDPOINT_ADDRS rows

             sql = "insert into FEED_ENDPOINT_ADDRS values (?, ?)";

             try (PreparedStatement ps2 = conn.prepareStatement(sql)) {

-                for (String t : auth.getEndpoint_addrs()) {

+                for (String t : auth.getEndpointAddrs()) {

                     ps2.setInt(1, feedid);

                     ps2.setString(2, t);

                     ps2.executeUpdate();

@@ -705,8 +705,8 @@
         Feed oldobj = getFeedById(feedid);

         PreparedStatement ps = null;

         try {

-            Set<FeedEndpointID> newset = getAuthorization().getEndpoint_ids();

-            Set<FeedEndpointID> oldset = oldobj.getAuthorization().getEndpoint_ids();

+            Set<FeedEndpointID> newset = getAuthorization().getEndpointIDS();

+            Set<FeedEndpointID> oldset = oldobj.getAuthorization().getEndpointIDS();

 

             // Insert new FEED_ENDPOINT_IDS rows

             String sql = "insert into FEED_ENDPOINT_IDS values (?, ?, ?)";

@@ -735,8 +735,8 @@
             ps.close();

 

             // Insert new FEED_ENDPOINT_ADDRS rows

-            Set<String> newset2 = getAuthorization().getEndpoint_addrs();

-            Set<String> oldset2 = oldobj.getAuthorization().getEndpoint_addrs();

+            Set<String> newset2 = getAuthorization().getEndpointAddrs();

+            Set<String> oldset2 = oldobj.getAuthorization().getEndpointAddrs();

             sql = "insert into FEED_ENDPOINT_ADDRS values (?, ?)";

             ps = conn.prepareStatement(sql);

             for (String t : newset2) {

diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/FeedAuthorization.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/FeedAuthorization.java
index ff08f59..fad6a33 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/FeedAuthorization.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/FeedAuthorization.java
@@ -60,19 +60,19 @@
         this.classification = classification;

     }

 

-    public Set<FeedEndpointID> getEndpoint_ids() {

+    public Set<FeedEndpointID> getEndpointIDS() {

         return endpointIds;

     }

 

-    public void setEndpoint_ids(Set<FeedEndpointID> endpointIds) {

+    public void setEndpointIDS(Set<FeedEndpointID> endpointIds) {

         this.endpointIds = endpointIds;

     }

 

-    public Set<String> getEndpoint_addrs() {

+    public Set<String> getEndpointAddrs() {

         return endpointAddrs;

     }

 

-    public void setEndpoint_addrs(Set<String> endpointAddrs) {

+    public void setEndpointAddrs(Set<String> endpointAddrs) {

         this.endpointAddrs = endpointAddrs;

     }

 

diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/FeedLinks.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/FeedLinks.java
index 779bffa..d3ee643 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/FeedLinks.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/FeedLinks.java
@@ -24,9 +24,7 @@
 

 package org.onap.dmaap.datarouter.provisioning.beans;

 

-import java.io.InvalidObjectException;

 import java.util.Objects;

-

 import org.json.JSONObject;

 

 /**

diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Group.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Group.java
index e0756f9..3f68590 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Group.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Group.java
@@ -152,10 +152,7 @@
      */

     public static Group getGroupMatching(Group gup, int groupid) {

         String sql = String.format(

-                "select * from GROUPS where  NAME = '%s' and GROUPID != %d ",

-                gup.getName(),

-                gup.getGroupid()

-        );

+                "select * from GROUPS where  NAME = '%s' and GROUPID != %d ", gup.getName(), gup.getGroupid());

         List<Group> list = getGroupsForSQL(sql);

         return !list.isEmpty() ? list.get(0) : null;

     }

diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/IngressRoute.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/IngressRoute.java
index f1fa54c..555c5b6 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/IngressRoute.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/IngressRoute.java
@@ -398,7 +398,6 @@
             ps.setString(2, userid);

             ps.setString(3, subnet);

             ps.execute();

-            ps.close();

             // Delete the NodeSet

             ps2.setInt(1, nodelist);

             ps2.execute();

diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/PublishRecord.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/PublishRecord.java
index 4afb61c..f5a2000 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/PublishRecord.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/PublishRecord.java
@@ -42,6 +42,11 @@
  */

 

 public class PublishRecord extends BaseLogRecord {

+

+    public static final String STATUS_CODE = "statusCode";

+    public static final String SOURCE_IP = "sourceIP";

+    public static final String ENDPOINT_ID = "endpointId";

+    public static final String FILE_NAME = "fileName";

     private String feedFileid;

     private String remoteAddr;

     private String user;

@@ -134,17 +139,17 @@
         LinkedHashMap<String, Object> logrecordObj = new LinkedHashMap<>();

 

 

-        logrecordObj.put("statusCode", jo.get("statusCode"));

+        logrecordObj.put(STATUS_CODE, jo.get(STATUS_CODE));

         logrecordObj.put("publishId", jo.get("publishId"));

         logrecordObj.put("requestURI", jo.get("requestURI"));

-        logrecordObj.put("sourceIP", jo.get("sourceIP"));

+        logrecordObj.put(SOURCE_IP, jo.get(SOURCE_IP));

         logrecordObj.put("method", jo.get("method"));

         logrecordObj.put("contentType", jo.get("contentType"));

-        logrecordObj.put("endpointId", jo.get("endpointId"));

+        logrecordObj.put(ENDPOINT_ID, jo.get(ENDPOINT_ID));

         logrecordObj.put("type", jo.get("type"));

         logrecordObj.put("date", jo.get("date"));

         logrecordObj.put("contentLength", jo.get("contentLength"));

-        logrecordObj.put("fileName", jo.get("fileName"));

+        logrecordObj.put(FILE_NAME, jo.get(FILE_NAME));

 

         return new LOGJSONObject(logrecordObj);

     }

@@ -157,10 +162,10 @@
         jo.put("feedFileid", feedFileid);

         jo.put("remoteAddr", remoteAddr);

         jo.put("user", user);

-        jo.put("sourceIP", remoteAddr);

-        jo.put("endpointId", user);

-        jo.put("statusCode", status);

-        jo.put("fileName", fileName);

+        jo.put(SOURCE_IP, remoteAddr);

+        jo.put(ENDPOINT_ID, user);

+        jo.put(STATUS_CODE, status);

+        jo.put(FILE_NAME, fileName);

 

         return this.reOrderObject(jo);

     }

diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/SubLinks.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/SubLinks.java
index 9c10fb3..c076ffb 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/SubLinks.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/SubLinks.java
@@ -24,9 +24,7 @@
 

 package org.onap.dmaap.datarouter.provisioning.beans;

 

-import java.io.InvalidObjectException;

 import java.util.Objects;

-

 import org.json.JSONObject;

 

 /**

diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/JSONUtilities.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/JSONUtilities.java
index 2d4e22b..9abd5a8 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/JSONUtilities.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/JSONUtilities.java
@@ -39,6 +39,10 @@
 public class JSONUtilities {

 

     private static final EELFLogger intlogger = EELFManager.getInstance().getLogger("InternalLog");

+

+    private JSONUtilities(){

+

+    }

     /**

      * Does the String <i>v</i> represent a valid Internet address (with or without a

      * mask length appended).

diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/PurgeLogDirTask.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/PurgeLogDirTask.java
index c34e954..7cb1c02 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/PurgeLogDirTask.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/PurgeLogDirTask.java
@@ -27,6 +27,8 @@
 import com.att.eelf.configuration.EELFLogger;

 import com.att.eelf.configuration.EELFManager;

 import java.io.File;

+import java.io.IOException;

+import java.nio.file.Files;

 import java.util.Objects;

 import java.util.Properties;

 import java.util.TimerTask;

@@ -76,7 +78,11 @@
         long exptime = System.currentTimeMillis() - interval;

         for (File logfile : Objects.requireNonNull(dir.listFiles())) {

             if (logfile.lastModified() < exptime) {

-                logfile.delete();

+                try {

+                    Files.delete(logfile.toPath());

+                } catch (IOException e) {

+                    utilsLogger.error("Failed to delete file: " + logfile.getPath(), e);

+                }

             }

         }

     }

diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/RLEBitSet.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/RLEBitSet.java
index 7914c81..b57ceb1 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/RLEBitSet.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/RLEBitSet.java
@@ -129,7 +129,7 @@
 

         @Override

         public int hashCode() {

-            return new Long(start ^ nbits).hashCode();

+            return Long.valueOf(start ^ nbits).hashCode();

         }

 

         @Override

diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/ThrottleFilter.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/ThrottleFilter.java
index b0fd4f4..da06f6b 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/ThrottleFilter.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/ThrottleFilter.java
@@ -24,6 +24,8 @@
 

 package org.onap.dmaap.datarouter.provisioning.utils;

 

+import com.att.eelf.configuration.EELFLogger;

+import com.att.eelf.configuration.EELFManager;

 import java.io.IOException;

 import java.io.InputStream;

 import java.util.ArrayList;

@@ -32,8 +34,6 @@
 import java.util.Map;

 import java.util.Timer;

 import java.util.TimerTask;

-import java.util.Vector;

-

 import javax.servlet.Filter;

 import javax.servlet.FilterChain;

 import javax.servlet.FilterConfig;

@@ -42,12 +42,10 @@
 import javax.servlet.ServletResponse;

 import javax.servlet.http.HttpServletRequest;

 import javax.servlet.http.HttpServletResponse;

-

-import com.att.eelf.configuration.EELFLogger;

-import com.att.eelf.configuration.EELFManager;

 import org.eclipse.jetty.continuation.Continuation;

 import org.eclipse.jetty.continuation.ContinuationSupport;

-import org.eclipse.jetty.server.*;

+import org.eclipse.jetty.server.HttpConnection;

+import org.eclipse.jetty.server.Request;

 import org.onap.dmaap.datarouter.provisioning.beans.Parameters;

 

 /**

@@ -88,9 +86,9 @@
  * @version $Id: ThrottleFilter.java,v 1.2 2014/03/12 19:45:41 eby Exp $

  */

 public class ThrottleFilter extends TimerTask implements Filter {

-    public static final int DEFAULT_N = 10;

-    public static final int DEFAULT_M = 5;

-    public static final String THROTTLE_MARKER = "org.onap.dmaap.datarouter.provisioning.THROTTLE_MARKER";

+    private static final int DEFAULT_N = 10;

+    private static final int DEFAULT_M = 5;

+    private static final String THROTTLE_MARKER = "org.onap.dmaap.datarouter.provisioning.THROTTLE_MARKER";

     private static final String JETTY_REQUEST = "org.eclipse.jetty.server.Request";

     private static final long ONE_MINUTE = 60000L;

     private static final int ACTION_DROP = 0;

@@ -98,8 +96,8 @@
 

     // Configuration

     private static boolean enabled = false;        // enabled or not

-    private static int n_requests = 0;            // number of requests in M minutes

-    private static int m_minutes = 0;            // sampling period

+    private static int numRequests = 0;            // number of requests in M minutes

+    private static int samplingPeriod = 0;            // sampling period

     private static int action = ACTION_DROP;    // action to take (throttle or drop)

 

     private static EELFLogger logger = EELFManager.getInstance().getLogger("InternalLog");

@@ -121,19 +119,20 @@
             try {

                 Class.forName(JETTY_REQUEST);

                 String v = p.getValue();

-                if (v != null && !v.equals("off")) {

+                if (v != null && !"off".equals(v)) {

                     String[] pp = v.split(",");

                     if (pp != null) {

-                        n_requests = (pp.length > 0) ? getInt(pp[0], DEFAULT_N) : DEFAULT_N;

-                        m_minutes = (pp.length > 1) ? getInt(pp[1], DEFAULT_M) : DEFAULT_M;

-                        action = (pp.length > 2 && pp[2] != null && pp[2].equalsIgnoreCase("throttle")) ? ACTION_THROTTLE : ACTION_DROP;

+                        numRequests = (pp.length > 0) ? getInt(pp[0], DEFAULT_N) : DEFAULT_N;

+                        samplingPeriod = (pp.length > 1) ? getInt(pp[1], DEFAULT_M) : DEFAULT_M;

+                        action = (pp.length > 2 && pp[2] != null && "throttle".equalsIgnoreCase(pp[2])) ? ACTION_THROTTLE : ACTION_DROP;

                         enabled = true;

                         // ACTION_THROTTLE is not currently working, so is not supported

                         if (action == ACTION_THROTTLE) {

                             action = ACTION_DROP;

                             logger.info("Throttling is not currently supported; action changed to DROP");

                         }

-                        logger.info("ThrottleFilter is ENABLED for /publish requests; N=" + n_requests + ", M=" + m_minutes + ", Action=" + action);

+                        logger.info("ThrottleFilter is ENABLED for /publish requests; N=" + numRequests + ", M=" + samplingPeriod

+                            + ", Action=" + action);

                         return;

                     }

                 }

@@ -175,27 +174,29 @@
     public void dropFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain)

             throws IOException, ServletException {

         int rate = getRequestRate(request);

-        if (rate >= n_requests) {

+        if (rate >= numRequests) {

             // drop request - only works under Jetty

-            String m = String.format("Dropping connection: %s %d bad connections in %d minutes", getConnectionId(request), rate, m_minutes);

+            String m = String.format("Dropping connection: %s %d bad connections in %d minutes", getConnectionId(request), rate,

+                samplingPeriod);

             logger.info(m);

-            Request base_request = (request instanceof Request)

+            Request baseRequest = (request instanceof Request)

                     ? (Request) request

                     : HttpConnection.getCurrentConnection().getHttpChannel().getRequest();

-            base_request.getHttpChannel().getEndPoint().close();

+            baseRequest.getHttpChannel().getEndPoint().close();

         } else {

             chain.doFilter(request, response);

         }

     }

 

-    public void throttleFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain)

+    private void throttleFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain)

             throws IOException, ServletException {

         // throttle request

         String id = getConnectionId(request);

         int rate = getRequestRate(request);

         Object results = request.getAttribute(THROTTLE_MARKER);

-        if (rate >= n_requests && results == null) {

-            String m = String.format("Throttling connection: %s %d bad connections in %d minutes", getConnectionId(request), rate, m_minutes);

+        if (rate >= numRequests && results == null) {

+            String m = String.format("Throttling connection: %s %d bad connections in %d minutes",

+                getConnectionId(request), rate, samplingPeriod);

             logger.info(m);

             Continuation continuation = ContinuationSupport.getContinuation(request);

             continuation.suspend();

@@ -214,22 +215,22 @@
         }

     }

 

-    private Map<String, List<Continuation>> suspended_requests = new HashMap<>();

+    private Map<String, List<Continuation>> suspendedRequests = new HashMap<>();

 

     private void register(String id, Continuation continuation) {

-        synchronized (suspended_requests) {

-            List<Continuation> list = suspended_requests.get(id);

+        synchronized (suspendedRequests) {

+            List<Continuation> list = suspendedRequests.get(id);

             if (list == null) {

                 list = new ArrayList<>();

-                suspended_requests.put(id, list);

+                suspendedRequests.put(id, list);

             }

             list.add(continuation);

         }

     }

 

     private void resume(String id) {

-        synchronized (suspended_requests) {

-            List<Continuation> list = suspended_requests.get(id);

+        synchronized (suspendedRequests) {

+            List<Continuation> list = suspendedRequests.get(id);

             if (list != null) {

                 // when the waited for event happens

                 Continuation continuation = list.remove(0);

@@ -248,7 +249,7 @@
      */

     private int getRequestRate(HttpServletRequest request) {

         String expecthdr = request.getHeader("Expect");

-        if (expecthdr != null && expecthdr.equalsIgnoreCase("100-continue"))

+        if (expecthdr != null && "100-continue".equalsIgnoreCase(expecthdr))

             return 0;

 

         String key = getConnectionId(request);

@@ -263,11 +264,11 @@
     }

 

     public class Counter {

-        private List<Long> times = new Vector<>();    // a record of request times

+        private List<Long> times = new ArrayList<>();    // a record of request times

 

         public int prune() {

             try {

-                long n = System.currentTimeMillis() - (m_minutes * ONE_MINUTE);

+                long n = System.currentTimeMillis() - (samplingPeriod * ONE_MINUTE);

                 long t = times.get(0);

                 while (t < n) {

                     times.remove(0);

diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/EgressRouteTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/EgressRouteTest.java
index 7ef52ff..7b77a1e 100644
--- a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/EgressRouteTest.java
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/EgressRouteTest.java
@@ -64,15 +64,7 @@
     }
 
     @Test
-    public void Verify_NetworkRoute_Is_Added_Successfully() throws SQLException {
-        Assert.assertEquals(1, EgressRoute.getAllEgressRoutes().size());
-        egressRoute.doInsert(db.getConnection());
-        Assert.assertEquals(2, EgressRoute.getAllEgressRoutes().size());
-        egressRoute.doDelete(db.getConnection());
-    }
-
-    @Test
-    public void Verify_NetworkRoute_Is_Removed_Successfully() throws SQLException {
+    public void Verify_EgressRoute_Is_Removed_Successfully() throws SQLException {
         Assert.assertEquals(1, EgressRoute.getAllEgressRoutes().size());
         EgressRoute egressRoute = new EgressRoute(1, 1);
         egressRoute.doDelete(db.getConnection());
@@ -80,7 +72,7 @@
     }
 
     @Test
-    public void Verify_NetworkRoute_Is_Updated_Successfully() throws SQLException {
+    public void Verify_EgressRoute_Is_Updated_Successfully() throws SQLException {
         EgressRoute egressRoute = new EgressRoute(1, 1);
         EgressRoute egressRoute1 = new EgressRoute(1, 1);
         Assert.assertEquals(egressRoute.hashCode(), egressRoute1.hashCode());
diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/ExpiryRecordTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/ExpiryRecordTest.java
index 34a6d97..1bf34e4 100644
--- a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/ExpiryRecordTest.java
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/ExpiryRecordTest.java
@@ -46,7 +46,7 @@
         Assert.assertEquals(2000, expiryRecord.getContentLength());
         Assert.assertEquals(285, expiryRecord.getSubid());
         Assert.assertEquals("file.txt", expiryRecord.getFileid());
-        Assert.assertEquals(100, expiryRecord.getAttempts());
+        Assert.assertEquals(100, expiryRecord.getDeliveryAttempts());
         Assert.assertEquals("other", expiryRecord.getReason());
     }
 
@@ -63,7 +63,7 @@
         expiryRecord.setMethod("PUT");
         expiryRecord.setSubid(322);
         expiryRecord.setFileid("file.txt");
-        expiryRecord.setAttempts(125);
+        expiryRecord.setDeliveryAttempts(125);
         expiryRecord.setReason("Out of memory");
 
         LOGJSONObject expiryRecordJson = createBaseLogRecordJson();
diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/FeedTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/FeedTest.java
index dcab541..9db4322 100644
--- a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/FeedTest.java
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/FeedTest.java
@@ -140,8 +140,8 @@
         setA.add(new FeedEndpointID("1", "Name"));
         Set setB = new HashSet();
         setB.add("172.0.0.1");
-        fa.setEndpoint_ids(setA);
-        fa.setEndpoint_addrs(setB);
+        fa.setEndpointIDS(setA);
+        fa.setEndpointAddrs(setB);
         feed.setAuthorization(fa);
         Assert.assertEquals(feed.doInsert(connection), false);
 
diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/NetworkRouteTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/NetworkRouteTest.java
index df786b5..d727bc7 100644
--- a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/NetworkRouteTest.java
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/NetworkRouteTest.java
@@ -64,14 +64,6 @@
     }
 
     @Test
-    public void Verify_NetworkRoute_Is_Added_Successfully() throws SQLException {
-        Assert.assertEquals(1, NetworkRoute.getAllNetworkRoutes().size());
-        networkRoute.doInsert(db.getConnection());
-        Assert.assertEquals(2, NetworkRoute.getAllNetworkRoutes().size());
-        networkRoute.doDelete(db.getConnection());
-    }
-
-    @Test
     public void Verify_NetworkRoute_Is_Removed_Successfully() throws SQLException {
         Assert.assertEquals(1, NetworkRoute.getAllNetworkRoutes().size());
         NetworkRoute networkRoute = new NetworkRoute("stub_from.", "stub_to.");
diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/utils/ThrottleFilterTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/utils/ThrottleFilterTest.java
index a8e919b..94ef3b7 100644
--- a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/utils/ThrottleFilterTest.java
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/utils/ThrottleFilterTest.java
@@ -108,7 +108,7 @@
         List<Continuation> continuation_list = new ArrayList<>();
         continuation_list.add(continuation);
         suspended_requests.put("null/-1", continuation_list);
-        FieldUtils.writeDeclaredField(throttlefilter, "suspended_requests", suspended_requests, true);
+        FieldUtils.writeDeclaredField(throttlefilter, "suspendedRequests", suspended_requests, true);
         throttlefilter.doFilter(request, response, filterchain);
         verify(continuation, times(1)).setAttribute(anyString(), any());
         verify(continuation, times(1)).resume();