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