Adds checks for unsupported commands
[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 import java.util.ArrayList;\r
7 import java.util.List;\r
8 \r
9 import javax.enterprise.context.SessionScoped;\r
10 import javax.inject.Inject;\r
11 import javax.inject.Named;\r
12 \r
13 import org.apache.log4j.Logger;\r
14 import org.apache.myfaces.custom.fileupload.UploadedFile;\r
15 \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
27 \r
28 @Named("pz2x") @SessionScoped\r
29 public class ServiceProxyExtensions implements ServiceProxyInterface, Serializable {\r
30     \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
36     \r
37   @Inject ConfigurationReader configurator;  \r
38   @Inject Pz2Bean pz2;\r
39   @Inject Pazpar2Commands pzreq;\r
40   @Inject Responses pzresp;\r
41     \r
42   public ServiceProxyExtensions() {\r
43     this.initDocUpload = new InitDocUpload(this);\r
44     // TODO: \r
45     //stateMgr.addStateListener(this);\r
46   }\r
47      \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
52     }\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
62     }\r
63     if (responseObject.unsupportedCommand()) {\r
64       logger.error("auth command does not seem to be supported by this Service Proxy");\r
65     }\r
66     String responseStr = commandResponse.getResponseString();\r
67     logger.info(responseStr);          \r
68   }\r
69   \r
70   public void login(String un, String pw) {      \r
71       login(un,pw,"");\r
72   }\r
73   \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
77     login("");\r
78   }  \r
79     \r
80   @Override  \r
81   public String login(String navigateTo) {\r
82     AuthCommand auth = pzreq.getSp().getAuth(); \r
83     auth.setParameterInState(new CommandParameter("action","=","login"));\r
84     authenticate();\r
85     return navigateTo;\r
86   }\r
87     \r
88   public void ipAuthenticate () {  \r
89     AuthCommand auth = pzreq.getSp().getAuth(); \r
90     auth.setParameterInState(new CommandParameter("action","=","ipAuth"));\r
91     authenticate();\r
92   }\r
93   \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
98   }\r
99     \r
100   public String getInitDocPath () {\r
101     return pz2.getSpClient().getConfiguration().get("INIT_DOC_PATH");\r
102   }\r
103   \r
104   @Override\r
105   public void setInitFileName(String fileName) {\r
106     this.initDocFileName = fileName;\r
107     \r
108   }\r
109 \r
110   @Override\r
111   public String getInitFileName() {\r
112     return initDocFileName;\r
113   }\r
114 \r
115   @Override\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
123     return response;\r
124   }\r
125   \r
126   @Override\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
131     return response;\r
132   }\r
133 \r
134   @Override\r
135   public String getInitResponse() {\r
136     return initDocResponse;\r
137   }\r
138   \r
139   public void setUploadedInitDoc (UploadedFile uploadedFile) {\r
140     initDocUpload.setUploadedFile(uploadedFile);\r
141   }\r
142   \r
143   public UploadedFile getUploadedInitDoc () {\r
144     return initDocUpload.getUploadedFile();\r
145   }\r
146   \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
152   }\r
153   \r
154   public void setIncludeInitDocDebug(boolean bool) {\r
155     logger.info(Utils.objectId(this) + " setting debug to " + bool);\r
156     initDocUpload.setIncludeDebug(bool);\r
157   }\r
158 \r
159   public boolean getIncludeInitDocDebug() {\r
160     return initDocUpload.getIncludeDebug();\r
161   }\r
162   \r
163   // TODO: Remove when obsolete\r
164   public InitDocUpload getInitDocUpload () {\r
165     return initDocUpload;\r
166   }\r
167   \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
174       } else {\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
180         }  \r
181         try {\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
187         }\r
188       }\r
189     } else {\r
190       return new CategoriesResponse();\r
191     }\r
192   }\r
193   \r
194   \r
195 }\r