Creates read-only command for optimization
authorNiels Erik G. Nielsen <nielserik@indexdata.com>
Sat, 13 Apr 2013 17:18:09 +0000 (13:18 -0400)
committerNiels Erik G. Nielsen <nielserik@indexdata.com>
Sat, 13 Apr 2013 17:18:09 +0000 (13:18 -0400)
When a class retrieves a command, it's 'checked out' from the state
manager, meaning that it is cloned as to not mutate the current state
in case the command has it's parameters modified.

Oftentimes cloning is obsolete however - when the client only wants to
read the values - ie. for log statements or for actual execution.

13 files changed:
src/main/java/com/indexdata/pz2utils4jsf/pazpar2/CommandThread.java
src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Bean.java
src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Client.java
src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Interface.java
src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2ProxyBean.java
src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Session.java
src/main/java/com/indexdata/pz2utils4jsf/pazpar2/SearchClient.java
src/main/java/com/indexdata/pz2utils4jsf/pazpar2/commands/CommandReadOnly.java [new file with mode: 0644]
src/main/java/com/indexdata/pz2utils4jsf/pazpar2/commands/Pazpar2Command.java
src/main/java/com/indexdata/pz2utils4jsf/pazpar2/commands/Pazpar2Commands.java
src/main/java/com/indexdata/pz2utils4jsf/pazpar2/commands/SearchCommand.java
src/main/java/com/indexdata/pz2utils4jsf/pazpar2/sp/ServiceProxyClient.java
src/main/java/com/indexdata/pz2utils4jsf/pazpar2/state/StateManager.java

index 323ef78..72a4337 100644 (file)
@@ -6,18 +6,18 @@ import java.io.IOException;
 import org.apache.log4j.Logger;\r
 \r
 import com.indexdata.masterkey.pazpar2.client.exceptions.Pazpar2ErrorException;\r
