From a78346a10c75cd39bd0009517aebabc73871e2c3 Mon Sep 17 00:00:00 2001 From: "Niels Erik G. Nielsen" Date: Sun, 24 Mar 2013 01:35:12 -0400 Subject: [PATCH] Adds option to post sp init doc, see xml, change sp url --- .../indexdata/pz2utils4jsf/pazpar2/Pz2Bean.java | 4 +- .../pz2utils4jsf/pazpar2/Pz2Interface.java | 2 +- .../pz2utils4jsf/pazpar2/Pz2ProxyBean.java | 49 +++++++++++++++++--- .../indexdata/pz2utils4jsf/pazpar2/Pz2Session.java | 2 +- .../pazpar2/data/Pazpar2ResponseData.java | 9 ++++ .../pazpar2/data/Pazpar2ResponseParser.java | 16 +++++-- .../pazpar2/sp/ServiceProxyClient.java | 42 ++++++++++++++++- .../pazpar2/sp/ServiceProxyInterface.java | 14 ++++-- .../pazpar2/sp/ServiceProxySession.java | 49 +++++++++++++++++++- 9 files changed, 167 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Bean.java b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Bean.java index a8d14cc..7f3ae52 100644 --- a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Bean.java +++ b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Bean.java @@ -37,14 +37,14 @@ public class Pz2Bean implements Pz2Interface, Serializable { } @PostConstruct - public void initiatePz2Session() { + public void instantiatePz2SessionObject() { logger.debug(Utils.objectId(this) + " will instantiate a Pz2Session next."); pz2 = new Pz2Session(); searchClient = new Pz2Client(); logger.info("Using [" + Utils.objectId(searchClient) + "] configured by [" + Utils.objectId(configurator) + "] on session [" + Utils.objectId(pz2) + "]" ); - pz2.init(searchClient,configurator); + pz2.configureClient(searchClient,configurator); } diff --git a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Interface.java b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Interface.java index 0e17724..55a5a3a 100644 --- a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Interface.java +++ b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Interface.java @@ -204,7 +204,7 @@ public interface Pz2Interface extends Serializable { * @return pazpar2 'show' response object */ public ShowResponse getShow(); - + /** * Returns the 'stat' data as retrieved from pazpar2 by the most * recent update request diff --git a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2ProxyBean.java b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2ProxyBean.java index 473d332..f8d8d08 100644 --- a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2ProxyBean.java +++ b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2ProxyBean.java @@ -1,5 +1,8 @@ package com.indexdata.pz2utils4jsf.pazpar2; +import java.io.IOException; +import java.io.UnsupportedEncodingException; + import javax.annotation.PostConstruct; import javax.enterprise.context.SessionScoped; import javax.enterprise.inject.Alternative; @@ -19,7 +22,7 @@ import com.indexdata.pz2utils4jsf.utils.Utils; public class Pz2ProxyBean extends Pz2Bean implements ServiceProxyInterface { private static final long serialVersionUID = 4221824985678758225L; - private static Logger logger = Logger.getLogger(Pz2ProxyBean.class); + private static Logger logger = Logger.getLogger(Pz2ProxyBean.class); @Inject ConfigurationReader configurator; @Inject ServiceProxyUser user; @@ -28,21 +31,55 @@ public class Pz2ProxyBean extends Pz2Bean implements ServiceProxyInterface { } @PostConstruct - public void initiatePz2Session() { - logger.debug(Utils.objectId(this) + " will instantiate a Pz2Session next."); + public void instantiatePz2SessionObject() { + logger.debug(Utils.objectId(this) + " will instantiate a Pz2Session object next."); pz2 = new ServiceProxySession(); searchClient = new ServiceProxyClient(); logger.info("Using [" + Utils.objectId(searchClient) + "] configured by [" + Utils.objectId(configurator) + "] on session [" + Utils.objectId(pz2) + "]" ); - pz2.init(searchClient,configurator); + pz2.configureClient(searchClient,configurator); } - + @Override public String login(String navigateTo) { logger.info("doing login"); ((ServiceProxySession) pz2).setUser(user); - return ((ServiceProxySession)pz2).login(navigateTo); + return session().login(navigateTo); + } + + @Override + public void setInitFileName(String fileName) { + session().setInitFileName(fileName); + } + + @Override + public String getInitFileName() { + return session().getInitFileName(); + } + + @Override + public String postInit() throws UnsupportedEncodingException, IOException { + return session().postInit(); + } + + @Override + public void setServiceProxyUrl(String url) { + session().setServiceProxyUrl(url); + } + + @Override + public String getServiceProxyUrl() { + return session().getServiceProxyUrl(); + } + + public ServiceProxySession session() { + return (ServiceProxySession)pz2; + } + + @Override + public String getInitResponse() { + return session().getInitResponse(); } } diff --git a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Session.java b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Session.java index d506678..3dec233 100644 --- a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Session.java +++ b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/Pz2Session.java @@ -49,7 +49,7 @@ public class Pz2Session implements Pz2Interface { logger.info("Instantiating pz2 session object [" + Utils.objectId(this) + "]"); } - public void init(SearchClient searchClient, ConfigurationReader configReader) { + 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"); diff --git a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/data/Pazpar2ResponseData.java b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/data/Pazpar2ResponseData.java index c4f7b99..6b1ae7a 100644 --- a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/data/Pazpar2ResponseData.java +++ b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/data/Pazpar2ResponseData.java @@ -15,6 +15,7 @@ public class Pazpar2ResponseData implements Serializable { HashMap> elements = new HashMap>(); String textContent = ""; CommandError error = null; + String xml = null; public void setType (String type) { this.type = type; @@ -105,5 +106,13 @@ public class Pazpar2ResponseData implements Serializable { public boolean hasPazpar2Error() { return hasApplicationError() && getApplicationError().hasPazpar2Error(); } + + public void setXml(String xml) { + this.xml = xml; + } + + public String getXml() { + return xml; + } } diff --git a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/data/Pazpar2ResponseParser.java b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/data/Pazpar2ResponseParser.java index e69b397..73f0cf5 100644 --- a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/data/Pazpar2ResponseParser.java +++ b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/data/Pazpar2ResponseParser.java @@ -36,6 +36,7 @@ public class Pazpar2ResponseParser extends DefaultHandler { private Pazpar2ResponseData currentElement = null; private Stack dataElements = new Stack(); private Pazpar2ResponseData result = null; + private String xml = null; private static final List docTypes = Arrays.asList("bytarget","termlist","show","stat","record","search"); @@ -72,6 +73,7 @@ public class Pazpar2ResponseParser extends DefaultHandler { * @return Response data object */ public Pazpar2ResponseData getDataObject (String response) { + this.xml = response; try { xmlReader.parse(new InputSource(new ByteArrayInputStream(response.getBytes("UTF-8")))); } catch (UnsupportedEncodingException e) { @@ -94,19 +96,19 @@ public class Pazpar2ResponseParser extends DefaultHandler { @Override public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { if (localName.equals("show")) { - currentElement = new ShowResponse(); + currentElement = new ShowResponse(); } else if (localName.equals("hit")) { currentElement = new Hit(); } else if (localName.equals("location")) { currentElement = new Location(); } else if (localName.equals("bytarget")) { - currentElement = new ByTarget(); + currentElement = new ByTarget(); } else if (localName.equals("target")) { currentElement = new Target(); } else if (localName.equals("stat")) { - currentElement = new StatResponse(); + currentElement = new StatResponse(); } else if (localName.equals("termlist")) { - currentElement = new TermListsResponse(); + currentElement = new TermListsResponse(); } else if (localName.equals("list")) { currentElement = new TermListResponse(); ((TermListResponse)currentElement).setName(atts.getValue("name")); @@ -119,7 +121,7 @@ public class Pazpar2ResponseParser extends DefaultHandler { } ((TermListResponse)dataElements.peek()).addTerm((TermResponse)currentElement); } else if (localName.equals("record")) { - currentElement = new RecordResponse(); + currentElement = new RecordResponse(); } else if (localName.equals("search")) { currentElement = new SearchResponse(); } else if (localName.equals("applicationerror")) { @@ -136,6 +138,10 @@ public class Pazpar2ResponseParser extends DefaultHandler { if (!docTypes.contains(localName)) { dataElements.peek().addElement(localName, currentElement); } + if (this.xml != null) { // Store XML for doc level elements + currentElement.setXml(xml); + xml = null; + } dataElements.push(currentElement); } diff --git a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/sp/ServiceProxyClient.java b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/sp/ServiceProxyClient.java index 0602d4f..d9f89fc 100644 --- a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/sp/ServiceProxyClient.java +++ b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/sp/ServiceProxyClient.java @@ -3,6 +3,7 @@ package com.indexdata.pz2utils4jsf.pazpar2.sp; import static com.indexdata.pz2utils4jsf.utils.Utils.nl; import java.io.ByteArrayOutputStream; +import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; @@ -19,10 +20,12 @@ import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.ResponseHandler; import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.scheme.PlainSocketFactory; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; +import org.apache.http.entity.FileEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.PoolingClientConnectionManager; import org.apache.http.util.EntityUtils; @@ -47,7 +50,10 @@ public class ServiceProxyClient implements SearchClient { private static final long serialVersionUID = -4031644009579840277L; private static Logger logger = Logger.getLogger(ServiceProxyClient.class); public static final String MODULENAME = "proxyclient"; + public static final String SERVICE_PROXY_URL = "SERVICE_PROXY_URL"; + public static final String SP_INIT_DOC_PATHS = "SP_INIT_DOC_PATHS"; private String serviceUrl = "undefined"; + private String[] initDocPaths = null; ProxyPz2ResponseHandler handler = new ProxyPz2ResponseHandler(); private HttpClient client; @@ -65,7 +71,8 @@ public class ServiceProxyClient implements SearchClient { logger.info(Utils.objectId(this) + " is configuring using the provided " + Utils.objectId(configReader)); try { Configuration config = configReader.getConfiguration(this); - serviceUrl = config.getMandatory("SERVICE_PROXY_URL"); + serviceUrl = config.getMandatory(SERVICE_PROXY_URL); + this.initDocPaths = getMultiProperty(config.get(SP_INIT_DOC_PATHS)); } catch (ConfigurationException c) { c.printStackTrace(); } catch (MissingMandatoryParameterException mmp) { @@ -73,6 +80,14 @@ public class ServiceProxyClient implements SearchClient { } } + private String[] getMultiProperty(String prop) { + if (prop != null) { + return prop.split(","); + } else { + return null; + } + } + public boolean authenticate (AuthenticationEntity user) { try { logger.info("Authenticating [" + user.getProperty("name") + "]"); @@ -193,6 +208,7 @@ public class ServiceProxyClient implements SearchClient { ServiceProxyClient clone = new ServiceProxyClient(); clone.client = this.client; clone.serviceUrl = this.serviceUrl; + clone.initDocPaths = this.initDocPaths; return clone; } @@ -212,5 +228,29 @@ public class ServiceProxyClient implements SearchClient { doc.add(nl+ MODULENAME + " was configured to access the Pazpar2 service proxy at: " + serviceUrl); return null; } + + public byte[] postInitDoc (String filePath) throws IOException { + logger.info("Looking to post the file in : [" + filePath +"]"); + HttpPost post = new HttpPost(serviceUrl+"?command=init&includeDebug=yes"); + File initDoc = new File(filePath); + post.setEntity(new FileEntity(initDoc)); + byte[] response = client.execute(post, handler); + logger.info("Response on POST was: " + new String(response,"UTF-8")); + return response; + } + + public String[] getInitDocPaths () { + logger.info("Get init doc paths "); + logger.info("length: " + initDocPaths.length); + return initDocPaths; + } + + public void setServiceProxyUrl (String url) { + serviceUrl = url; + } + + public String getServiceProxyUrl () { + return serviceUrl; + } } diff --git a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/sp/ServiceProxyInterface.java b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/sp/ServiceProxyInterface.java index 5f4df13..0147e3f 100644 --- a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/sp/ServiceProxyInterface.java +++ b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/sp/ServiceProxyInterface.java @@ -1,8 +1,16 @@ package com.indexdata.pz2utils4jsf.pazpar2.sp; -import com.indexdata.pz2utils4jsf.pazpar2.Pz2Interface; +import java.io.IOException; +import java.io.UnsupportedEncodingException; -public interface ServiceProxyInterface extends Pz2Interface { +import com.indexdata.pz2utils4jsf.pazpar2.Pz2Interface; - public String login(String navigateTo); +public interface ServiceProxyInterface extends Pz2Interface { + public String login(String navigateTo); + public void setInitFileName (String fileName); + public String getInitFileName(); + public String postInit() throws UnsupportedEncodingException, IOException; + public String getInitResponse(); + public void setServiceProxyUrl(String url); + public String getServiceProxyUrl(); } diff --git a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/sp/ServiceProxySession.java b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/sp/ServiceProxySession.java index ce0f860..27d7908 100644 --- a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/sp/ServiceProxySession.java +++ b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/sp/ServiceProxySession.java @@ -1,5 +1,8 @@ package com.indexdata.pz2utils4jsf.pazpar2.sp; +import java.io.IOException; +import java.io.UnsupportedEncodingException; + import org.apache.log4j.Logger; import com.indexdata.pz2utils4jsf.pazpar2.Pz2Session; @@ -11,6 +14,8 @@ public class ServiceProxySession extends Pz2Session implements ServiceProxyInter private ServiceProxyUser user; private static final long serialVersionUID = -5770410029361522854L; private static Logger logger = Logger.getLogger(ServiceProxySession.class); + private String initDocFileName = ""; + private String initDocResponse = ""; public ServiceProxySession() { logger.info("Instantiating pz2 session object [" + Utils.objectId(this) + "]"); @@ -22,12 +27,54 @@ public class ServiceProxySession extends Pz2Session implements ServiceProxyInter @Override public String login(String navigateTo) { - if (((ServiceProxyClient)searchClient).authenticate(user)) { + if (client().authenticate(user)) { return navigateTo; } else { return null; } } + + @Override + public void setInitFileName(String fileName) { + this.initDocFileName = fileName; + + } + + @Override + public String getInitFileName() { + return initDocFileName; + } + + @Override + public String postInit() throws UnsupportedEncodingException, IOException { + String initDocPath = client().getInitDocPaths()[0]; + logger.info("Paths: " + client().getInitDocPaths()); + logger.info("Path: " + initDocPath); + byte[] response = client().postInitDoc(initDocPath + getInitFileName()); + initDocResponse = new String(response,"UTF-8"); + return initDocResponse; + } + + @Override + public void setServiceProxyUrl(String url) { + client().setServiceProxyUrl(url); + + } + + @Override + public String getServiceProxyUrl() { + return client().getServiceProxyUrl(); + } + + private ServiceProxyClient client () { + return (ServiceProxyClient)searchClient; + } + + @Override + public String getInitResponse() { + return initDocResponse; + } + } -- 1.7.10.4