\r
import com.indexdata.mkjsf.errors.ErrorHelper;\r
import com.indexdata.mkjsf.errors.ErrorInterface;\r
-import com.indexdata.mkjsf.pazpar2.data.sp.CategoriesResponse;\r
+import com.indexdata.mkjsf.pazpar2.data.sp.SpResponseDataObject;\r
+import com.indexdata.mkjsf.pazpar2.data.sp.SpResponses;\r
import com.indexdata.mkjsf.utils.Utils;\r
\r
-@Named("pzresp") @SessionScoped\r
+@SessionScoped @Named\r
public class Responses implements Serializable {\r
\r
private static final long serialVersionUID = -7543231258346154642L;\r
protected Map<String,ResponseDataObject> dataObjects = new ConcurrentHashMap<String,ResponseDataObject>();\r
private static Logger logger = Logger.getLogger(Responses.class);\r
private ErrorHelper errorHelper = null;\r
+ private SpResponses sp = null;\r
\r
public Responses() { \r
}\r
logger.info("Error detected in search");\r
return true;\r
}\r
- for (String name : dataObjects.keySet()) {\r
+ for (String name : dataObjects.keySet()) { \r
if (dataObjects.get(name).hasApplicationError()) {\r
- logger.info("Error detected in " + name);\r
- return true;\r
+ if (dataObjects.get(name) instanceof SpResponseDataObject &&\r
+ ((SpResponseDataObject)dataObjects.get(name)).unsupportedCommand()) {\r
+ logger.debug("Command [" + name + "] not supported by this service"); \r
+ } else {\r
+ logger.info("Error detected in " + name);\r
+ return true;\r
+ }\r
}\r
} \r
return false;\r
return error; \r
}\r
\r
- public void resetSearchResponses() {\r
+ public void resetSearchAndBeyond() {\r
logger.debug("Resetting show,stat,termlist,bytarget,record,search response objects.");\r
dataObjects.put("show", new ShowResponse());\r
dataObjects.put("stat", new StatResponse());\r
dataObjects.put("termlist", new TermListsResponse());\r
dataObjects.put("bytarget", new ByTarget());\r
dataObjects.put("record", new RecordResponse());\r
- dataObjects.put("search", new SearchResponse()); \r
+ dataObjects.put("search", new SearchResponse());\r
+ getSp().resetSearchAndBeyond(false);\r
}\r
\r
- public void resetAllSessionData () {\r
- logger.debug("Resetting all response objects");\r
- dataObjects = new ConcurrentHashMap<String,ResponseDataObject>(); \r
- resetSearchResponses();\r
- dataObjects.put("init", new InitResponse());\r
- dataObjects.put("auth", new AuthResponse());\r
- dataObjects.put("categories", new CategoriesResponse());\r
+ public void resetInitAndBeyond () {\r
+ dataObjects.put("init", new InitResponse()); \r
+ resetSearchAndBeyond();\r
+ getSp().resetInitAndBeyond(false);\r
}\r
- \r
+ \r
public InitResponse getInit () { \r
return ((InitResponse) dataObjects.get("init"));\r
}\r
return ((ByTarget) dataObjects.get("bytarget"));\r
}\r
\r
- // Service Proxy extras \r
- public AuthResponse getAuth () {\r
- return ((AuthResponse) dataObjects.get("auth"));\r
- }\r
-\r
- public CategoriesResponse getCategories() {\r
- return ((CategoriesResponse) dataObjects.get("categories"));\r
- }\r
- // Service Proxy extras\r
- \r
-\r
public ResponseDataObject getResponseObject (String name) {\r
return dataObjects.get(name);\r
}\r
public void download(String commandName) throws UnsupportedEncodingException, IOException {\r
logger.info(Utils.objectId(this) + " got a download request for "\r
+ commandName);\r
+ ResponseDataObject object = dataObjects.get(commandName); \r
FacesContext facesContext = FacesContext.getCurrentInstance();\r
ExternalContext externalContext = facesContext.getExternalContext();\r
- externalContext.setResponseHeader("Content-Type","application/xml; charset=\"utf-8\"");\r
- externalContext.setResponseHeader("Content-Length",String.valueOf(dataObjects.get(commandName).getXml().getBytes("UTF-8").length));\r
- externalContext.setResponseHeader("Content-Disposition","attachment;filename=\"" + commandName + ".xml\"");\r
- externalContext.getResponseOutputStream().write(dataObjects.get(commandName).getXml().getBytes("UTF-8"));\r
+ if (object.getIsBinary()) {\r
+ externalContext.setResponseHeader("Content-Type","application/octet-stream");\r
+ externalContext.setResponseHeader("Content-Length",String.valueOf(object.getBinary().length));\r
+ externalContext.setResponseHeader("Content-Disposition","attachment;filename=\"" + commandName + ".data\"");\r
+ externalContext.getResponseOutputStream().write(object.getBinary()); \r
+ } else {\r
+ externalContext.setResponseHeader("Content-Type","application/xml; charset=\"utf-8\"");\r
+ externalContext.setResponseHeader("Content-Length",String.valueOf(dataObjects.get(commandName).getXml().getBytes("UTF-8").length));\r
+ externalContext.setResponseHeader("Content-Disposition","attachment;filename=\"" + commandName + ".xml\"");\r
+ externalContext.getResponseOutputStream().write(dataObjects.get(commandName).getXml().getBytes("UTF-8"));\r
+ }\r
facesContext.responseComplete();\r
}\r
+ \r
+ public SpResponses getSp() {\r
+ return (sp == null ? new SpResponses(this) : sp);\r
+ }\r
+ \r
}
\ No newline at end of file