Adds filter attribute, renames target id filter attribute
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / pz2utils4jsf / pazpar2 / Pz2Session.java
index d506678..ed4c088 100644 (file)
@@ -42,14 +42,14 @@ public class Pz2Session implements Pz2Interface {
   \r
   protected List<ErrorInterface> configurationErrors = null;\r
   protected SearchClient searchClient = null;   \r
-  protected TargetFilter targetFilter = null;  \r
+  protected SingleTargetFilter singleTargetFilter = null;  \r
   protected ResultsPager pager = null; \r
     \r
   public Pz2Session () {\r
     logger.info("Instantiating pz2 session object [" + Utils.objectId(this) + "]");      \r
   }\r
     \r
-  public void init(SearchClient searchClient, ConfigurationReader configReader) {\r
+  public void configureClient(SearchClient searchClient, ConfigurationReader configReader) {\r
     configurationErrors = new ArrayList<ErrorInterface>();\r
     errorHelper = new ErrorHelper(configReader);    \r
     logger.debug(Utils.objectId(this) + " will configure search client for the session");\r
@@ -62,8 +62,7 @@ public class Pz2Session implements Pz2Interface {
       // To avoid that, a context free client is cloned from the context \r
       // dependent one. \r
       // If propagation to threads gets supported, the cloning can go. \r
-      this.searchClient = searchClient.cloneMe();   \r
-      \r
+      this.searchClient = searchClient.cloneMe();         \r
     } catch (ConfigurationException e) {\r
       configurationErrors.add(new ConfigurationError("Search Client","Configuration",e.getMessage(),new ErrorHelper(configReader)));          \r
     } \r
@@ -79,6 +78,7 @@ public class Pz2Session implements Pz2Interface {
   public void doSearch() { \r
     queryStates.hasPendingStateChange("search",false);\r
     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
     doCommand("search");    \r
@@ -127,7 +127,12 @@ public class Pz2Session implements Pz2Interface {
            Pazpar2ResponseData responseObject = Pazpar2ResponseParser.getParser().getDataObject(response);\r
            dataObjects.put(commandName, responseObject);        \r
         }\r
-        return getActiveClients();\r
+        if (commands.equals("record")) {\r
+          logger.debug("Record: Active clients: "+getRecord().getActiveClients());\r
+          return getRecord().getActiveClients();\r
+        } else {\r
+          return getActiveClients();\r
+        }  \r
       } else {\r
         logger.debug("Skipped requests for " + commands + " as there's not yet a query."); \r
         resetDataObjects();\r
@@ -169,29 +174,29 @@ public class Pz2Session implements Pz2Interface {
     doSearch();\r
   }\r
   \r
-  public void setTargetFilter (String targetId, String targetName) {    \r
-    if (hasTargetFilter(new TargetFilter(targetId,targetName))) {\r
-      logger.debug("Already using target filter " + this.targetFilter.getFilterExpression());\r
+  public void setSingleTargetFilter (String targetId, String targetName) {    \r
+    if (hasSingleTargetFilter(new SingleTargetFilter(targetId,targetName))) {\r
+      logger.debug("Already using target filter " + this.singleTargetFilter.getFilterExpression());\r
     } else {      \r
-      this.targetFilter = new TargetFilter(targetId,targetName);\r
-      setCommandParameter("search",new CommandParameter("filter","=",this.targetFilter.getFilterExpression()));      \r
+      this.singleTargetFilter = new SingleTargetFilter(targetId,targetName);\r
+      setCommandParameter("search",new CommandParameter("filter","=",this.singleTargetFilter.getFilterExpression()));      \r
       doSearch();\r
     }    \r
   }\r
 \r
-  public TargetFilter getTargetFilter () {\r
-    return targetFilter;\r
+  public SingleTargetFilter getSingleTargetFilter () {\r
+    return singleTargetFilter;\r
   }\r
     \r
-  public void removeTargetFilter () {\r
-    logger.debug("Removing target filter " + targetFilter.getFilterExpression());\r
-    this.targetFilter = null;\r
+  public void removeSingleTargetFilter () {\r
+    logger.debug("Removing target filter " + singleTargetFilter.getFilterExpression());\r
+    this.singleTargetFilter = null;\r
     removeCommandParameter("search","filter");         \r
     doSearch();\r
   }\r
   \r
-  public boolean hasTargetFilter() {\r
-    return targetFilter != null;    \r
+  public boolean hasSingleTargetFilter() {\r
+    return singleTargetFilter != null;    \r
   }\r
         \r
   public void setSort (String sortOption) {\r
@@ -228,22 +233,29 @@ public class Pz2Session implements Pz2Interface {
   public int getStart() {\r
     return getCommandParameterValue("show","start",0);\r
   }\r
-        \r
+          \r
   public String toggleRecord (String recId) {\r
     if (hasRecord(recId)) {\r
       removeCommand("record");  \r
       dataObjects.put("record", new RecordResponse());\r
       return "";\r
     } else {\r
-      return updateRecord(recId);\r
+      setRecordId(recId);\r
+      return doCommand("record");\r
     }\r
   }\r
   \r
-  private String updateRecord(String recId) {    \r
-    setCommandParameter("record",new CommandParameter("id","=",recId));    \r
-    return doCommand("record");    \r
+  @Override\r
+  public void setRecordId(String recId) {\r
+    setCommandParameter("record",new CommandParameter("id","=",recId));\r
   }\r
   \r
+  @Override\r
+  public String getRecordId () {\r
+    return getCommandParameterValue("record","recid","");\r
+  }\r
+  \r
+  @Override\r
   public boolean hasRecord (String recId) {\r
     return getCommand("record").hasParameters() && getRecord().getRecId().equals(recId);\r
   }\r
@@ -336,8 +348,8 @@ public class Pz2Session implements Pz2Interface {
   }\r
 \r
     \r
-  protected boolean hasTargetFilter(TargetFilter targetFilter) {\r
-    return hasTargetFilter() && targetFilter.equals(this.targetFilter);\r
+  protected boolean hasSingleTargetFilter(SingleTargetFilter targetFilter) {\r
+    return hasSingleTargetFilter() && targetFilter.equals(this.singleTargetFilter);\r
   }\r
   \r
   protected boolean hasQuery() {\r
@@ -368,14 +380,14 @@ public class Pz2Session implements Pz2Interface {
   \r
   protected void handleQueryStateChanges (String commands) {\r
     if (queryStates.hasPendingStateChange("search")) { \r
-      logger.debug("Found pending search change. Doing search before updating " + commands);\r
+      logger.debug("Found pending search change. Doing search before updating " + commands);      \r
       doSearch();\r
     } \r
     if (queryStates.hasPendingStateChange("record") && ! commands.equals("record")) {        \r
       logger.debug("Found pending record ID change. Doing record before updating " + commands);\r
       queryStates.hasPendingStateChange("record",false);\r
       if (getCommand("record").hasParameters()) {\r
-        updateRecord(getCommand("record").getParameter("id").getSimpleValue());\r
+        update("record");\r
       } else {\r
         removeCommand("record");  \r
         dataObjects.put("record", new RecordResponse());\r
@@ -460,5 +472,19 @@ public class Pz2Session implements Pz2Interface {
     dataObjects.put("record", new RecordResponse());\r
     dataObjects.put("search", new SearchResponse());\r
   }\r
+\r
+  @Override\r
+  public void setFilter(String filterExpression) {\r
+    logger.debug("Setting filter to " + filterExpression);\r
+    setCommandParameter("search",new CommandParameter("filter","=",filterExpression));    \r
+  }\r
+  \r
+  public String getFilter() {\r
+    return getCommandParameterValueSimple("search", "filter", "");\r
+  }\r
+  \r
+  public boolean hasFilter () {\r
+    return getFilter().length()>0;\r
+  }\r
   \r
 }\r