Adds support for offset and binary parameters
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / Pz2Bean.java
index 98f4c71..f5a0675 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() || (commands.equals("record") && pzreq.getCommand("record").hasParameterSet("recordquery"))) {\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,19 @@ 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") && pzreq.getRecord().hasParameterValue("offset")) {\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
+          if (commands.equals("record")) {\r
             return pzresp.getRecord().getActiveClients();\r
           } else {\r
             return pzresp.getActiveClients();\r
@@ -156,12 +166,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
@@ -194,7 +211,7 @@ public class Pz2Bean implements Pz2Interface, StateListener, Serializable {
   }\r
       \r
   protected boolean hasQuery() {        \r
-    return pzreq.getCommand("search").hasParameterSet("query"); \r
+    return pzreq.getCommand("search").hasParameterValue("query"); \r
   }\r
     \r
     \r
@@ -220,7 +237,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