Packaging pazpar2/io error messages in response objects
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / pz2utils4jsf / pazpar2 / Pz2Session.java
index 53e542d..822b416 100644 (file)
@@ -1,12 +1,15 @@
 package com.indexdata.pz2utils4jsf.pazpar2;\r
 \r
-import java.io.Serializable;\r
+import java.io.IOException;\r
 import java.util.ArrayList;\r
 import java.util.List;\r
 import java.util.Map;\r
 import java.util.StringTokenizer;\r
 import java.util.concurrent.ConcurrentHashMap;\r
 \r
+import javax.enterprise.context.SessionScoped;\r
+import javax.inject.Named;\r
+\r
 import org.apache.log4j.Logger;\r
 \r
 import com.indexdata.masterkey.pazpar2.client.exceptions.ProxyErrorException;\r
@@ -16,13 +19,16 @@ import com.indexdata.pz2utils4jsf.pazpar2.data.ByTarget;
 import com.indexdata.pz2utils4jsf.pazpar2.data.Pazpar2ResponseData;\r
 import com.indexdata.pz2utils4jsf.pazpar2.data.Pazpar2ResponseParser;\r
 import com.indexdata.pz2utils4jsf.pazpar2.data.RecordResponse;\r
+import com.indexdata.pz2utils4jsf.pazpar2.data.SearchResponse;\r
 import com.indexdata.pz2utils4jsf.pazpar2.data.ShowResponse;\r
 import com.indexdata.pz2utils4jsf.pazpar2.data.StatResponse;\r
 import com.indexdata.pz2utils4jsf.pazpar2.data.TermListsResponse;\r
 import com.indexdata.pz2utils4jsf.pazpar2.data.TermResponse;\r
 import com.indexdata.pz2utils4jsf.pazpar2.state.QueryStates;\r
+import com.indexdata.pz2utils4jsf.utils.Utils;\r
 \r
