1 package com.indexdata.mkjsf.pazpar2;
\r
3 import java.io.IOException;
\r
4 import java.io.Serializable;
\r
5 import java.io.UnsupportedEncodingException;
\r
6 import java.util.ArrayList;
\r
7 import java.util.List;
\r
9 import javax.enterprise.context.SessionScoped;
\r
10 import javax.inject.Inject;
\r
11 import javax.inject.Named;
\r
13 import org.apache.log4j.Logger;
\r
14 import org.apache.myfaces.custom.fileupload.UploadedFile;
\r
16 import com.indexdata.mkjsf.config.ConfigurationReader;
\r
17 import com.indexdata.mkjsf.pazpar2.commands.CommandParameter;
\r
18 import com.indexdata.mkjsf.pazpar2.commands.Pazpar2Commands;
\r
19 import com.indexdata.mkjsf.pazpar2.commands.sp.AuthCommand;
\r
20 import com.indexdata.mkjsf.pazpar2.commands.sp.InitDocUpload;
\r
21 import com.indexdata.mkjsf.pazpar2.data.ResponseDataObject;
\r
22 import com.indexdata.mkjsf.pazpar2.data.ResponseParser;
\r
23 import com.indexdata.mkjsf.pazpar2.data.Responses;
\r
24 import com.indexdata.mkjsf.pazpar2.data.sp.CategoriesResponse;
\r
25 import com.indexdata.mkjsf.pazpar2.data.sp.SpResponseDataObject;
\r
26 import com.indexdata.mkjsf.utils.Utils;
\r
28 @Named("pz2x") @SessionScoped
\r
29 public class ServiceProxyExtensions implements ServiceProxyInterface, Serializable {
\r
31 private static final long serialVersionUID = 4221824985678758225L;
\r
32 private static Logger logger = Logger.getLogger(ServiceProxyExtensions.class);
\r
33 private String initDocFileName = "";
\r
34 private String initDocResponse = "";
\r
35 private InitDocUpload initDocUpload;
\r
37 @Inject ConfigurationReader configurator;
\r
38 @Inject Pz2Bean pz2;
\r
39 @Inject Pazpar2Commands pzreq;
\r
40 @Inject Responses pzresp;
\r
42 public ServiceProxyExtensions() {
\r
43 this.initDocUpload = new InitDocUpload(this);
\r
45 //stateMgr.addStateListener(this);
\r
48 public void authenticate() {
\r
49 String command = "auth";
\r
50 if (pzresp.getSp().getAuth().unsupportedCommand()) {
\r
51 logger.warn("Running seemingly unsupported command [auth] against SP.");
\r
53 pz2.resetSearchAndRecordCommands();
\r
54 pzresp.getSp().resetAuthAndBeyond(true);
\r
55 AuthCommand auth = pzreq.getSp().getAuth();
\r
56 ClientCommandResponse commandResponse = pz2.getSpClient().send(auth);
\r
57 String renamedResponse = renameResponseElement(commandResponse.getResponseString(), "auth");
\r
58 commandResponse.setResponseToParse(renamedResponse);
\r
59 SpResponseDataObject responseObject = (SpResponseDataObject) ResponseParser.getParser().getDataObject(commandResponse);
\r
60 if (ResponseParser.docTypes.contains(responseObject.getType())) {
\r
61 pzresp.put(auth.getCommandName(), responseObject);
\r
63 if (responseObject.unsupportedCommand()) {
\r
64 logger.error("auth command does not seem to be supported by this Service Proxy");
\r
66 String responseStr = commandResponse.getResponseString();
\r
67 logger.info(responseStr);
\r
70 public void login(String un, String pw) {
\r
74 public void login(String un, String pw, String navigateTo) {
\r
75 pzreq.getSp().getAuth().setUsername(un);
\r
76 pzreq.getSp().getAuth().setPassword(pw);
\r
81 public String login(String navigateTo) {
\r
82 AuthCommand auth = pzreq.getSp().getAuth();
\r
83 auth.setParameterInState(new CommandParameter("action","=","login"));
\r
88 public void ipAuthenticate () {
\r
89 AuthCommand auth = pzreq.getSp().getAuth();
\r
90 auth.setParameterInState(new CommandParameter("action","=","ipAuth"));
\r
94 private String renameResponseElement(String responseString, String newName) {
\r
95 responseString = responseString.replace("<response>", "<" + newName + ">");
\r
96 responseString = responseString.replace("</response>", "</" + newName + ">");
\r
97 return responseString;
\r
100 public String getInitDocPath () {
\r
101 return pz2.getSpClient().getConfiguration().get("INIT_DOC_PATH");
\r
105 public void setInitFileName(String fileName) {
\r
106 this.initDocFileName = fileName;
\r
111 public String getInitFileName() {
\r
112 return initDocFileName;
\r
116 public ClientCommandResponse postInit() throws UnsupportedEncodingException, IOException {
\r
117 String initDocPath = pz2.getSpClient().getInitDocPaths().get(0);
\r
118 logger.info("Paths: " + pz2.getSpClient().getInitDocPaths());
\r
119 logger.info("Path: " + initDocPath);
\r
120 pz2.resetSearchAndRecordCommands();
\r
121 pzresp.getSp().resetAuthAndBeyond(true);
\r
122 ClientCommandResponse response = pz2.getSpClient().postInitDoc(initDocPath + getInitFileName());
\r
127 public HttpResponseWrapper postInit(byte[] initDoc, boolean includeDebug) throws UnsupportedEncodingException, IOException {
\r
128 pz2.resetSearchAndRecordCommands();
\r
129 pzresp.getSp().resetAuthAndBeyond(true);
\r
130 HttpResponseWrapper response = pz2.getSpClient().postInitDoc(initDoc,includeDebug);
\r
135 public String getInitResponse() {
\r
136 return initDocResponse;
\r
139 public void setUploadedInitDoc (UploadedFile uploadedFile) {
\r
140 initDocUpload.setUploadedFile(uploadedFile);
\r
143 public UploadedFile getUploadedInitDoc () {
\r
144 return initDocUpload.getUploadedFile();
\r
147 public void submitInitDoc () throws IOException {
\r
148 ClientCommandResponse response = (ClientCommandResponse) initDocUpload.submit();
\r
149 ResponseDataObject responseObject = ResponseParser.getParser().getDataObject(response);
\r
150 logger.info("Putting init response to : " + Utils.objectId(pzresp));
\r
151 pzresp.put("init", responseObject);
\r
154 public void setIncludeInitDocDebug(boolean bool) {
\r
155 logger.info(Utils.objectId(this) + " setting debug to " + bool);
\r
156 initDocUpload.setIncludeDebug(bool);
\r
159 public boolean getIncludeInitDocDebug() {
\r
160 return initDocUpload.getIncludeDebug();
\r
163 // TODO: Remove when obsolete
\r
164 public InitDocUpload getInitDocUpload () {
\r
165 return initDocUpload;
\r
168 public CategoriesResponse getCategories () {
\r
169 String command="categories";
\r
170 if (pz2.isServiceProxyService()) {
\r
171 if (pzresp.getSp().getCategories().unsupportedCommand()) {
\r
172 logger.info("Skipping seemingly unsupported command: " + command);
\r
173 return new CategoriesResponse();
\r
175 SpResponseDataObject response = (SpResponseDataObject) pz2.doCommand(command);
\r
176 if (response.unsupportedCommand()) {
\r
177 logger.warn("Command 'categories' not supported by this Service Proxy");
\r
178 } else if (response.hasApplicationError()) {
\r
179 logger.error(response.getXml());
\r
182 return (CategoriesResponse) response;
\r
183 } catch (Exception e) {
\r
184 e.printStackTrace();
\r
185 logger.debug(response.getXml());
\r
186 return new CategoriesResponse();
\r
190 return new CategoriesResponse();
\r