import com.indexdata.mkjsf.pazpar2.commands.CommandParameter;\r
import com.indexdata.mkjsf.pazpar2.commands.Pazpar2Command;\r
import com.indexdata.mkjsf.pazpar2.commands.Pazpar2Commands;\r
+import com.indexdata.mkjsf.pazpar2.commands.sp.ServiceProxyCommand;\r
import com.indexdata.mkjsf.pazpar2.data.RecordResponse;\r
import com.indexdata.mkjsf.pazpar2.data.ResponseDataObject;\r
import com.indexdata.mkjsf.pazpar2.data.ResponseParser;\r
logger.error("Ignoring show,stat,termlist,bytarget commands due to problem with most recent search.");\r
return "";\r
} else if (!hasQuery()) {\r
- logger.error("Ignoring show,stat,termlist,bytarget commands because there is not yet a query.");\r
+ logger.debug("Ignoring show,stat,termlist,bytarget commands because there is not yet a query.");\r
return "";\r
} else {\r
return update("show,stat,termlist,bytarget");\r
* @return Number of activeclients at the time of the 'show' command\r
*/\r
public String update (String commands) {\r
- logger.info("Request to update: " + commands);\r
+ logger.debug("Request to update: " + commands);\r
try {\r
if (commands.equals("search")) {\r
doSearch();\r
return "0";\r
} else {\r
logger.debug("Processing request for " + commands); \r
- \r
List<CommandThread> threadList = new ArrayList<CommandThread>();\r
StringTokenizer tokens = new StringTokenizer(commands,",");\r
while (tokens.hasMoreElements()) { \r
}\r
\r
/**\r
- * Validates the request then executes the command and parses the response.\r
+ * Executes the command and parses the response to create data objects.\r
* If the parsed response is of a known type it will be cached in 'pzresp'\r
* \r
* @param commandName The command to be executed\r
* @return An XML response parsed to form a response data object\r
*/\r
protected ResponseDataObject doCommand(String commandName) {\r
- ResponseDataObject responseObject = null; \r
- logger.info("Request "+commandName + ": "+ pzreq.getCommand("search").toString());\r
- Pazpar2Command command = pzreq.getCommand(commandName);\r
- long start = System.currentTimeMillis();\r
- HttpResponseWrapper commandResponse = searchClient.executeCommand(command);\r
- long end = System.currentTimeMillis();\r
- logger.debug("Executed " + command.getCommandName() + " in " + (end-start) + " ms." );\r
- responseLogger.debug("Response was: " + commandResponse.getResponseString());\r
- if (commandResponse.getContentType().contains("xml")) {\r
- responseObject = ResponseParser.getParser().getDataObject((ClientCommandResponse)commandResponse);\r
- if (ResponseParser.docTypes.contains(responseObject.getType())) {\r
- logger.debug("Storing " + responseObject.getType() + " in pzresp. ");\r
- pzresp.put(commandName, responseObject);\r
+ if (pzreq.getCommand(commandName).spOnly() && isPazpar2Service()) {\r
+ logger.warn("Skipping " + commandName + " - SP-only command, un-supported by Pazpar2");\r
+ return new ResponseDataObject();\r
+ } else {\r
+ ResponseDataObject responseObject = null; \r
+ logger.info("Request "+commandName + ": "+ pzreq.getCommand("search").toString());\r
+ Pazpar2Command command = pzreq.getCommand(commandName);\r
+ long start = System.currentTimeMillis();\r
+ HttpResponseWrapper commandResponse = searchClient.executeCommand(command);\r
+ long end = System.currentTimeMillis();\r
+ logger.debug("Executed " + command.getCommandName() + " in " + (end-start) + " ms." );\r
+ responseLogger.debug("Response was: " + commandResponse.getResponseString());\r
+ if (commandResponse.getContentType().contains("xml")) {\r
+ responseObject = ResponseParser.getParser().getDataObject((ClientCommandResponse)commandResponse);\r
+ if (ResponseParser.docTypes.contains(responseObject.getType())) {\r
+ logger.debug("Storing " + responseObject.getType() + " in pzresp. ");\r
+ pzresp.put(commandName, responseObject);\r
+ } else {\r
+ if (commandName.equals("record")) {\r
+ logger.debug("Command was 'record' but response not '<record>' - assuming raw record response.");\r
+ ResponseDataObject recordResponse = new RecordResponse(); \r
+ recordResponse.setType("record");\r
+ recordResponse.setXml(responseObject.getXml()); \r
+ recordResponse.setAttribute("activeclients", "0");\r
+ pzresp.put("record", recordResponse); \r
+ } \r
+ }\r
+ } else if (commandResponse.isBinary()) {\r
+ responseObject = new RecordResponse(); \r
+ responseObject.setType(commandName);\r
+ logger.info("Binary response");\r
+ responseObject.setAttribute("activeclients", "0");\r
+ responseObject.setXml("<record>binary response</record>");\r
+ responseObject.setBinary(commandResponse.getBytes());\r
+ pzresp.put("record", responseObject);\r
} else {\r
- if (commandName.equals("record")) {\r
- logger.debug("Command was 'record' but response not '<record>' - assuming raw record response.");\r
- ResponseDataObject recordResponse = new RecordResponse(); \r
- recordResponse.setType("record");\r
- recordResponse.setXml(responseObject.getXml()); \r
- recordResponse.setAttribute("activeclients", "0");\r
- pzresp.put("record", recordResponse); \r
- } \r
+ logger.error("Response was not found to be XML or binary. The response was not handled.");\r
}\r
- } else if (commandResponse.isBinary()) {\r
- responseObject = new RecordResponse(); \r
- responseObject.setType(commandName);\r
- logger.info("Binary response");\r
- responseObject.setAttribute("activeclients", "0");\r
- responseObject.setXml("<record>binary response</record>");\r
- responseObject.setBinary(commandResponse.getBytes());\r
- pzresp.put("record", responseObject);\r
- } else {\r
- logger.error("Response was not found to be XML or binary. The response was not handled.");\r
+ return responseObject;\r
}\r
- return responseObject;\r
}\r
\r
@Override\r
return (searchClient!=null ? searchClient.getServiceUrl() : "");\r
}\r
\r
+ public void setServiceId () {\r
+ pzreq.getRecord().removeParametersInState();\r
+ pzreq.getSearch().removeParametersInState();\r
+ pzresp.resetSearchResponses();\r
+ pz2Client.setServiceId(pzreq.getInit().getService());\r
+ }\r
+ \r
+ public String getServiceId () {\r
+ return pzreq.getInit().getService();\r
+ }\r
+ \r
public boolean getServiceUrlIsDefined() {\r
return (searchClient != null && searchClient.hasServiceUrl());\r
}\r
} \r
if (cfg != null) {\r
try {\r
- client = new Pazpar2ClientGeneric(cfg); \r
+ client = new Pazpar2ClientGeneric(cfg); \r
} catch (ProxyErrorException pe) {\r
logger.error("Could not configure Pazpar2 client: " + pe.getMessage());\r
throw new ConfigurationException("Could not configure Pz2Client: "+ pe.getMessage(),pe);\r
\r
@Override \r
public void setServiceUrl (String serviceUrl) { \r
- cfg.PAZPAR2_URL = serviceUrl;\r
- \r
+ cfg.PAZPAR2_URL = serviceUrl; \r
+ }\r
+ \r
+ public String getServiceId () {\r
+ return cfg.PAZPAR2_SERVICE_ID;\r
+ }\r
+ \r
+ public void setServiceId(String serviceId) {\r
+ cfg.PAZPAR2_SERVICE_ID = serviceId;\r
+ try {\r
+ client = new Pazpar2ClientGeneric(cfg); \r
+ } catch (ProxyErrorException pe) {\r
+ logger.error("Could not configure Pazpar2 client: " + pe.getMessage()); \r
+ }\r
}\r
\r
}\r
return initDocUpload.getIncludeDebug();\r
}\r
\r
- // TODO: Remove when possible\r
+ // TODO: Remove when obsolete\r
public InitDocUpload getInitDocUpload () {\r
return initDocUpload;\r
}\r
\r
public CategoriesResponse getCategories () {\r
- ResponseDataObject response = pz2.doCommand("categories");\r
- if (response.hasApplicationError()) {\r
- logger.debug(response.getXml());\r
- return new CategoriesResponse();\r
- } else {\r
- try {\r
- return (CategoriesResponse) response;\r
- } catch (Exception e) {\r
- e.printStackTrace();\r
+ if (pz2.isServiceProxyService()) {\r
+ ResponseDataObject response = pz2.doCommand("categories");\r
+ if (response.hasApplicationError()) {\r
logger.debug(response.getXml());\r
return new CategoriesResponse();\r
+ } else {\r
+ try {\r
+ return (CategoriesResponse) response;\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ logger.debug(response.getXml());\r
+ return new CategoriesResponse();\r
+ }\r
}\r
+ } else {\r
+ return new CategoriesResponse();\r
}\r
}\r
\r
public ServiceProxyCommand getSp() {\r
return this;\r
}\r
+\r
+ @Override\r
+ public boolean spOnly() {\r
+ return false;\r
+ }\r
}\r
private static List<String> nologparams = Arrays.asList("password");\r
\r
public CommandParameter (String name) {\r
- logger.debug("Instantiating command parameter '" + name + "'");\r
+ logger.trace("Instantiating command parameter '" + name + "'");\r
this.name = name;\r
}\r
\r
public CommandParameter (String name, String operator, String value, Expression... expressions) {\r
- logger.debug("Instantiating command parameter " + name + " with expressions: [" + expressions + "]");\r
+ logger.trace("Instantiating command parameter " + name + " with expressions: [" + expressions + "]");\r
this.name = name;\r
this.operator = operator;\r
this.value = value;\r
}\r
\r
public CommandParameter (String name, String operator, String value) {\r
- if (!nologparams.contains(name)) logger.debug("Instantiating command parameter '" + name + "' with String: [" + value + "]"); \r
+ if (!nologparams.contains(name)) logger.trace("Instantiating command parameter '" + name + "' with String: [" + value + "]"); \r
this.name = name;\r
this.operator = operator;\r
this.value = value; \r
}\r
\r
public CommandParameter (String name, String operator, int value) {\r
- logger.debug("Instantiating command parameter '" + name + "' with int: [" + value + "]");\r
+ logger.trace("Instantiating command parameter '" + name + "' with int: [" + value + "]");\r
this.name = name;\r
this.operator = operator;\r
this.value = value+""; \r
}\r
\r
public CommandParameter copy() {\r
- logger.debug("Copying parameter '"+ name + "' for modification");\r
+ logger.trace("Copying parameter '"+ name + "' for modification");\r
CommandParameter newParam = new CommandParameter(name);\r
newParam.value = this.value;\r
newParam.operator = this.operator;\r
setParameterInState(new CommandParameter("clear","=",clear));\r
}\r
\r
+ public String getClear() {\r
+ return getParameterValue("clear");\r
+ }\r
+ \r
public void setService(String serviceId) { \r
setParameterInState(new CommandParameter("service","=",serviceId));\r
}\r
\r
+ public String getService() {\r
+ return getParameterValue("service");\r
+ }\r
+ \r
@Override\r
public void setSession (String sessionId) {\r
throw new UnsupportedOperationException("Cannot set session id on init command");\r
return this;\r
}\r
\r
+ @Override\r
+ public boolean spOnly() {\r
+ return false;\r
+ }\r
+\r
\r
}\r
\r
public void setParameter (CommandParameter parameter) {\r
Pazpar2Command copy = this.copy();\r
- logger.debug(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "]");\r
+ logger.trace(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "]");\r
copy.parameters.put(parameter.getName(),parameter);\r
checkInState(copy);\r
}\r
public void setParameters (CommandParameter... params) {\r
Pazpar2Command copy = this.copy();\r
for (CommandParameter param : params) {\r
- logger.debug(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "]");\r
+ logger.trace(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "]");\r
copy.parameters.put(param.getName(),param);\r
}\r
checkInState(copy);\r
\r
public void setParametersInState (CommandParameter... params) { \r
for (CommandParameter param : params) {\r
- logger.debug(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "] silently");\r
+ logger.trace(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "] silently");\r
parameters.put(param.getName(),param);\r
} \r
}\r
\r
public void setParameterInState (CommandParameter parameter) {\r
- logger.debug(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "] silently");\r
+ logger.trace(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "] silently");\r
parameters.put(parameter.getName(),parameter); \r
}\r
\r
}\r
\r
public abstract ServiceProxyCommand getSp();\r
- \r
+ \r
+ public abstract boolean spOnly(); \r
}\r
public ServiceProxyCommand getSp() {\r
return this;\r
}\r
+\r
+ @Override\r
+ public boolean spOnly() {\r
+ return false;\r
+ }\r
}\r
public RecordCommandSp getSp () {\r
return new RecordCommandSp(this);\r
}\r
+\r
+ @Override\r
+ public boolean spOnly() { \r
+ return false;\r
+ }\r
}\r
return this;\r
}\r
\r
+ @Override\r
+ public boolean spOnly() {\r
+ return false;\r
+ }\r
+\r
}\r
return this;\r
}\r
\r
+ @Override\r
+ public boolean spOnly() {\r
+ return false;\r
+ }\r
+\r
}\r
return this;\r
}\r
\r
+ @Override\r
+ public boolean spOnly() {\r
+ return false;\r
+ }\r
+\r
}\r
return this;\r
}\r
\r
+ @Override\r
+ public boolean spOnly() { \r
+ return false;\r
+ }\r
+\r
\r
}\r
public ServiceProxyCommand getSp() {\r
return this;\r
}\r
+\r
+ @Override\r
+ public boolean spOnly() { \r
+ return false;\r
+ }\r
\r
\r
\r
public ServiceProxyCommand getSp() {\r
return this;\r
}\r
+\r
+ @Override\r
+ public boolean spOnly() {\r
+ return true;\r
+ }\r
}\r
return this;\r
}\r
\r
+ @Override\r
+ public boolean spOnly() {\r
+ return true;\r
+ }\r
+\r
}\r
return command.getParameterValue("acefilter");\r
}\r
\r
+ @Override\r
+ public boolean spOnly() {\r
+ return true;\r
+ }\r
+\r
+ \r
\r
}\r
package com.indexdata.mkjsf.pazpar2.commands.sp;\r
\r
public interface ServiceProxyCommand {\r
+ \r
+ public boolean spOnly();\r
\r
}\r
*/\r
public void checkIn(Pazpar2Command command) {\r
if (getCurrentState().stateMutating(command)) {\r
- logger.debug("State changed by: " + command.getCommandName());\r
+ logger.info("State changed by: " + command.getCommandName());\r
Pazpar2State state = new Pazpar2State(getCurrentState(),command);\r
states.put(state.getKey(), state);\r
currentKey = state.getKey();\r
hasPendingStateChange(command.getCommandName(),new Boolean(true)); \r
- logger.debug("Updating " + listeners.size() + " listener(s) with state change from " + command);\r
+ logger.info("Updating " + listeners.size() + " listener(s) with state change from " + command);\r
updateListeners(command.getCommandName()); \r
} else {\r
logger.debug("Command " + command.getCommandName() + " not found to change the state [" + command.getEncodedQueryString() + "]");\r
*/\r
public void setCurrentStateKey(String key) { \r
if (currentKey.equals(key)) {\r
- logger.debug("Ignoring request from UI to set state key, already has that key [" + key + "]");\r
+ logger.info("Ignoring request from UI to set state key, already has that key [" + key + "]");\r
} else {\r
- logger.debug("Request from UI to change state key from: [" + currentKey + "] to ["+key+"]");\r
+ logger.info("Request from UI to change state key from: [" + currentKey + "] to ["+key+"]");\r
if (states.get(key)==null) {\r
logger.error("Have no state registered for the key ["+ key +"].");\r
if (key == null || key.length()==0) {\r
- logger.info("Recived an empty key, retaining currentKey [" + currentKey + "]");\r
+ logger.debug("Recived an empty key, retaining currentKey [" + currentKey + "]");\r
key = currentKey;\r
} else {\r
if (states.get(currentKey) != null) {\r
if (key.equals("#1")) {\r
- logger.info("Initial key created [" + key + "], but already got a state registered for the current key [" + currentKey + "]. Retaining current key.");\r
+ logger.debug("Initial key created [" + key + "], but already got a state registered for the current key [" + currentKey + "]. Retaining current key.");\r
key = currentKey;\r
} else {\r
logger.info("Current search state cached under both new key [" + key + "] and current key [" + currentKey + "]");\r