Merge branch 'master' of ssh://git.indexdata.com/home/git/private/mkjsf.git into...
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / config / WebXmlConfigReader.java
diff --git a/src/main/java/com/indexdata/mkjsf/config/WebXmlConfigReader.java b/src/main/java/com/indexdata/mkjsf/config/WebXmlConfigReader.java
new file mode 100644 (file)
index 0000000..6772ccc
--- /dev/null
@@ -0,0 +1,75 @@
+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