Adds support for record checksum
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / Pz2Bean.java
index 43578f8..ba2f0d7 100644 (file)
@@ -110,9 +110,10 @@ public class Pz2Bean implements Pz2Interface, StateListener, Serializable {
    * @return Number of activeclients at the time of the 'show' command\r
    */\r
   public String update (String commands) {\r
+    try {\r
     if (! errors.hasConfigurationErrors()) {\r
       if (commandsAreValid(commands)) {\r
-        if (hasQuery()) {\r
+        if (hasQuery() || (commands.equals("record") && pzreq.getCommand("record").hasParameterValue("recordquery"))) {\r
           handleQueryStateChanges(commands);\r
           logger.debug("Processing request for " + commands); \r
           List<CommandThread> threadList = new ArrayList<CommandThread>();\r
@@ -135,10 +136,21 @@ public class Pz2Bean implements Pz2Interface, StateListener, Serializable {
              String response = thread.getResponse();\r
              responseLogger.debug("Response was: " + response);\r
              Pazpar2ResponseData responseObject = Pazpar2ResponseParser.getParser().getDataObject(response);\r
-             pzresp.put(commandName, responseObject);        \r
+             if (Pazpar2ResponseParser.docTypes.contains(responseObject.getType())) {\r
+               pzresp.put(commandName, responseObject);\r
+             } else {\r
+               if (commandName.equals("record") && \r
+                   (pzreq.getRecord().hasParameterValue("offset") ||\r
+                    pzreq.getRecord().hasParameterValue("checksum"))) {\r
+                 RecordResponse recordResponse = new RecordResponse();\r
+                 recordResponse.setType("record");\r
+                 recordResponse.setXml(responseObject.getXml());\r
+                 recordResponse.setAttribute("activeclients", "0");\r
+                 pzresp.put(commandName, recordResponse);\r
+               }\r
+             }\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
@@ -156,12 +168,19 @@ public class Pz2Bean implements Pz2Interface, StateListener, Serializable {
       logger.error("Did not attempt to execute query since there are configuration errors.");\r
       return "0";\r
     }\r
+    } catch (ClassCastException cce) {\r
+      cce.printStackTrace();    \r
+      return "";\r
+    } catch (NullPointerException npe) {\r
+      npe.printStackTrace();\r
+      return "";\r
+    }\r
     \r
   }\r
   \r
   public boolean commandsAreValid(String commands) {\r
     if (commands.equals("record")) {\r
-      if (!pzreq.getCommand("record").hasParameterSet("id")) {\r
+      if (!pzreq.getCommand("record").hasParameterValue("id")) {\r
         logger.error("Attempt to send record command without the id parameter");\r
         return false;\r
       }\r
@@ -192,14 +211,13 @@ public class Pz2Bean implements Pz2Interface, StateListener, Serializable {
   public void setCurrentStateKey(String key) {       \r
     stateMgr.setCurrentStateKey(key);\r
   }\r
-  \r
-  \r
-  \r
+      \r
   protected boolean hasQuery() {        \r
-    return pzreq.getCommand("search").hasParameterSet("query"); \r
+    return pzreq.getCommand("search").hasParameterValue("query"); \r
   }\r
     \r
     \r
+  @Override\r
   public ResultsPager getPager () {\r
     if (pager == null) {\r
       pager = new ResultsPager(pzresp);      \r
@@ -207,6 +225,7 @@ public class Pz2Bean implements Pz2Interface, StateListener, Serializable {
     return pager;      \r
   }\r
   \r
+  @Override\r
   public ResultsPager setPager (int pageRange) {\r
     pager =  new ResultsPager(pzresp,pageRange,pzreq);\r
     return pager;\r
@@ -220,7 +239,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.getCommand("record").hasParameterSet("id")) {\r
+      if (pzreq.getCommand("record").hasParameterValue("id")) {\r
         update("record");\r
       } else {         \r
         pzresp.put("record", new RecordResponse());\r
@@ -241,6 +260,25 @@ public class Pz2Bean implements Pz2Interface, StateListener, Serializable {
       update(commandName);\r
     } \r
   }\r
+  \r
+  @Override\r
+  public boolean getAuthenticationRequired () {\r
+    return searchClient.isAuthenticatingClient();\r
+  }\r
 \r
-\r
+  @Override\r
+  public String getCheckHistory () {\r
+    return ":pz2watch:stateForm:windowlocationhash";\r
+  }\r
+    \r
+  @Override\r
+  public String getWatchActiveclients () {\r
+    return ":pz2watch:activeclientsForm:activeclientsField";\r
+  }\r
+  \r
+  @Override\r
+  public String getWatchActiveclientsRecord () {\r
+    return ":pz2watch:activeclientsForm:activeclientsFieldRecord";\r
+  }\r
+  \r
 }\r