package com.indexdata.mkjsf.pazpar2;\r
\r
import java.io.Serializable;\r
+import java.lang.annotation.Retention;\r
+import java.lang.annotation.Target;\r
import java.util.ArrayList;\r
import java.util.Arrays;\r
import java.util.HashMap;\r
\r
import javax.annotation.PostConstruct;\r
import javax.enterprise.context.SessionScoped;\r
+import javax.enterprise.inject.Produces;\r
+import javax.faces.context.FacesContext;\r
import javax.inject.Inject;\r
import javax.inject.Named;\r
+import javax.inject.Qualifier;\r
\r
import org.apache.log4j.Logger;\r
\r
protected SearchClient searchClient = null; \r
\r
@Inject ConfigurationReader configurator;\r
- @Inject StateManager stateMgr;\r
- @Inject Pazpar2Commands pzreq;\r
- @Inject Responses pzresp;\r
- @Inject ErrorCentral errors; \r
+ \r
+ private StateManager stateMgr = null;\r
+ private Pazpar2Commands pzreq = null;\r
+ private Responses pzresp = null;\r
+ private ErrorCentral errors = null; \r
\r
protected ResultsPager pager = null; \r
\r
logger.info("Instantiating pz2 bean [" + Utils.objectId(this) + "]"); \r
}\r
\r
+ public static Pz2Bean get() {\r
+ FacesContext context = FacesContext.getCurrentInstance();\r
+ return (Pz2Bean) context.getApplication().evaluateExpressionGet(context, "#{pz2}", Object.class); \r
+ }\r
+ \r
@PostConstruct\r
- public void postConstruct() { \r
- logger.debug("Pz2Bean post-construct: Configurator is " + configurator);\r
+ public void postConstruct() {\r
+ logger.info("Pz2Bean PostConstruct of " + this);\r
+ stateMgr = new StateManager();\r
+ pzreq = new Pazpar2Commands();\r
+ pzresp = new Responses(); \r
+ errors = new ErrorCentral(); \r
+ pzresp.setErrorHelper(errors.getHelper());\r
+ \r
+ logger.debug("Pz2Bean PostConstruct: Configurator is " + configurator);\r
logger.debug(Utils.objectId(this) + " will instantiate a Pz2Client next.");\r
pz2Client = new Pz2Client();\r
configureClient(pz2Client,configurator);\r
e.printStackTrace();\r
} \r
stateMgr.addStateListener(this); \r
- } \r
+ }\r
+ \r
+ @Qualifier\r
+ @Target({java.lang.annotation.ElementType.TYPE,\r
+ java.lang.annotation.ElementType.METHOD,\r
+ java.lang.annotation.ElementType.PARAMETER,\r
+ java.lang.annotation.ElementType.FIELD})\r
+ @Retention(java.lang.annotation.RetentionPolicy.RUNTIME)\r
+ public @interface Preferred{}\r
+ \r
+ @Produces @Preferred @SessionScoped @Named("pzresp") public Responses getPzresp () {\r
+ logger.info("Producing pzresp");\r
+ return pzresp;\r
+ }\r
+ \r
+ @Produces @Preferred @SessionScoped @Named("pzreq") public Pazpar2Commands getPzreq () {\r
+ logger.info("Producing pzreq");\r
+ return pzreq;\r
+ }\r
+ \r
+ @Produces @Preferred @SessionScoped @Named("errors") public ErrorCentral getErrors() {\r
+ logger.info("Producing errors");\r
+ return errors;\r
+ }\r
+ \r
+ @Produces @Preferred @SessionScoped @Named("stateMgr") public StateManager getStateMgr() {\r
+ logger.info("Produces stateMgr");\r
+ return stateMgr;\r
+ }\r
+\r
\r
public void configureClient(SearchClient client, ConfigurationReader configReader) {\r
logger.debug(Utils.objectId(this) + " will configure search client for the session");\r
}\r
\r
public void doSearch() {\r
+ try {\r
if (errors.hasConfigurationErrors()) {\r
logger.error("Ignoring search request due to configuration errors.");\r
} else if (searchClient == null){\r
searchClient.setSearchCommand(pzreq.getCommand("search"));\r
doCommand("search");\r
}\r
+ } catch (NullPointerException npe) {\r
+ npe.printStackTrace(); \r
+ }\r
}\r
\r
public String doRecord() {\r
* @return An XML response parsed to form a response data object\r
*/\r
protected ResponseDataObject doCommand(String commandName) {\r
- if (pzreq.getCommand(commandName).spOnly() && isPazpar2Service()) {\r
- logger.warn("Skipping " + commandName + " - SP-only command, un-supported by Pazpar2");\r
+ Pazpar2Command command = pzreq.getCommand(commandName);\r
+ if (command.spOnly() && isPazpar2Service()) {\r
+ logger.warn("Skipping " + commandName + " - SP-only command, not 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
+ logger.info("Request "+commandName + ". Search command is: "+ pzreq.getCommand("search").toString()); \r
long start = System.currentTimeMillis();\r
- HttpResponseWrapper commandResponse = searchClient.executeCommand(command);\r
+ ResponseDataObject responseObject = command.run(); \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
- logger.error("Response was not found to be XML or binary. The response was not handled.");\r
- }\r
return responseObject;\r
}\r
}\r
pzreq.getSearch().removeParametersInState();\r
pzresp.getSp().resetAuthAndBeyond(true); \r
searchClient.setServiceUrl(url);\r
+ // pzreq.setService(this);\r
} \r
}\r
\r
}\r
}\r
\r
+ public SearchClient getSearchClient() {\r
+ return searchClient;\r
+ }\r
+ \r
}\r