Adds check for SP only commands.
authorNiels Erik G. Nielsen <nielserik@indexdata.com>
Tue, 21 May 2013 12:49:48 +0000 (08:49 -0400)
committerNiels Erik G. Nielsen <nielserik@indexdata.com>
Tue, 21 May 2013 12:49:48 +0000 (08:49 -0400)
Also:
 Adds support for setting Pazpar2 service ID
 Tweaks log levels

19 files changed:
src/main/java/com/indexdata/mkjsf/pazpar2/Pz2Bean.java
src/main/java/com/indexdata/mkjsf/pazpar2/Pz2Client.java
src/main/java/com/indexdata/mkjsf/pazpar2/ServiceProxyExtensions.java
src/main/java/com/indexdata/mkjsf/pazpar2/commands/BytargetCommand.java
src/main/java/com/indexdata/mkjsf/pazpar2/commands/CommandParameter.java
src/main/java/com/indexdata/mkjsf/pazpar2/commands/InitCommand.java
src/main/java/com/indexdata/mkjsf/pazpar2/commands/Pazpar2Command.java
src/main/java/com/indexdata/mkjsf/pazpar2/commands/PingCommand.java
src/main/java/com/indexdata/mkjsf/pazpar2/commands/RecordCommand.java
src/main/java/com/indexdata/mkjsf/pazpar2/commands/SearchCommand.java
src/main/java/com/indexdata/mkjsf/pazpar2/commands/SettingsCommand.java
src/main/java/com/indexdata/mkjsf/pazpar2/commands/ShowCommand.java
src/main/java/com/indexdata/mkjsf/pazpar2/commands/StatCommand.java
src/main/java/com/indexdata/mkjsf/pazpar2/commands/TermlistCommand.java
src/main/java/com/indexdata/mkjsf/pazpar2/commands/sp/AuthCommand.java
src/main/java/com/indexdata/mkjsf/pazpar2/commands/sp/CategoriesCommand.java
src/main/java/com/indexdata/mkjsf/pazpar2/commands/sp/RecordCommandSp.java
src/main/java/com/indexdata/mkjsf/pazpar2/commands/sp/ServiceProxyCommand.java
src/main/java/com/indexdata/mkjsf/pazpar2/state/StateManager.java

index 4c6d8a0..5b45551 100644 (file)
@@ -26,6 +26,7 @@ import com.indexdata.mkjsf.errors.ErrorHelper;
 import com.indexdata.mkjsf.pazpar2.commands.CommandParameter;\r
 import com.indexdata.mkjsf.pazpar2.commands.Pazpar2Command;\r
 import com.indexdata.mkjsf.pazpar2.commands.Pazpar2Commands;\r
+import com.indexdata.mkjsf.pazpar2.commands.sp.ServiceProxyCommand;\r
 import com.indexdata.mkjsf.pazpar2.data.RecordResponse;\r
 import com.indexdata.mkjsf.pazpar2.data.ResponseDataObject;\r
 import com.indexdata.mkjsf.pazpar2.data.ResponseParser;\r
