Ammends some fringe scenarios with state keys and states
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / pz2utils4jsf / pazpar2 / Pz2Bean.java
index 65706a9..97f0880 100644 (file)
@@ -34,6 +34,7 @@ public class Pz2Bean implements Pz2Interface, StateListener, Serializable {
 \r
   private static final long serialVersionUID = 3440277287081557861L;\r
   private static Logger logger = Logger.getLogger(Pz2Bean.class);\r
+  private static Logger responseLogger = Logger.getLogger("com.indexdata.pz2utils4jsf.pazpar2.responses");\r
   \r
   protected SearchClient searchClient = null;\r
   \r
@@ -94,9 +95,10 @@ public class Pz2Bean implements Pz2Interface, StateListener, Serializable {
   public void doSearch() { \r
     stateMgr.hasPendingStateChange("search",false);\r
     pzresp.reset();\r
-    // TODO: avoid state proliferation here:\r
-    pzreq.getRecord().removeParameters();\r
-    pzreq.getShow().setParameter(new CommandParameter("start","=",0));    \r
+    // resets some record and show command parameters without \r
+    // changing state or creating state change feedback\r
+    pzreq.getRecordInState().removeParametersSilently();        \r
+    pzreq.getShowInState().setParameterSilently(new CommandParameter("start","=",0));    \r
     logger.debug(Utils.objectId(this) + " is searching using "+pzreq.getCommandReadOnly("search").getUrlEncodedParameterValue("query"));\r
     doCommand("search");    \r
   }\r
@@ -119,48 +121,63 @@ public class Pz2Bean implements Pz2Interface, StateListener, Serializable {
    */\r
   public String update (String commands) {\r
     if (! hasConfigurationErrors()) {\r
-      if (hasQuery()) {\r
-        handleQueryStateChanges(commands);\r
-        logger.debug("Processing request for " + commands); \r
-        List<CommandThread> threadList = new ArrayList<CommandThread>();\r
-        StringTokenizer tokens = new StringTokenizer(commands,",");\r
-        while (tokens.hasMoreElements()) {          \r
-          threadList.add(new CommandThread(pzreq.getCommandReadOnly(tokens.nextToken()),searchClient));            \r
-        }\r
-        for (CommandThread thread : threadList) {\r
-          thread.start();\r
-        }\r
-        for (CommandThread thread : threadList) {\r
-          try {\r
-            thread.join();\r
-          } catch (InterruptedException e) {\r
-            e.printStackTrace();\r
+      if (commandsAreValid(commands)) {\r
+        if (hasQuery()) {\r
+          handleQueryStateChanges(commands);\r
+          logger.debug("Processing request for " + commands); \r
+          List<CommandThread> threadList = new ArrayList<CommandThread>();\r
+          StringTokenizer tokens = new StringTokenizer(commands,",");\r
+          while (tokens.hasMoreElements()) {          \r
+            threadList.add(new CommandThread(pzreq.getCommandReadOnly(tokens.nextToken()),searchClient));            \r
           }\r
-        }\r
-        for (CommandThread thread : threadList) {\r
-           String commandName = thread.getCommand().getName();\r
-           String response = thread.getResponse();\r
-           logger.debug("Response was: " + response);\r
-           Pazpar2ResponseData responseObject = Pazpar2ResponseParser.getParser().getDataObject(response);\r
-           pzresp.put(commandName, responseObject);        \r
-        }\r
-        if (commands.equals("record")) {\r
-          logger.debug("Record: Active clients: "+pzresp.getRecord().getActiveClients());\r
-          return pzresp.getRecord().getActiveClients();\r
+          for (CommandThread thread : threadList) {\r
+            thread.start();\r
+          }\r
+          for (CommandThread thread : threadList) {\r
+            try {\r
+              thread.join();\r
+            } catch (InterruptedException e) {\r
+              e.printStackTrace();\r
+            }\r
+          }\r
+          for (CommandThread thread : threadList) {\r
+             String commandName = thread.getCommand().getName();\r
+             String response = thread.getResponse();\r
+             responseLogger.debug("Response was: " + response);\r
+             Pazpar2ResponseData responseObject = Pazpar2ResponseParser.getParser().getDataObject(response);\r
+             pzresp.put(commandName, responseObject);        \r
+          }\r
+          if (commands.equals("record")) {\r
+            logger.debug("Record: Active clients: "+pzresp.getRecord().getActiveClients());\r
+            return pzresp.getRecord().getActiveClients();\r
+          } else {\r
+            return pzresp.getActiveClients();\r
+          }  \r
         } else {\r
-          return pzresp.getActiveClients();\r
-        }  \r
+          logger.debug("Skipped requests for " + commands + " as there's not yet a query."); \r
+          pzresp.reset();\r
+          return "0";\r
+        }\r
       } else {\r
-        logger.debug("Skipped requests for " + commands + " as there's not yet a query."); \r
-        pzresp.reset();\r
+        logger.error("Did not attemt to run command(s) due to a validation error.");\r
         return "0";\r
       }\r
-    } else {\r
+    } else {      \r
       logger.error("Did not attempt to execute query since there are configuration errors.");\r
       return "0";\r
     }\r
     \r
   }\r
+  \r
+  public boolean commandsAreValid(String commands) {\r
+    if (commands.equals("record")) {\r
+      if (!pzreq.getCommandReadOnly("record").hasParameterSet("id")) {\r
+        logger.error("Attempt to send record command without the id parameter");\r
+        return false;\r
+      }\r
+    }\r
+    return true;\r
+  }\r
                                 \r
   public String toggleRecord (String recId) {\r
     if (hasRecord(recId)) {\r
@@ -235,7 +252,7 @@ public class Pz2Bean implements Pz2Interface, StateListener, Serializable {
     if (stateMgr.hasPendingStateChange("record") && ! commands.equals("record")) {        \r
       logger.debug("Found pending record ID change. Doing record before updating " + commands);\r
       stateMgr.hasPendingStateChange("record",false);\r
-      if (pzreq.getCommandReadOnly("record").hasParameters()) {\r
+      if (pzreq.getCommandReadOnly("record").hasParameterSet("id")) {\r
         update("record");\r
       } else {         \r
         pzresp.put("record", new RecordResponse());\r