-import com.indexdata.pz2utils4jsf.pazpar2.commands.Pazpar2Command;\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.CommandReadOnly;\r
 import com.indexdata.pz2utils4jsf.pazpar2.data.CommandError;\r
 \r
 public class CommandThread extends Thread {\r
 \r
   private static Logger logger = Logger.getLogger(CommandThread.class);\r
-  Pazpar2Command command;\r
+  CommandReadOnly command;\r
   SearchClient client;\r
   private ByteArrayOutputStream baos = new ByteArrayOutputStream();\r
   private StringBuilder response = new StringBuilder("");  \r
   \r
-  public CommandThread (Pazpar2Command command, SearchClient client) {\r
+  public CommandThread (CommandReadOnly command, SearchClient client) {\r
     this.command = command;\r
     this.client = client;\r
   }\r
@@ -72,7 +72,7 @@ public class CommandThread extends Thread {
     return response.toString();\r
   }\r
     \r
-  public Pazpar2Command getCommand() {\r
+  public CommandReadOnly getCommand() {\r
     return command;\r
   }\r
 \r
index 5838626..82f71ed 100644 (file)
@@ -14,7 +14,6 @@ import org.apache.log4j.Logger;
 import com.indexdata.pz2utils4jsf.config.ConfigurationReader;\r
 import com.indexdata.pz2utils4jsf.controls.ResultsPager;\r
 import com.indexdata.pz2utils4jsf.errors.ErrorInterface;\r
-import com.indexdata.pz2utils4jsf.pazpar2.commands.Pazpar2Command;\r
 import com.indexdata.pz2utils4jsf.pazpar2.data.ByTarget;\r
 import com.indexdata.pz2utils4jsf.pazpar2.data.RecordResponse;\r
 import com.indexdata.pz2utils4jsf.pazpar2.data.ShowResponse;\r
@@ -61,7 +60,7 @@ public class Pz2Bean implements Pz2Interface, Serializable {
    * @see com.indexdata.pz2utils4jsf.pazpar2.Pz2Interface#doSearch()\r
    */\r
   public void doSearch() {\r
-    logger.info(Utils.objectId(this) + " doing search for "+this.getQuery());\r
+    logger.info(Utils.objectId(this) + " doing search for "+pz2.getCommandReadOnly("search").getParameterValue("query"));\r
     pz2.doSearch();\r
   }\r
 \r
@@ -89,9 +88,11 @@ public class Pz2Bean implements Pz2Interface, Serializable {
   /* (non-Javadoc)\r
    * @see com.indexdata.pz2utils4jsf.pazpar2.Pz2Interface#getQuery()\r
    */\r
+  /*\r
   public String getQuery() {\r
     return pz2.getQuery();\r
   }\r
+  */\r
 \r
   /* (non-Javadoc)\r
    * @see com.indexdata.pz2utils4jsf.pazpar2.Pz2Interface#setFacet(java.lang.String, java.lang.String)\r
@@ -324,8 +325,4 @@ public class Pz2Bean implements Pz2Interface, Serializable {
     return pz2.getRecordId();\r
   }\r
   \r
-  public Pazpar2Command getSearchCommand () {\r
-    return pz2.getCommand("search");\r
-  }\r
-\r
 }\r
index affd08d..058a3e1 100644 (file)
@@ -26,7 +26,7 @@ import com.indexdata.masterkey.pazpar2.client.exceptions.ProxyErrorException;
 import com.indexdata.pz2utils4jsf.config.Configuration;\r
 import com.indexdata.pz2utils4jsf.config.ConfigurationReader;\r
 import com.indexdata.pz2utils4jsf.errors.ConfigurationException;\r
-import com.indexdata.pz2utils4jsf.pazpar2.commands.Pazpar2Command;\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.CommandReadOnly;\r
 import com.indexdata.pz2utils4jsf.utils.Utils;\r
 \r
 @Named @SessionScoped \r
@@ -85,13 +85,13 @@ public class Pz2Client implements SearchClient {
   }\r
   \r
   @Override\r
-  public void setSearchCommand(Pazpar2Command command) {\r
+  public void setSearchCommand(CommandReadOnly command) {\r
     ClientCommand clientCommand = new ClientCommand(command.getName(), command.getEncodedQueryString());\r
     client.setSearchCommand(clientCommand);    \r
   }\r
 \r
   @Override\r
-  public CommandResponse executeCommand(Pazpar2Command command, ByteArrayOutputStream baos) \r
+  public CommandResponse executeCommand(CommandReadOnly command, ByteArrayOutputStream baos) \r
        throws Pazpar2ErrorException, IOException {\r
     ClientCommand clientCommand = new ClientCommand(command.getName(), command.getEncodedQueryString());\r
     Pazpar2HttpResponse pz2HttpResponse = client.executeCommand(clientCommand, baos);\r
index 8a59cfe..789a0a4 100644 (file)
@@ -57,13 +57,14 @@ public interface Pz2Interface extends Serializable {
    * @param query a query on pazpar2 query syntax\r
    * \r
    */\r
-  public void setQuery (String query);\r
+  //public void setQuery (String query);\r
+  \r
   \r
   /**\r
    * Gets the current query  \r
    * @return a pazpar2 query string\r
    */\r
-  public String getQuery ();\r
+  //public String getQuery ();\r
   \r
   /**\r
    * Sets a facet to limit the current query by,\r
index ae742f3..15821ea 100644 (file)
@@ -13,6 +13,7 @@ import org.apache.log4j.Logger;
 \r
 import com.indexdata.pz2utils4jsf.config.Configuration;\r
 import com.indexdata.pz2utils4jsf.config.ConfigurationReader;\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.SearchCommand;\r
 import com.indexdata.pz2utils4jsf.pazpar2.sp.ForServiceProxy;\r
 import com.indexdata.pz2utils4jsf.pazpar2.sp.ServiceProxyClient;\r
 import com.indexdata.pz2utils4jsf.pazpar2.sp.ServiceProxyInterface;\r
@@ -49,7 +50,7 @@ public class Pz2ProxyBean extends Pz2Bean implements ServiceProxyInterface {
     session().setUser(user);\r
     session().resetDataObjects();\r
     session().removeCommand("record");\r
-    session().setQuery(null);\r
+    ((SearchCommand)session().getCommand("search")).setQuery(null);\r
     return session().login(navigateTo);\r
   }\r
 \r
@@ -90,7 +91,7 @@ public class Pz2ProxyBean extends Pz2Bean implements ServiceProxyInterface {
   public void setServiceProxyUrl(String url) {\r
     logger.info("Setting Service Proxy url: " + url);\r
     session().setServiceProxyUrl(url); \r
-    session().setQuery(null);\r
+    ((SearchCommand)session().getCommand("search")).setQuery(null);\r
     session().resetDataObjects();\r
   }\r
 \r
index cdb1a6b..fba8a20 100644 (file)
@@ -7,7 +7,6 @@ import java.util.StringTokenizer;
 import java.util.concurrent.ConcurrentHashMap;\r
 \r
 import javax.annotation.PostConstruct;\r
-import javax.enterprise.context.SessionScoped;\r
 import javax.inject.Inject;\r
 \r
 import org.apache.log4j.Logger;\r
@@ -19,8 +18,10 @@ import com.indexdata.pz2utils4jsf.errors.ConfigurationException;
 import com.indexdata.pz2utils4jsf.errors.ErrorHelper;\r
 import com.indexdata.pz2utils4jsf.errors.ErrorInterface;\r
 import com.indexdata.pz2utils4jsf.pazpar2.commands.CommandParameter;\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.CommandReadOnly;\r
 import com.indexdata.pz2utils4jsf.pazpar2.commands.Pazpar2Command;\r
 import com.indexdata.pz2utils4jsf.pazpar2.commands.Pazpar2Commands;\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.SearchCommand;\r
 import com.indexdata.pz2utils4jsf.pazpar2.data.ByTarget;\r
 import com.indexdata.pz2utils4jsf.pazpar2.data.CommandError;\r
 import com.indexdata.pz2utils4jsf.pazpar2.data.Pazpar2ResponseData;\r
@@ -95,7 +96,7 @@ public class Pz2Session implements Pz2Interface, StateListener {
     resetDataObjects();\r
     removeCommand("record");\r
     setCommandParameter("show",new CommandParameter("start","=",0));    \r
-    logger.debug(Utils.objectId(this) + " is searching using "+getCommand("search").getParameter("query").getEncodedQueryString());\r
+    logger.debug(Utils.objectId(this) + " is searching using "+req.getCommandReadOnly("search").getUrlEncodedParameterValue("query"));\r
     doCommand("search");    \r
   }\r
       \r
@@ -123,7 +124,7 @@ public class Pz2Session implements Pz2Interface, StateListener {
         List<CommandThread> threadList = new ArrayList<CommandThread>();\r
         StringTokenizer tokens = new StringTokenizer(commands,",");\r
         while (tokens.hasMoreElements()) {          \r
-          threadList.add(new CommandThread(getCommand(tokens.nextToken()),searchClient));            \r
+          threadList.add(new CommandThread(req.getCommandReadOnly(tokens.nextToken()),searchClient));            \r
         }\r
         for (CommandThread thread : threadList) {\r
           thread.start();\r
@@ -160,6 +161,7 @@ public class Pz2Session implements Pz2Interface, StateListener {
     \r
   }\r
         \r
+  /*\r
   public void setQuery (String query) {\r
     logger.debug("Creating new command parameter for " + query);\r
     setCommandParameter("search",new CommandParameter("query","=",query));\r
@@ -168,10 +170,11 @@ public class Pz2Session implements Pz2Interface, StateListener {
   public String getQuery () {\r
     return getCommandParameterValueSimple("search","query",null);\r
   }\r
+  */\r
   \r
   public void setFacet (String facetKey, String term) {           \r
     if (term != null && term.length()>0) {   \r
-      Pazpar2Command command = getCommand("search");\r
+      Pazpar2Command command = req.getCommand("search");\r
       command.getParameter("query").addExpression(new Expression(facetKey,"=",term));\r
       stateMgr.checkIn(command);\r
       doSearch();\r
@@ -181,13 +184,14 @@ public class Pz2Session implements Pz2Interface, StateListener {
   public void setFacetOnQuery (String facetKey, String term) {\r
     String facetExpression = facetKey + "=" + term;    \r
     if (term != null && term.length()>0) {\r
-      setCommandParameter("search",new CommandParameter("query","=", getQuery() + " and " + facetExpression));\r
+      String currentQuery= req.getCommandReadOnly("search").getParameterValue("query");\r
+      setCommandParameter("search",new CommandParameter("query","=", currentQuery + " and " + facetExpression));\r
       doSearch();        \r
     }            \r
   }\r
       \r
   public void removeFacet(String facetKey, String term) {\r
-    Pazpar2Command command = getCommand("search");\r
+    SearchCommand command = req.getSearch();\r
     command.getParameter("query").removeExpression(new Expression(facetKey,"=",term));\r
     stateMgr.checkIn(command);\r
     doSearch();\r
@@ -276,7 +280,7 @@ public class Pz2Session implements Pz2Interface, StateListener {
   \r
   @Override\r
   public boolean hasRecord (String recId) {\r
-    return getCommand("record").hasParameters() && getRecord().getRecId().equals(recId);\r
+    return req.getCommandReadOnly("record").hasParameters() && getRecord().getRecId().equals(recId);\r
   }\r
       \r
   public ShowResponse getShow () {\r
@@ -371,8 +375,7 @@ public class Pz2Session implements Pz2Interface, StateListener {
     return hasSingleTargetFilter() && targetFilter.equals(this.singleTargetFilter);\r
   }\r
   \r
-  protected boolean hasQuery() {\r
-    logger.debug("req is " + req);\r
+  protected boolean hasQuery() {    \r
     return req.getSearch().getParameter("query") != null && req.getSearch().getParameter("query").getValueWithExpressions().length()>0;\r
   }\r
     \r
@@ -406,7 +409,7 @@ public class Pz2Session implements Pz2Interface, StateListener {
     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 (getCommand("record").hasParameters()) {\r
+      if (req.getCommandReadOnly("record").hasParameters()) {\r
         update("record");\r
       } else {\r
         removeCommand("record");  \r
@@ -439,66 +442,69 @@ public class Pz2Session implements Pz2Interface, StateListener {
    * @return\r
    */\r
   protected Pazpar2Command getCommand(String name) {\r
-    return stateMgr.checkOut(name);\r
+    return req.getCommand(name);\r
   }\r
   \r
+  /** \r
+   * Returns an interface to a Pazpar2Command with only String getters.\r
+   * \r
+   * Since the command cannot be modified (unless it is cast) we can avoid \r
+   * cloning it before returning it from the current state. \r
+   * It can be used for log statements, checks and for performing the \r
+   * actual pazpar2 request. \r
+   * \r
+   * @param name\r
+   * @return\r
+   */\r
+  protected CommandReadOnly getCommandReadOnly(String name) {\r
+    return req.getCommandReadOnly(name);\r
+  }\r
+\r
+  \r
   protected void setCommandParameter(String commandName, CommandParameter parameter) {\r
     logger.debug("Setting parameter for " + commandName + ": " + parameter);\r
-    Pazpar2Command command = getCommand(commandName);\r
+    Pazpar2Command command = req.getCommand(commandName);\r
     command.setParameter(parameter);\r
     stateMgr.checkIn(command);    \r
   }\r
   \r
   \r
   protected void removeCommandParameter(String commandName, String parameterName) {\r
-    Pazpar2Command command = getCommand(commandName);\r
+    Pazpar2Command command = req.getCommand(commandName);\r
     command.removeParameter(parameterName);\r
     stateMgr.checkIn(command);    \r
   }\r
   \r
   protected void removeCommand (String commandName) {\r
-    Pazpar2Command command = getCommand(commandName);\r
+    Pazpar2Command command = req.getCommand(commandName);\r
     command.removeParameters();\r
     stateMgr.checkIn(command);\r
   }\r
     \r
   protected String getCommandParameterValue (String commandName, String parameterName, String defaultValue) {    \r
-    Pazpar2Command command = getCommand(commandName);\r
-    if (command != null) {\r
-      CommandParameter parameter = command.getParameter(parameterName);\r
-      if (parameter != null) {\r
-        return parameter.getValueWithExpressions();\r
-      }\r
-    }\r
-    return defaultValue;    \r
-  }\r
-  \r
-  protected String getCommandParameterValueSimple (String commandName, String parameterName, String defaultValue) {    \r
-    Pazpar2Command command = getCommand(commandName);\r
+    CommandReadOnly command = req.getCommandReadOnly(commandName);\r
     if (command != null) {\r
-      CommandParameter parameter = command.getParameter(parameterName);\r
+      String parameter = command.getParameterValue(parameterName);\r
       if (parameter != null) {\r
-        return parameter.getSimpleValue();\r
+        return parameter;\r
       }\r
     }\r
     return defaultValue;    \r
   }\r
-\r
-  \r
+    \r
   protected int getCommandParameterValue (String commandName, String parameterName, int defaultValue) {\r
-    Pazpar2Command command = getCommand(commandName);\r
+    CommandReadOnly command = req.getCommandReadOnly(commandName);\r
     if (command != null) {\r
-      CommandParameter parameter = command.getParameter(parameterName);\r
+      String parameter = command.getParameterValue(parameterName);\r
       if (parameter != null) {\r
-        return Integer.parseInt(parameter.getSimpleValue());\r
+        return Integer.parseInt(parameter);\r
       }\r
     }\r
     return defaultValue;    \r
   }\r
 \r
-  protected String doCommand(String commandName) {     \r
-    Pazpar2Command command = req.getCommand(commandName);    \r
-    logger.debug(command.getEncodedQueryString() + ": Results for "+ getCommand("search").getEncodedQueryString());\r
+  protected String doCommand(String commandName) {             \r
+    logger.debug(req.getCommandReadOnly(commandName).getEncodedQueryString() + ": Results for "+ req.getCommandReadOnly("search").getEncodedQueryString());\r
     return update(commandName);\r
   }\r
   \r
@@ -520,7 +526,7 @@ public class Pz2Session implements Pz2Interface, StateListener {
   }\r
   \r
   public String getFilter() {\r
-    return getCommandParameterValueSimple("search", "filter", "");\r
+    return getCommandParameterValue("search", "filter", "");\r
   }\r
   \r
   public boolean hasFilter () {\r
index c7d0cf9..acce660 100644 (file)
@@ -7,12 +7,12 @@ import java.io.Serializable;
 import com.indexdata.masterkey.pazpar2.client.exceptions.Pazpar2ErrorException;\r
 import com.indexdata.pz2utils4jsf.config.Configurable;\r
 import com.indexdata.pz2utils4jsf.config.Configuration;\r
-import com.indexdata.pz2utils4jsf.pazpar2.commands.Pazpar2Command;\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.CommandReadOnly;\r
 \r
 public interface SearchClient extends Configurable, Serializable {\r
   \r
-  public void setSearchCommand(Pazpar2Command command);\r
-  public CommandResponse executeCommand(Pazpar2Command command, ByteArrayOutputStream baos) throws Pazpar2ErrorException, IOException;\r
+  public void setSearchCommand(CommandReadOnly command);\r
+  public CommandResponse executeCommand(CommandReadOnly command, ByteArrayOutputStream baos) throws Pazpar2ErrorException, IOException;\r
   public SearchClient cloneMe();\r
   public boolean isAuthenticatingClient();  \r
   public Configuration getConfiguration();\r
diff --git a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/commands/CommandReadOnly.java b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/commands/CommandReadOnly.java
new file mode 100644 (file)
index 0000000..68f334b
--- /dev/null
@@ -0,0 +1,21 @@
+package com.indexdata.pz2utils4jsf.pazpar2.commands;\r
+\r
+/**\r
+ * Interface to Pazpar2Command to be used when the given command\r
+ * should not change. Meant to avoid redundant cloning of commands\r
+ * for potential state changes. \r
+ * \r
+ * @author Niels Erik\r
+ *\r
+ */\r
+public interface CommandReadOnly {\r
+\r
+  public String getName();\r
+  public String getValueWithExpressions();\r
+  public String getEncodedQueryString();\r
+  public boolean hasParameters();\r
+  public boolean hasParameterSet(String parameterName);\r
+  public String getParameterValue(String parameterName);\r
+  public String getUrlEncodedParameterValue(String parameterName);\r
+  \r
+}\r
index a421ff8..680e37d 100644 (file)
@@ -8,7 +8,7 @@ import org.apache.log4j.Logger;
 \r
 import com.indexdata.pz2utils4jsf.pazpar2.state.StateManager;\r
 \r
-public class Pazpar2Command implements Serializable  {\r
+public class Pazpar2Command implements CommandReadOnly, Serializable  {\r
   \r
   private static Logger logger = Logger.getLogger(Pazpar2Command.class);\r
   private static final long serialVersionUID = -6825491856480675917L;   \r
@@ -108,5 +108,18 @@ public class Pazpar2Command implements Serializable  {
   public String toString () {\r
     return parameters.toString();\r
   }\r
+\r
+  @Override\r
+  public String getParameterValue(String parameterName) {\r
+    return getParameter(parameterName).getValueWithExpressions();\r
+    \r
+  }\r
+\r
+  @Override\r
+  public String getUrlEncodedParameterValue(String parameterName) {\r
+    return getParameter(parameterName).getEncodedQueryString();\r
+  }\r
+  \r
+  \r
   \r
 }\r
index b0e13b3..e6ecec4 100644 (file)
@@ -78,5 +78,9 @@ public class Pazpar2Commands implements Serializable {
   public Pazpar2Command getCommand(String name) {\r
     return stateMgr.checkOut(name);\r
   }\r
+  \r
+  public CommandReadOnly getCommandReadOnly(String name) {\r
+    return stateMgr.getCommand(name);\r
+  }\r
     \r
 }\r
index 9486e86..25dc68e 100644 (file)
@@ -20,13 +20,11 @@ public class SearchCommand extends Pazpar2Command {
     setParameter(new CommandParameter("session","=",sessionId));\r
   }\r
   \r
-  public void setQuery(String query) {\r
-    logger.info("writing query: " + query);\r
+  public void setQuery(String query) {    \r
     setParameter(new CommandParameter("query","=",query));\r
   }\r
   \r
-  public String getQuery () {\r
-    logger.info("retrieving query");\r
+  public String getQuery () {    \r
     return getParameter("query") == null ? null  : getParameter("query").getValueWithExpressions();\r
   }\r
   \r
index 2f96b13..4aee1cf 100644 (file)
@@ -42,6 +42,7 @@ import com.indexdata.pz2utils4jsf.errors.ConfigurationException;
 import com.indexdata.pz2utils4jsf.pazpar2.CommandResponse;\r
 import com.indexdata.pz2utils4jsf.pazpar2.SearchClient;\r
 import com.indexdata.pz2utils4jsf.pazpar2.commands.CommandParameter;\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.CommandReadOnly;\r
 import com.indexdata.pz2utils4jsf.pazpar2.commands.Pazpar2Command;\r
 import com.indexdata.pz2utils4jsf.pazpar2.sp.auth.AuthenticationEntity;\r
 import com.indexdata.pz2utils4jsf.pazpar2.sp.auth.ServiceProxyUser;\r
@@ -158,7 +159,7 @@ public class ServiceProxyClient implements SearchClient {
    * @throws ClientProtocolException\r
    * @throws IOException\r
    */\r
-  private byte[] send(Pazpar2Command command) throws ClientProtocolException, IOException {\r
+  private byte[] send(CommandReadOnly command) throws ClientProtocolException, IOException {\r
     String url = serviceUrl + "?" + command.getEncodedQueryString(); \r
     logger.info("Sending request "+url);    \r
     HttpGet httpget = new HttpGet(url);     \r
@@ -195,12 +196,12 @@ public class ServiceProxyClient implements SearchClient {
   }\r
 \r
   @Override\r
-  public void setSearchCommand(Pazpar2Command command) {\r
+  public void setSearchCommand(CommandReadOnly command) {\r
     // Do nothing, Service Proxy is handling this    \r
   }\r
 \r
   @Override\r
-  public CommandResponse executeCommand(Pazpar2Command command,\r
+  public CommandResponse executeCommand(CommandReadOnly command,\r
       ByteArrayOutputStream baos) throws Pazpar2ErrorException, IOException {\r
     byte[] response = send(command);\r
     baos.write(response);\r
index 14951e6..4398efa 100644 (file)
@@ -11,6 +11,7 @@ import javax.enterprise.context.SessionScoped;
 \r
 import org.apache.log4j.Logger;\r
 \r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.CommandReadOnly;\r
 import com.indexdata.pz2utils4jsf.pazpar2.commands.Pazpar2Command;\r
 import com.indexdata.pz2utils4jsf.utils.Utils;\r
 \r
@@ -83,10 +84,14 @@ public class StateManager implements Serializable {
    * @return Copy this state's instance of the given command\r
    */\r
   public Pazpar2Command checkOut (String commandName) {\r
-    logger.info("Getting " + commandName + " from state manager.");\r
+    logger.debug("Getting " + commandName + " from state manager.");\r
     return getCurrentState().getCommand(commandName).copy();\r
   }\r
   \r
+  public CommandReadOnly getCommand (String commandName) {\r
+    return getCurrentState().getCommand(commandName);\r
+  }\r
+  \r
   public Pazpar2State getCurrentState () {\r
     return states.get(currentKey);\r
   }\r