Refactors commands and injection
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / ServiceProxyExtensions.java
1 package com.indexdata.mkjsf.pazpar2;\r
2 \r
3 import java.io.IOException;\r
4 import java.io.Serializable;\r
5 import java.io.UnsupportedEncodingException;\r
6 \r
7 import javax.enterprise.context.SessionScoped;\r
8 import javax.inject.Inject;\r
9 import javax.inject.Named;\r
10 \r
11 import org.apache.log4j.Logger;\r
12 import org.apache.myfaces.custom.fileupload.UploadedFile;\r
13 \r
14 import com.indexdata.mkjsf.config.ConfigurationReader;\r
15 import com.indexdata.mkjsf.pazpar2.commands.CommandParameter;\r
16 import com.indexdata.mkjsf.pazpar2.commands.sp.AuthCommand;\r
17 import com.indexdata.mkjsf.pazpar2.commands.sp.InitDocUpload;\r
18 import com.indexdata.mkjsf.pazpar2.data.ResponseDataObject;\r
19 import com.indexdata.mkjsf.pazpar2.data.ResponseParser;\r
20 import com.indexdata.mkjsf.pazpar2.data.sp.CategoriesResponse;\r
21 import com.indexdata.mkjsf.pazpar2.data.sp.SpResponseDataObject;\r
22 import com.indexdata.mkjsf.utils.Utils;\r
23 \r
24 @Named("pz2x") @SessionScoped\r
25 public class ServiceProxyExtensions implements ServiceProxyInterface, Serializable {\r
26     \r
27   private static final long serialVersionUID = 4221824985678758225L;\r
28   private static Logger logger = Logger.getLogger(ServiceProxyExtensions.class);  \r
29   private String initDocFileName = "";\r
30   private String initDocResponse = "";  \r
31   private InitDocUpload initDocUpload; \r
32     \r
33   @Inject ConfigurationReader configurator;  \r
34   @Inject Pz2Bean pz2;\r
35     \r
36   public ServiceProxyExtensions() {\r
37     this.initDocUpload = new InitDocUpload(this);\r
38     // TODO: \r
39     //stateMgr.addStateListener(this);\r
40   }\r
41      \r
42   public void authenticate() {    \r
43     if (pz2.getPzresp().getSp().getAuth().unsupportedCommand()) {\r
44       logger.warn("Running seemingly unsupported command [auth] against SP.");\r
45     }\r
46     pz2.resetSearchAndRecordCommands();\r
47     pz2.getPzresp().getSp().resetAuthAndBeyond(true);\r
48     AuthCommand auth = pz2.getPzreq().getSp().getAuth();     \r
49     ClientCommandResponse commandResponse = pz2.getSpClient().send(auth);      \r
50     String renamedResponse = renameResponseElement(commandResponse.getResponseString(), "auth");    \r
51     commandResponse.setResponseToParse(renamedResponse);\r
52     SpResponseDataObject responseObject = (SpResponseDataObject) ResponseParser.getParser().getDataObject(commandResponse);    \r
53     if (ResponseParser.docTypes.contains(responseObject.getType())) {\r
54       pz2.getPzresp().put(auth.getCommandName(), responseObject);\r
55     }\r
56     if (responseObject.unsupportedCommand()) {\r
57       logger.error("auth command does not seem to be supported by this Service Proxy");\r
58     }\r
59     String responseStr = commandResponse.getResponseString();\r
60     logger.info(responseStr);          \r
61   }\r
62   \r
63   public void login(String un, String pw) {      \r
64       login(un,pw,"");\r
65   }\r
66   \r
67   public void login(String un, String pw, String navigateTo) {      \r
68     pz2.getPzreq().getSp().getAuth().setUsername(un);\r
69     pz2.getPzreq().getSp().getAuth().setPassword(pw);\r
70     login("");\r
71   }  \r
72     \r
73   @Override  \r
74   public String login(String navigateTo) {\r
75     AuthCommand auth = pz2.getPzreq().getSp().getAuth(); \r
76     auth.setParameterInState(new CommandParameter("action","=","login"));\r
77     authenticate();\r
78     return navigateTo;\r
79   }\r
80     \r
81   public void ipAuthenticate () {  \r
82     AuthCommand auth = pz2.getPzreq().getSp().getAuth(); \r
83     auth.setParameterInState(new CommandParameter("action","=","ipAuth"));\r
84     authenticate();\r
85   }\r
86   \r
87   private String renameResponseElement(String responseString, String newName) {\r
88     responseString = responseString.replace("<response>", "<" + newName + ">");\r
89     responseString = responseString.replace("</response>", "</" + newName + ">");\r
90     return responseString;\r
91   }\r
92     \r
93   public String getInitDocPath () {\r
94     return pz2.getSpClient().getConfiguration().get("INIT_DOC_PATH");\r
95   }\r
96   \r
97   @Override\r
98   public void setInitFileName(String fileName) {\r
99     this.initDocFileName = fileName;\r
100     \r
101   }\r
102 \r
103   @Override\r
104   public String getInitFileName() {\r
105     return initDocFileName;\r
106   }\r
107 \r
108   @Override\r
109   public ClientCommandResponse postInit() throws UnsupportedEncodingException, IOException {    \r
110     String initDocPath = pz2.getSpClient().getInitDocPaths().get(0);\r
111     logger.info("Paths: " + pz2.getSpClient().getInitDocPaths());\r
112     logger.info("Path: " + initDocPath);   \r
113     pz2.resetSearchAndRecordCommands();\r
114     pz2.getPzresp().getSp().resetAuthAndBeyond(true);\r
115     ClientCommandResponse response = pz2.getSpClient().postInitDoc(initDocPath + getInitFileName());    \r
116     return response;\r
117   }\r
118   \r
119   @Override\r
120   public HttpResponseWrapper postInit(byte[] initDoc, boolean includeDebug) throws UnsupportedEncodingException, IOException {    \r
121     pz2.resetSearchAndRecordCommands();\r
122     pz2.getPzresp().getSp().resetAuthAndBeyond(true);\r
123     HttpResponseWrapper response = pz2.getSpClient().postInitDoc(initDoc,includeDebug);    \r
124     return response;\r
125   }\r
126 \r
127   @Override\r
128   public String getInitResponse() {\r
129     return initDocResponse;\r
130   }\r
131   \r
132   public void setUploadedInitDoc (UploadedFile uploadedFile) {\r
133     initDocUpload.setUploadedFile(uploadedFile);\r
134   }\r
135   \r
136   public UploadedFile getUploadedInitDoc () {\r
137     return initDocUpload.getUploadedFile();\r
138   }\r
139   \r
140   public void submitInitDoc () throws IOException {\r
141     ClientCommandResponse response =  (ClientCommandResponse) initDocUpload.submit();\r
142     ResponseDataObject responseObject = ResponseParser.getParser().getDataObject(response);\r
143     logger.info("Putting init response to : " + Utils.objectId(pz2.getPzresp()));\r
144     pz2.getPzresp().put("init", responseObject);\r
145   }\r
146   \r
147   public void setIncludeInitDocDebug(boolean bool) {\r
148     logger.info(Utils.objectId(this) + " setting debug to " + bool);\r
149     initDocUpload.setIncludeDebug(bool);\r
150   }\r
151 \r
152   public boolean getIncludeInitDocDebug() {\r
153     return initDocUpload.getIncludeDebug();\r
154   }\r
155   \r
156   // TODO: Remove when obsolete\r
157   public InitDocUpload getInitDocUpload () {\r
158     return initDocUpload;\r
159   }\r
160   \r
161   public CategoriesResponse getCategories () {       \r
162     String command="categories";\r
163     if (pz2.isServiceProxyService()) {\r
164       if (pz2.getPzresp().getSp().getCategories().unsupportedCommand()) {\r
165         logger.info("Skipping seemingly unsupported command: " + command);  \r
166         return new CategoriesResponse();\r
167       } else {\r
168         SpResponseDataObject response = (SpResponseDataObject) pz2.doCommand(command);\r
169         if (response.unsupportedCommand()) {\r
170           logger.warn("Command 'categories' not supported by this Service Proxy");          \r
171         } else if (response.hasApplicationError()) {\r
172           logger.error(response.getXml());            \r
173         }  \r
174         try {\r
175             return (CategoriesResponse) response;\r
176         } catch (Exception e) {\r
177             e.printStackTrace();\r
178             logger.debug(response.getXml());\r
179             return new CategoriesResponse();\r
180         }\r
181       }\r
182     } else {\r
183       return new CategoriesResponse();\r
184     }\r
185   }\r
186   \r
187   \r
188 }\r