Attempts to avoid passivation errors due to http-client
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / Pz2Client.java
1 package com.indexdata.mkjsf.pazpar2;\r
2 \r
3 import static com.indexdata.mkjsf.utils.Utils.nl;\r
4 \r
5 import java.io.ByteArrayOutputStream;\r
6 import java.io.IOException;\r
7 import java.util.ArrayList;\r
8 import java.util.HashMap;\r
9 import java.util.List;\r
10 import java.util.Map;\r
11 \r
12 import org.apache.log4j.Logger;\r
13 \r
14 import com.indexdata.masterkey.config.MissingMandatoryParameterException;\r
15 import com.indexdata.masterkey.config.ModuleConfigurationGetter;\r
16 import com.indexdata.masterkey.pazpar2.client.ClientCommand;\r
17 import com.indexdata.masterkey.pazpar2.client.Pazpar2Client;\r
18 import com.indexdata.masterkey.pazpar2.client.Pazpar2ClientConfiguration;\r
19 import com.indexdata.masterkey.pazpar2.client.Pazpar2ClientGeneric;\r
20 import com.indexdata.masterkey.pazpar2.client.Pazpar2HttpResponse;\r
21 import com.indexdata.masterkey.pazpar2.client.exceptions.Pazpar2ErrorException;\r
22 import com.indexdata.masterkey.pazpar2.client.exceptions.ProxyErrorException;\r
23 import com.indexdata.mkjsf.config.Configuration;\r
24 import com.indexdata.mkjsf.config.ConfigurationReader;\r
25 import com.indexdata.mkjsf.errors.ConfigurationException;\r
26 import com.indexdata.mkjsf.pazpar2.commands.Pazpar2Command;\r
27 import com.indexdata.mkjsf.utils.Utils;\r
28 \r
29 public class Pz2Client implements SearchClient {\r
30 \r
31   private static final long serialVersionUID = 5414266730169982028L;\r
32   private static Logger logger = Logger.getLogger(Pz2Client.class);\r
33   private transient Pazpar2Client client = null;\r
34   private Pazpar2ClientConfiguration cfg = null;\r
35   public static final String MODULENAME = "pz2client";\r
36   public static Map<String,String> DEFAULTS = new HashMap<String,String>();\r
37   Configuration config = null;\r
38   \r
39   static {    \r
40     DEFAULTS.put("PROXY_MODE","1");\r
41     DEFAULTS.put("SERIALIZE_REQUESTS", "false");\r
42     DEFAULTS.put("STREAMBUFF_SIZE", "4096");\r
43     DEFAULTS.put("PARSE_RESPONSES", "true");    \r
44   }\r
45   \r
46   public Pz2Client() {}\r
47   \r
48   @Override\r
49   public void configure(ConfigurationReader configReader) throws ConfigurationException {    \r
50     logger.info(Utils.objectId(this) + " is configuring using the provided " + Utils.objectId(configReader));\r
51     try {\r
52       config = configReader.getConfiguration(this);\r
53       cfg = new Pazpar2ClientConfiguration(new ConfigurationGetter(config));\r
54     } catch (ProxyErrorException pe) {\r
55       logger.error("Could not configure Pazpar2 client: " + pe.getMessage());\r
56       throw new ConfigurationException("Could not configure Pz2Client:  "+ pe.getMessage(),pe);\r
57     } \r
58     if (cfg != null) {\r
59       try {\r
60         client = new Pazpar2ClientGeneric(cfg);  \r
61       } catch (ProxyErrorException pe) {\r
62         logger.error("Could not configure Pazpar2 client: " + pe.getMessage());\r
63         throw new ConfigurationException("Could not configure Pz2Client:  "+ pe.getMessage(),pe);\r
64       }\r
65     } else {\r
66       logger.error("There was a problem creating Pz2Client. Client is null after configuration.");\r
67       throw new ConfigurationException("Pazpar2Client is null after configuration");\r
68     } \r
69   }\r
70   \r
71   public boolean isAuthenticatingClient () {\r
72     return false;\r
73   }\r
74   \r
75   public boolean isAuthenticated() {\r
76     return false;\r
77   }\r
78   \r
79   public boolean authenticate() {\r
80     throw new UnsupportedOperationException("No authentication mechanism for straight pazpar2 client");\r
81   }\r
82   \r
83   @Override\r
84   public void setSearchCommand(Pazpar2Command command) {\r
85     ClientCommand clientCommand = new ClientCommand(command.getName(), command.getEncodedQueryString());\r
86     client.setSearchCommand(clientCommand);    \r
87   }\r
88 \r
89   @Override\r
90   public CommandResponse executeCommand(Pazpar2Command command, ByteArrayOutputStream baos) \r
91        throws Pazpar2ErrorException, IOException {\r
92     ClientCommand clientCommand = new ClientCommand(command.getName(), command.getEncodedQueryString());\r
93     Pazpar2HttpResponse pz2HttpResponse = client.executeCommand(clientCommand, baos);\r
94     return new Pz2CommandResponse(pz2HttpResponse,baos);\r
95   }\r
96 \r
97   public Pz2Client cloneMe() {\r
98     logger.debug("Cloning Pz2Client");\r
99     Pz2Client clone = new Pz2Client();\r
100     clone.client = this.client;\r
101     clone.cfg = this.cfg;\r
102     return clone;\r
103   }\r
104 \r
105   @Override\r
106   public Map<String, String> getDefaults() {\r
107     return DEFAULTS;\r
108   }\r
109 \r
110   @Override\r
111   public String getModuleName() {\r
112     return MODULENAME;\r
113   }\r
114   \r
115   class ConfigurationGetter implements ModuleConfigurationGetter {\r
116     Configuration config = null;\r
117     ConfigurationGetter(Configuration configuration) {\r
118       config = configuration;\r
119     }\r
120     @Override\r
121     public String get(String value) {\r
122       return config.get(value);\r
123     }\r
124     @Override\r
125     public String get(String value, String defaultValue) {\r
126       return config.get(value,defaultValue);\r
127     }\r
128     @Override\r
129     public String getMandatory(String name)\r
130         throws MissingMandatoryParameterException {\r
131       return config.getMandatory(name);\r
132     }\r
133     @Override\r
134     public String getConfigFilePath() {\r
135       return config.getConfigFilePath();\r
136     }\r
137   }\r
138 \r
139   @Override\r
140   public List<String> documentConfiguration() {\r
141     List<String> doc = new ArrayList<String>();\r
142     doc.add(nl+ MODULENAME + " was configured to access Pazpar2 at : " + cfg.PAZPAR2_URL);    \r
143     return new ArrayList<String>();\r
144   }\r
145   \r
146   public Configuration getConfiguration () {\r
147     return config;\r
148   }\r
149 \r
150 }\r