Fixes authentication issues
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / config / WebXmlConfigReader.java
1 package com.indexdata.mkjsf.config;\r
2 \r
3 import static com.indexdata.mkjsf.utils.Utils.nl;\r
4 \r
5 import java.util.ArrayList;\r
6 import java.util.Enumeration;\r
7 import java.util.HashMap;\r
8 import java.util.List;\r
9 import java.util.Map;\r
10 \r
11 import javax.enterprise.context.SessionScoped;\r
12 import javax.enterprise.inject.Alternative;\r
13 import javax.faces.context.ExternalContext;\r
14 import javax.faces.context.FacesContext;\r
15 import javax.inject.Named;\r
16 import javax.servlet.ServletContext;\r
17 \r
18 import org.apache.log4j.Logger;\r
19 \r
20 import com.indexdata.mkjsf.errors.ConfigurationException;\r
21 import com.indexdata.mkjsf.errors.MissingConfigurationContextException;\r
22 \r
23 /**\r
24  * Reads a configuration from the context parameters of the deployment descriptor (web.xml)\r
25  * \r
26  * @author Niels Erik\r
27  *\r
28  */\r
29 @Named @SessionScoped @Alternative\r
30 public class WebXmlConfigReader implements ConfigurationReader {\r
31 \r
32   private static final long serialVersionUID = 144390224959311772L;\r
33   private static Logger logger = Logger.getLogger(WebXmlConfigReader.class);\r
34   private Configuration config = null;\r
35   private Map<String,String> parameters = new HashMap<String,String>(); \r
36   \r
37   public WebXmlConfigReader () {\r
38     logger.info("Instantiating Pazpar2 service configuration by web.xml parameters");\r
39   }\r
40   \r
41   public Configuration getConfiguration(Configurable configurable) throws ConfigurationException {\r
42     if (config == null) {\r
43       parameters.putAll(configurable.getDefaults());\r
44       parameters.putAll(readConfig());\r
45       config = new Configuration(parameters);\r
46     }\r
47     return config;\r
48   }\r
49       \r
50   private Map<String,String> readConfig () throws ConfigurationException {\r
51     Map<String,String> map = new HashMap<String,String>();\r
52     ExternalContext externalContext = null;\r
53     try {\r
54       externalContext = FacesContext.getCurrentInstance().getExternalContext();\r
55     } catch (NullPointerException e) {\r
56       throw new MissingConfigurationContextException("WebXmlConfig: Configuration failed due to missing FacesContext.");\r
57     }\r
58     ServletContext servletContext = (ServletContext) externalContext.getContext();        \r
59     Enumeration<String> enumer = servletContext.getInitParameterNames();\r
60     while (enumer.hasMoreElements()) {\r
61       String name = enumer.nextElement();\r
62       map.put(name,servletContext.getInitParameter(name));\r
63     }\r
64     return map;    \r
65   }\r
66   \r
67   public List<String> document() {\r
68     List<String> doc = new ArrayList<String>();\r
69     doc.add("Application properties as read by " + this.getClass());\r
70     for (String key :  parameters.keySet()) {\r
71       doc.add(nl+key+": "+ parameters.get(key));\r
72     }\r
73     return doc;\r
74   }\r
75 }\r