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
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
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
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
* @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
}\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
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
} \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
}\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