f5c0ad0766eb07bf9cbe4e48b6da191c125fcd34
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / Pz2ProxyBean.java
1 package com.indexdata.mkjsf.pazpar2;\r
2 \r
3 import java.io.IOException;\r
4 import java.io.UnsupportedEncodingException;\r
5 import java.util.ArrayList;\r
6 import java.util.List;\r
7 \r
8 import javax.annotation.PostConstruct;\r
9 import javax.enterprise.context.SessionScoped;\r
10 import javax.enterprise.inject.Alternative;\r
11 import javax.inject.Inject;\r
12 import javax.inject.Named;\r
13 \r
14 import org.apache.log4j.Logger;\r
15 \r
16 import com.indexdata.mkjsf.config.ConfigurationReader;\r
17 import com.indexdata.mkjsf.pazpar2.sp.ServiceProxyClient;\r
18 import com.indexdata.mkjsf.pazpar2.sp.ServiceProxyInterface;\r
19 import com.indexdata.mkjsf.pazpar2.sp.auth.ServiceProxyUser;\r
20 import com.indexdata.mkjsf.utils.Utils;\r
21 \r
22 @Named("pz2") @SessionScoped @Alternative\r
23 public class Pz2ProxyBean extends Pz2Bean implements ServiceProxyInterface {\r
24     \r
25   private static final long serialVersionUID = 4221824985678758225L;\r
26   private static Logger logger = Logger.getLogger(Pz2ProxyBean.class);  \r
27   private String initDocFileName = "";\r
28   private String initDocResponse = "";\r
29     \r
30   @Inject ConfigurationReader configurator;\r
31   @Inject ServiceProxyUser user;    \r
32   \r
33   public Pz2ProxyBean() {\r
34   }\r
35   \r
36   @PostConstruct\r
37   public void postConstruct() {\r
38     if (searchClient == null) {\r
39       logger.debug(Utils.objectId(this) + " will instantiate a ServiceProxyClient next.");    \r
40       searchClient = new ServiceProxyClient();\r
41       logger.info("Using [" + Utils.objectId(searchClient) + "] configured by [" \r
42                             + Utils.objectId(configurator) + "]" );    \r
43       configureClient(searchClient,configurator);\r
44       stateMgr.addStateListener(this);      \r
45     } else {\r
46       logger.debug("Pz2ProxyBean:postConstruct: searchClient already instantiated " +\r
47                         "during construction of parent object Pz2Bean.");\r
48     }\r
49   }\r
50   \r
51   public void login(String un, String pw) {\r
52     if (user.isAuthenticated() && user.getName().equals(un) && ((ServiceProxyClient) searchClient).checkAuthentication(user)) {\r
53       logger.info("Repeat request from UI to authenticate user. Auth verified for given user name so skipping log-in.");\r
54     } else {\r
55       logger.info("doing un/pw login");\r
56       user.setName(un);\r
57       user.setPassword(pw);\r
58       login("dummy");\r
59     }\r
60   }\r
61 \r
62   @Override\r
63   public String login(String navigateTo) {\r
64     logger.info("doing login");\r
65     ((ServiceProxyClient)searchClient).authenticate(user);    \r
66     pzreq.getRecord().removeParametersInState();\r
67     pzreq.getSearch().removeParametersInState();\r
68     pzresp.reset();\r
69     return navigateTo;\r
70   }\r
71   \r
72   public void ipAuthenticate (ServiceProxyUser user) {\r
73     if (!user.isIpAuthenticated()) {\r
74       if (user.isAuthenticated()) {\r
75         user.clear();\r
76       }\r
77       ((ServiceProxyClient)searchClient).ipAuthenticate(user);\r
78     }\r
79   }\r
80 \r
81   @Override\r
82   public void setServiceProxyUrl(String url) {\r
83     logger.info("Setting Service Proxy url: " + url);    \r
84     if (url!=null & !url.equals(((ServiceProxyClient)searchClient).getServiceProxyUrl())) {\r
85       pzreq.getRecord().removeParametersInState();\r
86       pzreq.getSearch().removeParametersInState();\r
87       pzresp.reset();\r
88       user.clear();\r
89       ((ServiceProxyClient)searchClient).setServiceProxyUrl(url);\r
90     }    \r
91   }\r
92   \r
93   public String getServiceProxyUrl() {\r
94     return ((ServiceProxyClient)searchClient).getServiceProxyUrl();\r
95   }\r
96   \r
97   public boolean getServiceProxyUrlIsDefined() {\r
98     return ((ServiceProxyClient)searchClient).getServiceProxyUrl().length()>0;\r
99   }\r
100   \r
101   public List<String> getServiceProxyUrls() {\r
102     List<String> urls = new ArrayList<String>();\r
103     urls.add("");\r
104     urls.addAll(((ServiceProxyClient)searchClient).getServiceProxyUrls());\r
105     return urls;\r
106   }\r
107     \r
108   public String getInitDocPath () {\r
109     return searchClient.getConfiguration().get("INIT_DOC_PATH");\r
110   }\r
111   \r
112   @Override\r
113   public void setInitFileName(String fileName) {\r
114     this.initDocFileName = fileName;\r
115     \r
116   }\r
117 \r
118   @Override\r
119   public String getInitFileName() {\r
120     return initDocFileName;\r
121   }\r
122 \r
123   @Override\r
124   public String postInit() throws UnsupportedEncodingException, IOException {    \r
125     String initDocPath = ((ServiceProxyClient)searchClient).getInitDocPaths().get(0);\r
126     logger.info("Paths: " + ((ServiceProxyClient)searchClient).getInitDocPaths());\r
127     logger.info("Path: " + initDocPath);\r
128     pzresp.reset();\r
129     byte[] response = ((ServiceProxyClient)searchClient).postInitDoc(initDocPath + getInitFileName());\r
130     initDocResponse = new String(response,"UTF-8");\r
131     return initDocResponse;\r
132   }\r
133   \r
134   @Override\r
135   public String postInit(byte[] initDoc, boolean includeDebug) throws UnsupportedEncodingException, IOException {    \r
136     pzresp.reset();\r
137     byte[] response = ((ServiceProxyClient)searchClient).postInitDoc(initDoc,includeDebug);\r
138     initDocResponse = new String(response,"UTF-8");\r
139     return initDocResponse;\r
140   }\r
141 \r
142   @Override\r
143   public String getInitResponse() {\r
144     return initDocResponse;\r
145   }\r
146   \r
147 }\r