Adding errors to be handled. Organizing error handling.
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / pz2utils4jsf / config / Pz2ConfigureByMk2Config.java
1 package com.indexdata.pz2utils4jsf.config;\r
2 \r
3 import java.io.IOException;\r
4 import java.util.ArrayList;\r
5 import java.util.List;\r
6 \r
7 import javax.enterprise.context.SessionScoped;\r
8 import javax.enterprise.inject.Alternative;\r
9 import javax.faces.context.ExternalContext;\r
10 import javax.faces.context.FacesContext;\r
11 import javax.inject.Named;\r
12 import javax.servlet.ServletContext;\r
13 import javax.servlet.http.HttpServletRequest;\r
14 \r
15 import org.apache.log4j.Logger;\r
16 \r
17 import com.indexdata.masterkey.config.MasterkeyConfiguration;\r
18 import com.indexdata.masterkey.config.ModuleConfiguration;\r
19 import com.indexdata.pz2utils4jsf.errors.ConfigurationException;\r
20 import com.indexdata.pz2utils4jsf.utils.Utils;\r
21 import static com.indexdata.pz2utils4jsf.utils.Utils.nl;\r
22 \r
23 @Named @SessionScoped @Alternative\r
24 public class Pz2ConfigureByMk2Config implements Pz2Configurator  {\r
25 \r
26   private static final long serialVersionUID = 8865086878660568870L;\r
27   private static Logger logger = Logger.getLogger(Pz2ConfigureByMk2Config.class);\r
28   private Pz2Config pz2config = null;\r
29   private String configFilePathAndName = "none";\r
30 \r
31   public Pz2ConfigureByMk2Config () throws IOException {\r
32     logger.info(Utils.objectId(this) + " is instantiating Pazpar2 service configuration by MasterKey configuration scheme.");\r
33   }\r
34     \r
35   @Override\r
36   public Pz2Config getConfig() throws ConfigurationException {\r
37     if (pz2config == null) {\r
38       createConfig();\r
39     }\r
40     return pz2config;\r
41   }\r
42   \r
43   private void createConfig () throws ConfigurationException {\r
44     ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();\r
45     ServletContext servletContext = (ServletContext) externalContext.getContext();  \r
46     MasterkeyConfiguration mkConfigContext;\r
47     try {\r
48       mkConfigContext = MasterkeyConfiguration.getInstance(servletContext,\r
49       "pazpar-application-jsf", ((HttpServletRequest) externalContext.getRequest()).getServerName());\r
50     } catch (IOException e) {\r
51       throw new ConfigurationException("Pz2ConfigureByMk2Config could not configure Pazpar2 client using MasterKey configuration scheme: "+e.getMessage(),e);\r
52     }\r
53     configFilePathAndName = mkConfigContext.getConfigFileLocation().getConfigFilePath();    \r
54     try {\r
55       ModuleConfiguration moduleConfig = mkConfigContext.getModuleConfiguration("pz2client");\r
56       pz2config = new Pz2Config(moduleConfig);\r
57       logger.info(document());\r
58     } catch (IOException e) {\r
59       throw new ConfigurationException("Pz2ConfigureByMk2Config could not get configuration for module 'pz2client': "+e.getMessage(),e);\r
60     }        \r
61   }\r
62   \r
63 \r
64   public List<String> document() {\r
65     List<String> doc = new ArrayList<String>();\r
66     doc.add(":"+nl+"Attempted to configure service using the file " + configFilePathAndName);\r
67     doc.add(nl+"-- Configured to access Pazpar2 at: " +pz2config.get("PAZPAR2_URL"));\r
68     if (pz2config.get("PAZPAR2_SERVICE_XML") != null) {\r
69       doc.add(nl+"-- Configured to use the service definition contained in " + pz2config.getConfigFilePath() + "/" + pz2config.get("PAZPAR2_SERVICE_XML"));\r
70       if (pz2config.get("PAZPAR2_SETTINGS_XML") != null) {\r
71         doc.add(nl+"-- Configured to use the target settings contained in " + pz2config.getConfigFilePath() + "/" + pz2config.get("PAZPAR2_SETTINGS_XML"));\r
72       } else {\r
73         doc.add(nl+"-- Configured to use the server side target settings as defined in the service definition.");\r
74       }\r
75     } else if (pz2config.get("PAZPAR2_SERVICE_ID") != null) {\r
76       doc.add(nl+"-- Configured to use the server side service definition identified by service id \""+pz2config.get("PAZPAR2_SERVICE_ID") + "\"");\r
77     } else {\r
78       doc.add(nl+"Error: Did not find service ID nor service definition XML file for setting up a pazpar2 service.");\r
79     }\r
80     return doc;\r
81   }\r
82     \r
83 \r
84 }\r