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