@@ -160,7 +161,7 @@ public class Pz2Bean implements Pz2Interface, StateListener, Configurable, Seria
       logger.error("Ignoring show,stat,termlist,bytarget commands due to problem with most recent search.");\r
       return "";\r
     } else if (!hasQuery()) {\r
-      logger.error("Ignoring show,stat,termlist,bytarget commands because there is not yet a query.");\r
+      logger.debug("Ignoring show,stat,termlist,bytarget commands because there is not yet a query.");\r
       return "";\r
     } else {\r
       return update("show,stat,termlist,bytarget");\r
@@ -174,7 +175,7 @@ public class Pz2Bean implements Pz2Interface, StateListener, Configurable, Seria
    * @return Number of activeclients at the time of the 'show' command\r
    */\r
   public String update (String commands) {\r
-    logger.info("Request to update: " + commands);\r
+    logger.debug("Request to update: " + commands);\r
     try {\r
       if (commands.equals("search")) {\r
         doSearch();\r
@@ -195,7 +196,6 @@ public class Pz2Bean implements Pz2Interface, StateListener, Configurable, Seria
           return "0";\r
         } else {\r
           logger.debug("Processing request for " + commands); \r
-          \r
           List<CommandThread> threadList = new ArrayList<CommandThread>();\r
           StringTokenizer tokens = new StringTokenizer(commands,",");\r
           while (tokens.hasMoreElements()) {          \r
@@ -311,48 +311,53 @@ public class Pz2Bean implements Pz2Interface, StateListener, Configurable, Seria
   }\r
   \r
   /**\r
-   * Validates the request then executes the command and parses the response.\r
+   * Executes the command and parses the response to create data objects.\r
    * If the parsed response is of a known type it will be cached in 'pzresp'\r
    * \r
    * @param commandName The command to be executed\r
    * @return An XML response parsed to form a response data object\r
    */\r
   protected ResponseDataObject doCommand(String commandName) {\r
-    ResponseDataObject responseObject = null;     \r
-    logger.info("Request "+commandName + ": "+ pzreq.getCommand("search").toString());\r
-    Pazpar2Command command = pzreq.getCommand(commandName);\r
-    long start = System.currentTimeMillis();\r
-    HttpResponseWrapper commandResponse = searchClient.executeCommand(command);\r
-    long end = System.currentTimeMillis();\r
-    logger.debug("Executed " + command.getCommandName() + " in " + (end-start) + " ms." );\r
-    responseLogger.debug("Response was: " + commandResponse.getResponseString());\r
-    if (commandResponse.getContentType().contains("xml")) {\r
-      responseObject = ResponseParser.getParser().getDataObject((ClientCommandResponse)commandResponse);\r
-      if (ResponseParser.docTypes.contains(responseObject.getType())) {\r
-        logger.debug("Storing " + responseObject.getType() + " in pzresp. ");\r
-        pzresp.put(commandName, responseObject);\r
+    if (pzreq.getCommand(commandName).spOnly() && isPazpar2Service()) {\r
+      logger.warn("Skipping " + commandName + " - SP-only command, un-supported by Pazpar2");\r
+      return new ResponseDataObject();\r
+    } else {\r
+      ResponseDataObject responseObject = null;     \r
+      logger.info("Request "+commandName + ": "+ pzreq.getCommand("search").toString());\r
+      Pazpar2Command command = pzreq.getCommand(commandName);\r
+      long start = System.currentTimeMillis();\r
+      HttpResponseWrapper commandResponse = searchClient.executeCommand(command);\r
+      long end = System.currentTimeMillis();\r
+      logger.debug("Executed " + command.getCommandName() + " in " + (end-start) + " ms." );\r
+      responseLogger.debug("Response was: " + commandResponse.getResponseString());\r
+      if (commandResponse.getContentType().contains("xml")) {\r
+        responseObject = ResponseParser.getParser().getDataObject((ClientCommandResponse)commandResponse);\r
+        if (ResponseParser.docTypes.contains(responseObject.getType())) {\r
+          logger.debug("Storing " + responseObject.getType() + " in pzresp. ");\r
+          pzresp.put(commandName, responseObject);\r
+        } else {\r
+          if (commandName.equals("record")) {\r
+            logger.debug("Command was 'record' but response not '<record>' - assuming raw record response.");\r
+            ResponseDataObject recordResponse = new RecordResponse(); \r
+            recordResponse.setType("record");\r
+            recordResponse.setXml(responseObject.getXml());          \r
+            recordResponse.setAttribute("activeclients", "0");\r
+            pzresp.put("record", recordResponse); \r
+          }        \r
+        }\r
+      } else if (commandResponse.isBinary()) {\r
+        responseObject = new RecordResponse(); \r
+        responseObject.setType(commandName);\r
+        logger.info("Binary response");\r
+        responseObject.setAttribute("activeclients", "0");\r
+        responseObject.setXml("<record>binary response</record>");\r
+        responseObject.setBinary(commandResponse.getBytes());\r
+        pzresp.put("record", responseObject);\r
       } else {\r
-        if (commandName.equals("record")) {\r
-          logger.debug("Command was 'record' but response not '<record>' - assuming raw record response.");\r
-          ResponseDataObject recordResponse = new RecordResponse(); \r
-          recordResponse.setType("record");\r
-          recordResponse.setXml(responseObject.getXml());          \r
-          recordResponse.setAttribute("activeclients", "0");\r
-          pzresp.put("record", recordResponse); \r
-        }        \r
+        logger.error("Response was not found to be XML or binary. The response was not handled.");\r
       }\r
-    } else if (commandResponse.isBinary()) {\r
-      responseObject = new RecordResponse(); \r
-      responseObject.setType(commandName);\r
-      logger.info("Binary response");\r
-      responseObject.setAttribute("activeclients", "0");\r
-      responseObject.setXml("<record>binary response</record>");\r
-      responseObject.setBinary(commandResponse.getBytes());\r
-      pzresp.put("record", responseObject);\r
-    } else {\r
-      logger.error("Response was not found to be XML or binary. The response was not handled.");\r
+      return responseObject;\r
     }\r
-    return responseObject;\r
   }\r
     \r
   @Override\r
@@ -408,6 +413,17 @@ public class Pz2Bean implements Pz2Interface, StateListener, Configurable, Seria
     return (searchClient!=null ? searchClient.getServiceUrl() : "");\r
   }\r
   \r
+  public void setServiceId () {\r
+    pzreq.getRecord().removeParametersInState();\r
+    pzreq.getSearch().removeParametersInState();\r
+    pzresp.resetSearchResponses();\r
+    pz2Client.setServiceId(pzreq.getInit().getService());\r
+  }\r
+  \r
+  public String getServiceId () {\r
+    return pzreq.getInit().getService();\r
+  }\r
+  \r
   public boolean getServiceUrlIsDefined() {\r
     return (searchClient != null && searchClient.hasServiceUrl());\r
   }\r
index 388253d..3b33000 100644 (file)
@@ -62,7 +62,7 @@ public class Pz2Client implements SearchClient {
     } \r
     if (cfg != null) {\r
       try {\r
-        client = new Pazpar2ClientGeneric(cfg);  \r
+        client = new Pazpar2ClientGeneric(cfg);        \r
       } catch (ProxyErrorException pe) {\r
         logger.error("Could not configure Pazpar2 client: " + pe.getMessage());\r
         throw new ConfigurationException("Could not configure Pz2Client:  "+ pe.getMessage(),pe);\r
@@ -204,8 +204,20 @@ public class Pz2Client implements SearchClient {
   \r
   @Override \r
   public void setServiceUrl (String serviceUrl) {    \r
-    cfg.PAZPAR2_URL = serviceUrl;\r
-    \r
+    cfg.PAZPAR2_URL = serviceUrl;    \r
+  }\r
+  \r
+  public String getServiceId () {\r
+    return cfg.PAZPAR2_SERVICE_ID;\r
+  }\r
+  \r
+  public void setServiceId(String serviceId) {\r
+    cfg.PAZPAR2_SERVICE_ID = serviceId;\r
+    try {\r
+      client = new Pazpar2ClientGeneric(cfg);  \r
+    } catch (ProxyErrorException pe) {\r
+      logger.error("Could not configure Pazpar2 client: " + pe.getMessage());      \r
+    }\r
   }\r
 \r
 }\r
index de1f42a..8629b38 100644 (file)
@@ -182,24 +182,28 @@ public class ServiceProxyExtensions implements ServiceProxyInterface, Serializab
     return initDocUpload.getIncludeDebug();\r
   }\r
   \r
-  // TODO: Remove when possible\r
+  // TODO: Remove when obsolete\r
   public InitDocUpload getInitDocUpload () {\r
     return initDocUpload;\r
   }\r
   \r
   public CategoriesResponse getCategories () {\r
-    ResponseDataObject response = pz2.doCommand("categories");\r
-    if (response.hasApplicationError()) {\r
-      logger.debug(response.getXml());\r
-      return new CategoriesResponse();\r
-    } else {\r
-      try {\r
-        return (CategoriesResponse) response;\r
-      } catch (Exception e) {\r
-        e.printStackTrace();\r
+    if (pz2.isServiceProxyService()) {\r
+      ResponseDataObject response = pz2.doCommand("categories");\r
+      if (response.hasApplicationError()) {\r
         logger.debug(response.getXml());\r
         return new CategoriesResponse();\r
+      } else {\r
+        try {\r
+          return (CategoriesResponse) response;\r
+        } catch (Exception e) {\r
+          e.printStackTrace();\r
+          logger.debug(response.getXml());\r
+          return new CategoriesResponse();\r
+        }\r
       }\r
+    } else {\r
+      return new CategoriesResponse();\r
     }\r
   }\r
   \r
index 7f39b70..b149808 100644 (file)
@@ -22,4 +22,9 @@ public class BytargetCommand extends Pazpar2Command implements ServiceProxyComma
   public ServiceProxyCommand getSp() {\r
     return this;\r
   }\r
+\r
+  @Override\r
+  public boolean spOnly() {\r
+    return false;\r
+  }\r
 }\r
index 2f0aa03..b22962e 100644 (file)
@@ -24,12 +24,12 @@ public class CommandParameter implements Serializable {
   private static List<String> nologparams = Arrays.asList("password");\r
   \r
   public CommandParameter (String name) {\r
-    logger.debug("Instantiating command parameter '" + name + "'");\r
+    logger.trace("Instantiating command parameter '" + name + "'");\r
     this.name = name;\r
   }\r
   \r
   public CommandParameter (String name, String operator, String value, Expression... expressions) {\r
-    logger.debug("Instantiating command parameter " + name + " with expressions: [" + expressions + "]");\r
+    logger.trace("Instantiating command parameter " + name + " with expressions: [" + expressions + "]");\r
     this.name = name;\r
     this.operator = operator;\r
     this.value = value;\r
@@ -39,14 +39,14 @@ public class CommandParameter implements Serializable {
   }\r
 \r
   public CommandParameter (String name, String operator, String value) {\r
-    if (!nologparams.contains(name)) logger.debug("Instantiating command parameter '" + name + "' with String: [" + value + "]");    \r
+    if (!nologparams.contains(name)) logger.trace("Instantiating command parameter '" + name + "' with String: [" + value + "]");    \r
     this.name = name;\r
     this.operator = operator;\r
     this.value = value;    \r
   }\r
   \r
   public CommandParameter (String name, String operator, int value) {\r
-    logger.debug("Instantiating command parameter '" + name + "' with int: [" + value + "]");\r
+    logger.trace("Instantiating command parameter '" + name + "' with int: [" + value + "]");\r
     this.name = name;\r
     this.operator = operator;\r
     this.value = value+"";    \r
@@ -118,7 +118,7 @@ public class CommandParameter implements Serializable {
   }\r
   \r
   public CommandParameter copy() {\r
-    logger.debug("Copying parameter '"+ name + "' for modification");\r
+    logger.trace("Copying parameter '"+ name + "' for modification");\r
     CommandParameter newParam = new CommandParameter(name);\r
     newParam.value = this.value;\r
     newParam.operator = this.operator;\r
index 144a1a7..3166168 100644 (file)
@@ -15,10 +15,18 @@ public class InitCommand extends Pazpar2Command implements ServiceProxyCommand {
     setParameterInState(new CommandParameter("clear","=",clear));\r
   }\r
   \r
+  public String getClear() {\r
+    return getParameterValue("clear");\r
+  }\r
+  \r
   public void setService(String serviceId) {    \r
     setParameterInState(new CommandParameter("service","=",serviceId));\r
   }\r
   \r
+  public String getService() {\r
+    return getParameterValue("service");\r
+  }\r
+  \r
   @Override\r
   public void setSession (String sessionId) {\r
     throw new UnsupportedOperationException("Cannot set session id on init command");\r
@@ -41,5 +49,10 @@ public class InitCommand extends Pazpar2Command implements ServiceProxyCommand {
     return this;\r
   }\r
 \r
+  @Override\r
+  public boolean spOnly() {\r
+    return false;\r
+  }\r
+\r
 \r
 }\r
index 73fd075..a67f829 100644 (file)
@@ -31,7 +31,7 @@ public abstract class Pazpar2Command implements Serializable  {
     \r
   public void setParameter (CommandParameter parameter) {\r
     Pazpar2Command copy = this.copy();\r
-    logger.debug(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "]");\r
+    logger.trace(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "]");\r
     copy.parameters.put(parameter.getName(),parameter);\r
     checkInState(copy);\r
   }\r
@@ -39,7 +39,7 @@ public abstract class Pazpar2Command implements Serializable  {
   public void setParameters (CommandParameter... params) {\r
     Pazpar2Command copy = this.copy();\r
     for (CommandParameter param : params) {\r
-      logger.debug(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "]");\r
+      logger.trace(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "]");\r
       copy.parameters.put(param.getName(),param);\r
     }\r
     checkInState(copy);\r
@@ -47,13 +47,13 @@ public abstract class Pazpar2Command implements Serializable  {
   \r
   public void setParametersInState (CommandParameter... params) {    \r
     for (CommandParameter param : params) {\r
-      logger.debug(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "] silently");\r
+      logger.trace(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "] silently");\r
       parameters.put(param.getName(),param);\r
     }    \r
   }\r
     \r
   public void setParameterInState (CommandParameter parameter) {\r
-    logger.debug(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "] silently");\r
+    logger.trace(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "] silently");\r
     parameters.put(parameter.getName(),parameter);    \r
   }\r
   \r
@@ -149,5 +149,6 @@ public abstract class Pazpar2Command implements Serializable  {
   }\r
   \r
   public abstract ServiceProxyCommand getSp();\r
-  \r
+   \r
+  public abstract boolean spOnly();  \r
 }\r
index 5a75e56..b4f4f4a 100644 (file)
@@ -22,4 +22,9 @@ public class PingCommand extends Pazpar2Command implements ServiceProxyCommand {
   public ServiceProxyCommand getSp() {\r
     return this;\r
   }\r
+\r
+  @Override\r
+  public boolean spOnly() {\r
+    return false;\r
+  }\r
 }\r
index 93f7782..cec9d67 100644 (file)
@@ -85,4 +85,9 @@ public class RecordCommand extends Pazpar2Command implements ServiceProxyCommand
   public RecordCommandSp getSp () {\r
     return new RecordCommandSp(this);\r
   }\r
+\r
+  @Override\r
+  public boolean spOnly() {    \r
+    return false;\r
+  }\r
 }\r
index 4dcb108..ce8c50b 100644 (file)
@@ -208,4 +208,9 @@ public class SearchCommand extends Pazpar2Command implements ServiceProxyCommand
     return this;\r
   }\r
 \r
+  @Override\r
+  public boolean spOnly() {\r
+    return false;\r
+  }\r
+\r
 }\r
index 11d624f..328d578 100644 (file)
@@ -25,4 +25,9 @@ public class SettingsCommand extends Pazpar2Command implements ServiceProxyComma
     return this;\r
   }\r
 \r
+  @Override\r
+  public boolean spOnly() {\r
+    return false;\r
+  }\r
+\r
 }\r
index 90e3cd0..c37158b 100644 (file)
@@ -110,4 +110,9 @@ public class ShowCommand extends Pazpar2Command implements ServiceProxyCommand {
     return this;\r
   }\r
 \r
+  @Override\r
+  public boolean spOnly() {\r
+    return false;\r
+  }\r
+\r
 }\r
index 0243315..590808d 100644 (file)
@@ -24,5 +24,10 @@ public class StatCommand extends Pazpar2Command implements ServiceProxyCommand {
     return this;\r
   }\r
 \r
+  @Override\r
+  public boolean spOnly() {    \r
+    return false;\r
+  }\r
+\r
 \r
 }\r
index bc3e8c2..5db510c 100644 (file)
@@ -39,6 +39,11 @@ public class TermlistCommand extends Pazpar2Command implements ServiceProxyComma
   public ServiceProxyCommand getSp() {\r
     return this;\r
   }\r
+\r
+  @Override\r
+  public boolean spOnly() {    \r
+    return false;\r
+  }\r
   \r
   \r
 \r
index 4d72d61..eeddd9c 100644 (file)
@@ -23,4 +23,9 @@ public class AuthCommand extends Pazpar2Command implements ServiceProxyCommand {
   public ServiceProxyCommand getSp() {\r
     return this;\r
   }\r
+\r
+  @Override\r
+  public boolean spOnly() {\r
+    return true;\r
+  }\r
 }\r
index 65e1f26..27be628 100644 (file)
@@ -22,4 +22,9 @@ public class CategoriesCommand extends Pazpar2Command implements ServiceProxyCom
     return this;\r
   }\r
 \r
+  @Override\r
+  public boolean spOnly() {\r
+    return true;\r
+  }\r
+\r
 }\r
index 99846b5..0662df1 100644 (file)
@@ -30,5 +30,11 @@ public class RecordCommandSp  implements Serializable, ServiceProxyCommand {
     return command.getParameterValue("acefilter");\r
   }\r
 \r
+  @Override\r
+  public boolean spOnly() {\r
+    return true;\r
+  }\r
+\r
+  \r
 \r
 }\r
index 04c9c3f..f052c37 100644 (file)
@@ -65,12 +65,12 @@ public class StateManager implements Serializable {
    */\r
   public void checkIn(Pazpar2Command command) {\r
     if (getCurrentState().stateMutating(command)) {\r
-      logger.debug("State changed by: " + command.getCommandName());\r
+      logger.info("State changed by: " + command.getCommandName());\r
       Pazpar2State state = new Pazpar2State(getCurrentState(),command);\r
       states.put(state.getKey(), state);\r
       currentKey = state.getKey();\r
       hasPendingStateChange(command.getCommandName(),new Boolean(true));      \r
-      logger.debug("Updating " + listeners.size() + " listener(s) with state change from " + command);\r
+      logger.info("Updating " + listeners.size() + " listener(s) with state change from " + command);\r
       updateListeners(command.getCommandName());      \r
     } else {\r
       logger.debug("Command " + command.getCommandName() + " not found to change the state [" + command.getEncodedQueryString() + "]");\r
@@ -100,18 +100,18 @@ public class StateManager implements Serializable {
    */\r
   public void setCurrentStateKey(String key) {    \r
     if (currentKey.equals(key)) {\r
-      logger.debug("Ignoring request from UI to set state key, already has that key [" + key + "]");\r
+      logger.info("Ignoring request from UI to set state key, already has that key [" + key + "]");\r
     } else {\r
-      logger.debug("Request from UI to change state key from: [" + currentKey + "] to ["+key+"]");\r
+      logger.info("Request from UI to change state key from: [" + currentKey + "] to ["+key+"]");\r
       if (states.get(key)==null) {\r
         logger.error("Have no state registered for the key ["+ key +"].");\r
         if (key == null || key.length()==0) {\r
-          logger.info("Recived an empty key, retaining currentKey [" + currentKey + "]");\r
+          logger.debug("Recived an empty key, retaining currentKey [" + currentKey + "]");\r
           key = currentKey;\r
         } else {\r
           if (states.get(currentKey) != null) {\r
             if (key.equals("#1")) {\r
-              logger.info("Initial key created [" + key + "], but already got a state registered for the current key [" + currentKey + "]. Retaining current key.");\r
+              logger.debug("Initial key created [" + key + "], but already got a state registered for the current key [" + currentKey + "]. Retaining current key.");\r
               key = currentKey;\r
             } else {\r
               logger.info("Current search state cached under both new key [" + key + "] and current key [" + currentKey + "]");\r