X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fcom%2Findexdata%2Fmkjsf%2Fpazpar2%2Fdata%2FResponses.java;h=1397023009a5369d4ac4b33a57af09bc1ba66085;hb=11ff48b9d37193a89a4b74da75db8c58415c46a6;hp=80d9ce39e941659847795f3ee731b8805f6baa81;hpb=641505fae22dcf83a1794707dcc39e821dbdd0ea;p=mkjsf-moved-to-github.git diff --git a/src/main/java/com/indexdata/mkjsf/pazpar2/data/Responses.java b/src/main/java/com/indexdata/mkjsf/pazpar2/data/Responses.java index 80d9ce3..1397023 100644 --- a/src/main/java/com/indexdata/mkjsf/pazpar2/data/Responses.java +++ b/src/main/java/com/indexdata/mkjsf/pazpar2/data/Responses.java @@ -1,27 +1,33 @@ package com.indexdata.mkjsf.pazpar2.data; +import java.io.IOException; import java.io.Serializable; +import java.io.UnsupportedEncodingException; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import javax.enterprise.context.SessionScoped; +import javax.faces.context.ExternalContext; +import javax.faces.context.FacesContext; import javax.inject.Named; import org.apache.log4j.Logger; import com.indexdata.mkjsf.errors.ErrorHelper; import com.indexdata.mkjsf.errors.ErrorInterface; +import com.indexdata.mkjsf.pazpar2.data.sp.SpResponseDataObject; import com.indexdata.mkjsf.pazpar2.data.sp.SpResponses; import com.indexdata.mkjsf.utils.Utils; -@Named("pzresp") @SessionScoped +@SessionScoped @Named public class Responses implements Serializable { private static final long serialVersionUID = -7543231258346154642L; protected Map dataObjects = new ConcurrentHashMap(); private static Logger logger = Logger.getLogger(Responses.class); private ErrorHelper errorHelper = null; + private SpResponses sp = null; public Responses() { } @@ -39,10 +45,15 @@ public class Responses implements Serializable { logger.info("Error detected in search"); return true; } - for (String name : dataObjects.keySet()) { + for (String name : dataObjects.keySet()) { if (dataObjects.get(name).hasApplicationError()) { - logger.info("Error detected in " + name); - return true; + if (dataObjects.get(name) instanceof SpResponseDataObject && + ((SpResponseDataObject)dataObjects.get(name)).unsupportedCommand()) { + logger.debug("Command [" + name + "] not supported by this service"); + } else { + logger.info("Error detected in " + name); + return true; + } } } return false; @@ -70,28 +81,27 @@ public class Responses implements Serializable { return error; } - public void resetSearchResponses() { + public void resetSearchAndBeyond() { logger.debug("Resetting show,stat,termlist,bytarget,record,search response objects."); dataObjects.put("show", new ShowResponse()); dataObjects.put("stat", new StatResponse()); dataObjects.put("termlist", new TermListsResponse()); dataObjects.put("bytarget", new ByTarget()); dataObjects.put("record", new RecordResponse()); - dataObjects.put("search", new SearchResponse()); + dataObjects.put("search", new SearchResponse()); + getSp().resetSearchAndBeyond(false); } - public void resetAllSessionData () { - logger.debug("Resetting all response objects"); - dataObjects = new ConcurrentHashMap(); - resetSearchResponses(); - dataObjects.put("init", new InitResponse()); + public void resetInitAndBeyond () { + dataObjects.put("init", new InitResponse()); + resetSearchAndBeyond(); + getSp().resetInitAndBeyond(false); } - - public InitResponse getInit () { - logger.info("Request to show init response from " + Utils.objectId(this)); + + public InitResponse getInit () { return ((InitResponse) dataObjects.get("init")); } - + public ShowResponse getShow () { return ((ShowResponse) dataObjects.get("show")); } @@ -111,7 +121,7 @@ public class Responses implements Serializable { public TermListsResponse getTermLists () { return ((TermListsResponse) dataObjects.get("termlist")); } - + public List getFacetTerms (String facet, int count) { return (getTermLists().getTermList(facet).getTerms(count)); } @@ -135,17 +145,38 @@ public class Responses implements Serializable { } public String getActiveClients() { - if (getShow()!=null) { + if (getShow()!=null && getShow().getActiveClients().length()>0) { logger.debug("Active clients: "+getShow().getActiveClients()); - return getShow().getActiveClients(); + return String.valueOf( + Math.max(Integer.parseInt(getShow().getActiveClients()), + getStat().getActiveClients())); } else { return ""; } } + public void download(String commandName) throws UnsupportedEncodingException, IOException { + logger.info(Utils.objectId(this) + " got a download request for " + + commandName); + ResponseDataObject object = dataObjects.get(commandName); + FacesContext facesContext = FacesContext.getCurrentInstance(); + ExternalContext externalContext = facesContext.getExternalContext(); + if (object.getIsBinary()) { + externalContext.setResponseHeader("Content-Type","application/octet-stream"); + externalContext.setResponseHeader("Content-Length",String.valueOf(object.getBinary().length)); + externalContext.setResponseHeader("Content-Disposition","attachment;filename=\"" + commandName + ".data\""); + externalContext.getResponseOutputStream().write(object.getBinary()); + } else { + externalContext.setResponseHeader("Content-Type","application/xml; charset=\"utf-8\""); + externalContext.setResponseHeader("Content-Length",String.valueOf(dataObjects.get(commandName).getXml().getBytes("UTF-8").length)); + externalContext.setResponseHeader("Content-Disposition","attachment;filename=\"" + commandName + ".xml\""); + externalContext.getResponseOutputStream().write(dataObjects.get(commandName).getXml().getBytes("UTF-8")); + } + facesContext.responseComplete(); + } + public SpResponses getSp() { - // TODO: - return null; + return (sp == null ? new SpResponses(this) : sp); } - -} + +} \ No newline at end of file