Packaging pazpar2/io error messages in response objects
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / pz2utils4jsf / pazpar2 / Pz2Session.java
index 9675696..822b416 100644 (file)
@@ -19,6 +19,7 @@ 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
@@ -83,7 +84,7 @@ public class Pz2Session implements Pz2Interface {
     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
@@ -110,9 +111,7 @@ public class Pz2Session implements 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
@@ -268,6 +267,44 @@ public class Pz2Session implements 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
@@ -312,9 +349,9 @@ public class Pz2Session implements 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
@@ -380,13 +417,15 @@ public class Pz2Session implements 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