65950597518d3404b255c567cd587b9428c573e2
[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     \r
35   public ServiceProxyExtensions() {\r
36     this.initDocUpload = new InitDocUpload(this);\r
37     // TODO: \r
38     //stateMgr.addStateListener(this);\r
39   }\r
40      \r
41   public void authenticate() {    \r
42     if (Pz2Bean.get().getPzresp().getSp().getAuth().unsupportedCommand()) {\r
43       logger.warn("Running seemingly unsupported command [auth] against SP.");\r
44     }\r
45     Pz2Bean.get().resetSearchAndRecordCommands();\r
46     Pz2Bean.get().getPzresp().getSp().resetAuthAndBeyond(true);\r
47     Pz2Bean.get().getPzreq().getSp().getAuth().run();\r
48   }\r
49   \r
50   public void login(String un, String pw) {      \r
51       login(un,pw,"");\r
52   }\r
53   \r
54   public void login(String un, String pw, String navigateTo) {      \r
55     Pz2Bean.get().getPzreq().getSp().getAuth().setUsername(un);\r
56     Pz2Bean.get().getPzreq().getSp().getAuth().setPassword(pw);\r
57     login("");\r
58   }  \r
59     \r
60   @Override  \r
61   public String login(String navigateTo) {\r
62     AuthCommand auth = Pz2Bean.get().getPzreq().getSp().getAuth(); \r
63     auth.setParameterInState(new CommandParameter("action","=","login"));\r
64     authenticate();\r
65     return navigateTo;\r
66   }\r
67     \r
68   public void ipAuthenticate () {  \r
69     AuthCommand auth = Pz2Bean.get().getPzreq().getSp().getAuth(); \r
70     auth.setParameterInState(new CommandParameter("action","=","ipAuth"));\r
71     authenticate();\r
72   }\r
73       \r
74   public String getInitDocPath () {\r
75     return Pz2Bean.get().getSpClient().getConfiguration().get("INIT_DOC_PATH");\r
76   }\r
77   \r
78   @Override\r
79   public void setInitFileName(String fileName) {\r
80     this.initDocFileName = fileName;\r
81     \r
82   }\r
83 \r
84   @Override\r
85   public String getInitFileName() {\r
86     return initDocFileName;\r
87   }\r
88 \r
89   @Override\r
90   public ClientCommandResponse postInit() throws UnsupportedEncodingException, IOException {    \r
91     String initDocPath = Pz2Bean.get().getSpClient().getInitDocPaths().get(0);\r
92     logger.info("Paths: " + Pz2Bean.get().getSpClient().getInitDocPaths());\r
93     logger.info("Path: " + initDocPath);   \r
94     Pz2Bean.get().resetSearchAndRecordCommands();\r
95     Pz2Bean.get().getPzresp().getSp().resetAuthAndBeyond(true);\r
96     ClientCommandResponse response = Pz2Bean.get().getSpClient().postInitDoc(initDocPath + getInitFileName());    \r
97     return response;\r
98   }\r
99   \r
100   @Override\r
101   public HttpResponseWrapper postInit(byte[] initDoc, boolean includeDebug) throws UnsupportedEncodingException, IOException {    \r
102     Pz2Bean.get().resetSearchAndRecordCommands();\r
103     Pz2Bean.get().getPzresp().getSp().resetAuthAndBeyond(true);\r
104     HttpResponseWrapper response = Pz2Bean.get().getSpClient().postInitDoc(initDoc,includeDebug);    \r
105     return response;\r
106   }\r
107 \r
108   @Override\r
109   public String getInitResponse() {\r
110     return initDocResponse;\r
111   }\r
112   \r
113   public void setUploadedInitDoc (UploadedFile uploadedFile) {\r
114     initDocUpload.setUploadedFile(uploadedFile);\r
115   }\r
116   \r
117   public UploadedFile getUploadedInitDoc () {\r
118     return initDocUpload.getUploadedFile();\r
119   }\r
120   \r
121   public void submitInitDoc () throws IOException {\r
122     ClientCommandResponse response =  (ClientCommandResponse) initDocUpload.submit();\r
123     ResponseDataObject responseObject = ResponseParser.getParser().getDataObject(response);    \r
124     Pz2Bean.get().getPzresp().put("init", responseObject);\r
125   }\r
126   \r
127   public void setIncludeInitDocDebug(boolean bool) {\r
128     logger.info(Utils.objectId(this) + " setting debug to " + bool);\r
129     initDocUpload.setIncludeDebug(bool);\r
130   }\r
131 \r
132   public boolean getIncludeInitDocDebug() {\r
133     return initDocUpload.getIncludeDebug();\r
134   }\r
135   \r
136   // TODO: Remove when obsolete\r
137   public InitDocUpload getInitDocUpload () {\r
138     return initDocUpload;\r
139   }\r
140   \r
141   public CategoriesResponse getCategories () {       \r
142     String command="categories";\r
143     if (Pz2Bean.get().isServiceProxyService()) {\r
144       if (Pz2Bean.get().getPzresp().getSp().getCategories().unsupportedCommand()) {\r
145         logger.info("Skipping seemingly unsupported command: " + command);  \r
146         return new CategoriesResponse();\r
147       } else {\r
148         SpResponseDataObject response = (SpResponseDataObject) Pz2Bean.get().getPzreq().getSp().getCategories().run();\r
149         if (response.unsupportedCommand()) {\r
150           logger.warn("Command 'categories' not supported by this Service Proxy");          \r
151         } else if (response.hasApplicationError()) {\r
152           logger.error(response.getXml());            \r
153         }  \r
154         try {\r
155             return (CategoriesResponse) response;\r
156         } catch (Exception e) {\r
157             e.printStackTrace();\r
158             logger.debug(response.getXml());\r
159             return new CategoriesResponse();\r
160         }\r
161       }\r
162     } else {\r
163       return new CategoriesResponse();\r
164     }\r
165   }\r
166   \r
167   \r
168 }\r