-public class Pz2Session implements Serializable, Pz2Interface {\r
+@Named @SessionScoped  \r
+public class Pz2Session implements Pz2Interface {\r
   \r
   private static Logger logger = Logger.getLogger(Pz2Session.class);\r
   \r
@@ -34,19 +40,28 @@ public class Pz2Session implements Serializable, Pz2Interface {
   private com.indexdata.masterkey.pazpar2.client.Pazpar2Client client = null;   \r
   private TargetFilter targetFilter = null;  \r
   private ResultsPager pager = null; \r
-  \r
-  public Pz2Session (Pz2Configurator pz2conf) {\r
-    logger.debug("Instantiating pz2");  \r
-    if (pz2conf == null) {logger.error("conf is null!!!!!!!!!!!!!!!"); }\r
+      \r
+  public Pz2Session () {\r
+    logger.info("Instantiating pz2 session object [" + Utils.objectId(this) + "]");      \r
+  }\r
+    \r
+  public void init(Pz2Configurator pz2conf) {\r
+    if (client==null) {\r
+      logger.info(Utils.objectId(this) + " is configuring itself using the provided " + Utils.objectId(pz2conf));\r
     try {\r
       cfg = new com.indexdata.masterkey.pazpar2.client.Pazpar2ClientConfiguration(pz2conf.getConfig());\r
       client = new com.indexdata.masterkey.pazpar2.client.Pazpar2ClientGeneric(cfg);\r
       resetDataObjects();\r
     } catch (ProxyErrorException e) {\r
       e.printStackTrace();\r
-    }    \r
+    } catch (IOException ioe) {\r
+      ioe.printStackTrace();\r
+    }\r
+    } else {\r
+      logger.warn("Attempt to configure session but it already has a configured client");\r
+    }\r
   }\r
-\r
+    \r
   public void doSearch(String query) {\r
     setCommandParameter("search",new CommandParameter("query","=",query));     \r
     doSearch();\r
@@ -56,7 +71,7 @@ public class Pz2Session implements Serializable, Pz2Interface {
     queryStates.hasPendingStateChange("search",false);\r
     resetDataObjects();\r
     setCommandParameter("show",new CommandParameter("start","=",0));    \r
-    logger.info("Searching using "+getCommand("search").getParameter("query").getEncodedQueryString());\r
+    logger.debug(Utils.objectId(this) + " is searching using "+getCommand("search").getParameter("query").getEncodedQueryString());\r
     doCommand("search");    \r
   }\r
       \r
@@ -66,10 +81,10 @@ public class Pz2Session implements Serializable, Pz2Interface {
    * @return Number of activeclients at the time of the 'show' command.\r
    */\r
   public String update () {\r
-    logger.info("Updating show,stat,termlist, and bytarget data from pazpar2");\r
+    logger.debug("Updating show,stat,termlist,bytarget from pazpar2");\r
     return update("show,stat,termlist,bytarget");\r
   }\r
\r
+   \r
   /**\r
    * Refreshes the data objects listed in 'commands' from pazpar2\r
    * \r
@@ -96,13 +111,11 @@ public class Pz2Session implements Serializable, Pz2Interface {
         }\r
       }\r
       for (CommandThread thread : threadList) {\r
-        if (!thread.getCommand().getName().equals("search")) {\r
-          dataObjects.put(thread.getCommand().getName(), new Pazpar2ResponseParser().getObject(thread.getResponse()));\r
-        }\r
+         dataObjects.put(thread.getCommand().getName(), new Pazpar2ResponseParser().getObject(thread.getResponse()));        \r
       }\r
       return getActiveClients();\r
     } else {\r
-      logger.info("Skipped requests for " + commands + " as there's not yet a query."); \r
+      logger.debug("Skipped requests for " + commands + " as there's not yet a query."); \r
       resetDataObjects();\r
       return "0";\r
     }\r
@@ -254,6 +267,44 @@ public class Pz2Session implements Serializable, Pz2Interface {
     logger.debug("************** request to set state key to: [" + key + "]");    \r
     queryStates.setCurrentStateKey(key);\r
   }\r
+  \r
+  public boolean hasErrors () {\r
+    if (dataObjects.get("search").isError()) {\r
+      logger.info("Error detected in search");\r
+      return true;\r
+    }\r
+    for (String name : dataObjects.keySet()) {\r
+      if (dataObjects.get(name).isError()) {\r
+        logger.info("Error detected in " + name);\r
+        return true;\r
+      }\r
+    }    \r
+    return false;\r
+  }\r
+    \r
+  public String getErrorMessages() {\r
+    StringBuilder msgs = new StringBuilder("");\r
+    for (String name : dataObjects.keySet()) {     \r
+      if (dataObjects.get(name).isError()) {     \r
+        msgs.append(name + ": " + dataObjects.get(name).getErrorMessage());\r
+      } \r
+    }\r
+    return msgs.toString();\r
+  }\r
+  \r
+  public String getFirstErrorMessage() {\r
+    if (dataObjects.get("search").isError()) {\r
+      return "Error doing search: " + dataObjects.get("search").getErrorMessage();\r
+    }\r
+    for (String name : dataObjects.keySet()) {     \r
+      if (dataObjects.get(name).isError()) {     \r
+        return name + ": " + dataObjects.get(name).getErrorMessage();        \r
+      } \r
+    }\r
+    return "";\r
+    \r
+  }\r
+\r
     \r
   private boolean hasTargetFilter(TargetFilter targetFilter) {\r
     return hasTargetFilter() && targetFilter.equals(this.targetFilter);\r
@@ -298,9 +349,9 @@ public class Pz2Session implements Serializable, Pz2Interface {
     }    \r
   }\r
 \r
-  private String getActiveClients() {\r
-    logger.debug("Active clients: "+getShow().getActiveClients());\r
+  private String getActiveClients() {    \r
     if (getShow()!=null) {\r
+      logger.debug("Active clients: "+getShow().getActiveClients());\r
       return getShow().getActiveClients();\r
     } else {\r
       return "";\r
@@ -366,13 +417,15 @@ public class Pz2Session implements Serializable, Pz2Interface {
   }\r
   \r
   private void resetDataObjects() {\r
-    logger.debug("Resetting show,stat,termlist,bytarget response objects.");\r
+    logger.debug("Resetting show,stat,termlist,bytarget,search response objects.");\r
     dataObjects = new ConcurrentHashMap<String,Pazpar2ResponseData>();\r
     dataObjects.put("show", new ShowResponse());\r
     dataObjects.put("stat", new StatResponse());\r
     dataObjects.put("termlist", new TermListsResponse());\r
     dataObjects.put("bytarget", new ByTarget());\r
     dataObjects.put("record", new RecordResponse());\r
+    dataObjects.put("search", new SearchResponse());\r
   }\r
+  \r
 \r
 }\r