X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fcom%2Findexdata%2Fpz2utils4jsf%2Fpazpar2%2FPz2Bean.java;h=b12082b0b5ec0d5ee6079b792dd2ecfef5752f69;hb=801fbed2d559e224160d473e0860dd765354569f;hp=d942a4a6540cb83e9205c6dd78b016307f4c7262;hpb=be532cf4928f497e5e718d78959dfff4039c01b9;p=mkjsf-moved-to-github.git diff --git a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Bean.java b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Bean.java index d942a4a..b12082b 100644 --- a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Bean.java +++ b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Bean.java @@ -18,7 +18,7 @@ import com.indexdata.pz2utils4jsf.controls.ResultsPager; import com.indexdata.pz2utils4jsf.errors.ConfigurationError; import com.indexdata.pz2utils4jsf.errors.ConfigurationException; import com.indexdata.pz2utils4jsf.errors.ErrorHelper; -import com.indexdata.pz2utils4jsf.errors.ErrorInterface; +import com.indexdata.pz2utils4jsf.errors.ErrorCentral; import com.indexdata.pz2utils4jsf.pazpar2.commands.CommandParameter; import com.indexdata.pz2utils4jsf.pazpar2.commands.Pazpar2Commands; import com.indexdata.pz2utils4jsf.pazpar2.data.Pazpar2ResponseData; @@ -34,17 +34,19 @@ public class Pz2Bean implements Pz2Interface, StateListener, Serializable { private static final long serialVersionUID = 3440277287081557861L; private static Logger logger = Logger.getLogger(Pz2Bean.class); + private static Logger responseLogger = Logger.getLogger("com.indexdata.pz2utils4jsf.pazpar2.responses"); protected SearchClient searchClient = null; @Inject ConfigurationReader configurator; @Inject StateManager stateMgr; - @Inject Pazpar2Commands req; - @Inject Pazpar2Responses data; + @Inject Pazpar2Commands pzreq; + @Inject Pazpar2Responses pzresp; + @Inject ErrorCentral errors; protected ResultsPager pager = null; - protected List configurationErrors = null; + protected ErrorHelper errorHelper = null; public Pz2Bean () { @@ -58,45 +60,36 @@ public class Pz2Bean implements Pz2Interface, StateListener, Serializable { searchClient = new Pz2Client(); logger.info("Using [" + Utils.objectId(searchClient) + "] configured by [" + Utils.objectId(configurator) + "]" ); - configureClient(searchClient,configurator); - stateMgr.addStateListener(this); + configureClient(searchClient,configurator); + stateMgr.addStateListener(this); } public void configureClient(SearchClient searchClient, ConfigurationReader configReader) { - configurationErrors = new ArrayList(); - errorHelper = new ErrorHelper(configReader); logger.debug(Utils.objectId(this) + " will configure search client for the session"); try { searchClient.configure(configReader); - // At the time of writing this search client is injected using Weld. - // However, the client is used for asynchronously sending off requests - // to the server AND propagation of context to threads is currently - // not supported. Trying to do so throws a WELD-001303 error. - // To avoid that, a context free client is cloned from the context - // dependent one. - // If propagation to threads gets supported, the cloning can go. - // - // Commented as I'm trying with regular instantiation instead - // this.searchClient = searchClient.cloneMe(); } catch (ConfigurationException e) { - configurationErrors.add(new ConfigurationError("Search Client","Configuration",e.getMessage(),new ErrorHelper(configReader))); + logger.debug("Pz2Bean adding configuration error"); + errors.addConfigurationError(new ConfigurationError("Search Client","Configuration",e.getMessage())); } logger.info(configReader.document()); - data.reset(); + pzresp.reset(); } public void doSearch(String query) { - req.getSearch().setParameter(new CommandParameter("query","=",query)); + pzreq.getSearch().setParameter(new CommandParameter("query","=",query)); doSearch(); } public void doSearch() { stateMgr.hasPendingStateChange("search",false); - data.reset(); - req.getRecord().removeParameters(); - req.getShow().setParameter(new CommandParameter("start","=",0)); - logger.debug(Utils.objectId(this) + " is searching using "+req.getCommandReadOnly("search").getUrlEncodedParameterValue("query")); + pzresp.reset(); + // resets some record and show command parameters without + // changing state or creating state change feedback + pzreq.getRecord().removeParametersInState(); + pzreq.getShow().setParameterInState(new CommandParameter("start","=",0)); + logger.debug(Utils.objectId(this) + " is searching using "+pzreq.getCommand("search").getUrlEncodedParameterValue("query")); doCommand("search"); } @@ -117,64 +110,79 @@ public class Pz2Bean implements Pz2Interface, StateListener, Serializable { * @return Number of activeclients at the time of the 'show' command */ public String update (String commands) { - if (! hasConfigurationErrors()) { - if (hasQuery()) { - handleQueryStateChanges(commands); - logger.debug("Processing request for " + commands); - List threadList = new ArrayList(); - StringTokenizer tokens = new StringTokenizer(commands,","); - while (tokens.hasMoreElements()) { - threadList.add(new CommandThread(req.getCommandReadOnly(tokens.nextToken()),searchClient)); - } - for (CommandThread thread : threadList) { - thread.start(); - } - for (CommandThread thread : threadList) { - try { - thread.join(); - } catch (InterruptedException e) { - e.printStackTrace(); + if (! errors.hasConfigurationErrors()) { + if (commandsAreValid(commands)) { + if (hasQuery()) { + handleQueryStateChanges(commands); + logger.debug("Processing request for " + commands); + List threadList = new ArrayList(); + StringTokenizer tokens = new StringTokenizer(commands,","); + while (tokens.hasMoreElements()) { + threadList.add(new CommandThread(pzreq.getCommand(tokens.nextToken()),searchClient)); } - } - for (CommandThread thread : threadList) { - String commandName = thread.getCommand().getName(); - String response = thread.getResponse(); - logger.debug("Response was: " + response); - Pazpar2ResponseData responseObject = Pazpar2ResponseParser.getParser().getDataObject(response); - data.put(commandName, responseObject); - } - if (commands.equals("record")) { - logger.debug("Record: Active clients: "+data.getRecord().getActiveClients()); - return data.getRecord().getActiveClients(); + for (CommandThread thread : threadList) { + thread.start(); + } + for (CommandThread thread : threadList) { + try { + thread.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + for (CommandThread thread : threadList) { + String commandName = thread.getCommand().getName(); + String response = thread.getResponse(); + responseLogger.debug("Response was: " + response); + Pazpar2ResponseData responseObject = Pazpar2ResponseParser.getParser().getDataObject(response); + pzresp.put(commandName, responseObject); + } + if (commands.equals("record")) { + logger.debug("Record: Active clients: "+pzresp.getRecord().getActiveClients()); + return pzresp.getRecord().getActiveClients(); + } else { + return pzresp.getActiveClients(); + } } else { - return data.getActiveClients(); - } + logger.debug("Skipped requests for " + commands + " as there's not yet a query."); + pzresp.reset(); + return "0"; + } } else { - logger.debug("Skipped requests for " + commands + " as there's not yet a query."); - data.reset(); + logger.error("Did not attemt to run command(s) due to a validation error."); return "0"; } - } else { + } else { logger.error("Did not attempt to execute query since there are configuration errors."); return "0"; } } + + public boolean commandsAreValid(String commands) { + if (commands.equals("record")) { + if (!pzreq.getCommand("record").hasParameterSet("id")) { + logger.error("Attempt to send record command without the id parameter"); + return false; + } + } + return true; + } public String toggleRecord (String recId) { if (hasRecord(recId)) { - req.getRecord().removeParameters(); - data.put("record", new RecordResponse()); + pzreq.getRecord().removeParameters(); + pzresp.put("record", new RecordResponse()); return ""; } else { - req.getRecord().setRecordId(recId); + pzreq.getRecord().setId(recId); return doCommand("record"); } } @Override public boolean hasRecord (String recId) { - return req.getCommandReadOnly("record").hasParameters() && data.getRecord().getRecId().equals(recId); + return pzreq.getCommand("record").hasParameters() && pzresp.getRecord().getRecId().equals(recId); } public String getCurrentStateKey () { @@ -185,47 +193,25 @@ public class Pz2Bean implements Pz2Interface, StateListener, Serializable { stateMgr.setCurrentStateKey(key); } - public boolean hasConfigurationErrors () { - return (configurationErrors.size()>0); - } - - public boolean hasCommandErrors () { - return data.hasApplicationError(); - } - - /** - * Returns true if application error found in any response data objects - */ - public boolean hasErrors () { - return hasConfigurationErrors() || hasCommandErrors(); - } - - public List getConfigurationErrors() { - return configurationErrors; - } - protected boolean hasQuery() { - return req.getSearch().getParameter("query") != null && req.getSearch().getParameter("query").getValueWithExpressions().length()>0; + protected boolean hasQuery() { + return pzreq.getCommand("search").hasParameterSet("query"); } public ResultsPager getPager () { if (pager == null) { - pager = new ResultsPager(data); + pager = new ResultsPager(pzresp); } return pager; } public ResultsPager setPager (int pageRange) { - pager = new ResultsPager(data,pageRange,req); + pager = new ResultsPager(pzresp,pageRange,pzreq); return pager; } - - protected ErrorHelper getTroubleshooter() { - return errorHelper; - } - + protected void handleQueryStateChanges (String commands) { if (stateMgr.hasPendingStateChange("search") && hasQuery()) { logger.debug("Found pending search change. Doing search before updating " + commands); @@ -234,17 +220,16 @@ public class Pz2Bean implements Pz2Interface, StateListener, Serializable { if (stateMgr.hasPendingStateChange("record") && ! commands.equals("record")) { logger.debug("Found pending record ID change. Doing record before updating " + commands); stateMgr.hasPendingStateChange("record",false); - if (req.getCommandReadOnly("record").hasParameters()) { + if (pzreq.getCommand("record").hasParameterSet("id")) { update("record"); - } else { - req.getRecord().removeParameters(); - data.put("record", new RecordResponse()); + } else { + pzresp.put("record", new RecordResponse()); } } } protected String doCommand(String commandName) { - logger.debug(req.getCommandReadOnly(commandName).getEncodedQueryString() + ": Results for "+ req.getCommandReadOnly("search").getEncodedQueryString()); + logger.debug(pzreq.getCommand(commandName).getEncodedQueryString() + ": Results for "+ pzreq.getCommand("search").getEncodedQueryString()); return update(commandName); }