--- /dev/null
+package com.indexdata.mkjsf.config;\r
+\r
+import static com.indexdata.mkjsf.utils.Utils.nl;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Enumeration;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import javax.enterprise.context.SessionScoped;\r
+import javax.enterprise.inject.Alternative;\r
+import javax.faces.context.ExternalContext;\r
+import javax.faces.context.FacesContext;\r
+import javax.inject.Named;\r
+import javax.servlet.ServletContext;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import com.indexdata.mkjsf.errors.ConfigurationException;\r
+import com.indexdata.mkjsf.errors.MissingConfigurationContextException;\r
+\r
+/**\r
+ * Reads a configuration from the context parameters of the deployment descriptor (web.xml)\r
+ * \r
+ * @author Niels Erik\r
+ *\r
+ */\r
+@Named @SessionScoped @Alternative\r
+public class WebXmlConfigReader implements ConfigurationReader {\r
+\r
+ private static final long serialVersionUID = 144390224959311772L;\r
+ private static Logger logger = Logger.getLogger(WebXmlConfigReader.class);\r
+ private Configuration config = null;\r
+ private Map<String,String> parameters = new HashMap<String,String>(); \r
+ \r
+ public WebXmlConfigReader () {\r
+ logger.info("Instantiating Pazpar2 service configuration by web.xml parameters");\r
+ }\r
+ \r
+ public Configuration getConfiguration(Configurable configurable) throws ConfigurationException {\r
+ if (config == null) {\r
+ parameters.putAll(configurable.getDefaults());\r
+ parameters.putAll(readConfig());\r
+ config = new Configuration(parameters);\r
+ }\r
+ return config;\r
+ }\r
+ \r
+ private Map<String,String> readConfig () throws ConfigurationException {\r
+ Map<String,String> map = new HashMap<String,String>();\r
+ ExternalContext externalContext = null;\r
+ try {\r
+ externalContext = FacesContext.getCurrentInstance().getExternalContext();\r
+ } catch (NullPointerException e) {\r
+ throw new MissingConfigurationContextException("WebXmlConfig: Configuration failed due to missing FacesContext.");\r
+ }\r
+ ServletContext servletContext = (ServletContext) externalContext.getContext(); \r
+ Enumeration<String> enumer = servletContext.getInitParameterNames();\r
+ while (enumer.hasMoreElements()) {\r
+ String name = enumer.nextElement();\r
+ map.put(name,servletContext.getInitParameter(name));\r
+ }\r
+ return map; \r
+ }\r
+ \r
+ public List<String> document() {\r
+ List<String> doc = new ArrayList<String>();\r
+ doc.add("Application properties as read by " + this.getClass());\r
+ for (String key : parameters.keySet()) {\r
+ doc.add(nl+key+": "+ parameters.get(key));\r
+ }\r
+ return doc;\r
+ }\r
+}\r