Created
September 15, 2011 19:42
-
-
Save etiennepeiniau/1220273 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class SiteDescriptionFactoryBean implements InitializingBean, FactoryBean{ | |
30 | |
31 private SiteDescriptionMap siteDescriptionMap; | |
32 private Logger logger = Logger.getLogger(SiteDescriptionFactoryBean.class); | |
33 private Properties properties = new Properties(); | |
34 | |
35 @Override | |
36 public void afterPropertiesSet() throws Exception { | |
37 ClassPathResource siteDescriptionFile = new ClassPathResource("sites_description.xml"); | |
38 DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); | |
39 Document doc = dBuilder.parse(siteDescriptionFile.getFile()); | |
40 XPath xpath = XPathFactory.newInstance().newXPath(); | |
41 buildDescriptions(doc, xpath); | |
42 } | |
43 | |
44 private void buildDescriptions(Document doc, XPath xpath) { | |
45 siteDescriptionMap = new SiteDescriptionMap(); | |
46 try { | |
47 XPathExpression getSiteNodes = xpath.compile("/sites/site"); | |
48 XPathExpression getAvailableLanguages = xpath.compile("/availableLanguages/lang"); | |
49 DTMNodeList siteNodes = (DTMNodeList) getSiteNodes.evaluate(doc, XPathConstants.NODESET); | |
50 for (int i=0; i < siteNodes.getLength(); i++){ | |
51 SiteDescriptor descriptor = new SiteDescriptor(); | |
52 Node siteNode = siteNodes.item(i); | |
53 NamedNodeMap attributes = siteNode.getAttributes(); | |
54 String siteName = attributes.getNamedItem("name").getNodeValue(); | |
55 String boUrlString = getServiceUrl(siteName); | |
56 if (boUrlString == null ){ | |
57 continue; | |
58 } | |
59 descriptor.setBoUrl(boUrlString.substring(0,boUrlString.indexOf("remoting")-1)); | |
60 descriptor.setDefaultLocale(attributes.getNamedItem("defaultLocale").getNodeValue()); | |
61 if ("multi".equalsIgnoreCase(attributes.getNamedItem("modelang").getNodeValue())){ | |
62 descriptor.setModeLang(SiteDescriptor.ModeLang.MULTI); | |
63 String country = attributes.getNamedItem("sufixLocale").getNodeValue().substring(1); | |
64 DTMNodeList availableLanguages = (DTMNodeList) getAvailableLanguages.evaluate(siteNode, XPathConstants.NODESET); | |
65 for (int j=0; j < availableLanguages.getLength(); j++){ | |
66 descriptor.addLocale(availableLanguages.item(j).getNodeValue(),country); | |
67 } | |
68 } else { | |
69 descriptor.setModeLang(SiteDescriptor.ModeLang.MONO); | |
70 } | |
71 siteDescriptionMap.addDescription(siteName, descriptor); | |
72 } | |
73 } catch (XPathExpressionException e) { | |
74 logger.error(e); | |
75 } | |
76 } | |
77 | |
78 private String getServiceUrl(String siteName) { | |
79 | |
80 String serviceUrl; | |
81 try { | |
82 SelectablePropertyPlaceholderConfigurer sppc = | |
83 (SelectablePropertyPlaceholderConfigurer) ServiceFactory.getService("propertyConfigurer"); | |
84 String configKey = sppc.getConfigKey(); | |
85 logger.debug("config key: " + configKey); | |
86 | |
87 String packageName = "com.renault.eplatform.edito"; | |
88 if(logger.isDebugEnabled()){ | |
89 logger.debug("looking for file " + configKey + ".properties (siteName=" + siteName + ") "+ | |
90 "in package: " + packageName); | |
91 } | |
92 | |
93 StringBuilder sb = new StringBuilder("/"); | |
94 ClassPathResource cpr = new ClassPathResource(sb.append(packageName.replace('.', '/')).append("/").append(configKey).append(".properties").toString()); | |
95 InputStream is = null; | |
96 try { | |
97 is = cpr.getInputStream(); | |
98 properties.load(is); | |
99 if(logger.isDebugEnabled()){ | |
100 logger.debug("properties loaded: " + properties); | |
101 } | |
102 } catch (IOException ioe) { | |
103 logger.fatal("An error occured while trying to load properties", ioe); | |
104 } finally { | |
105 if(is != null){ | |
106 try { | |
107 is.close(); | |
108 } catch (IOException e) { | |
109 // ignore | |
110 } | |
111 } | |
112 } | |
113 | |
114 String keyBoVnUrl = new String("remote.urls.bo-vn."); | |
115 keyBoVnUrl += siteName; | |
116 serviceUrl = properties.getProperty(keyBoVnUrl); | |
117 logger.debug("[serviceUrl]["+serviceUrl+"]"); | |
118 | |
119 return serviceUrl; | |
120 | |
121 } catch(Exception e) { | |
122 logger.fatal("An error occured while trying to get the backoffice's url", e); | |
123 } | |
124 return null; | |
125 } | |
126 | |
127 | |
128 @Override | |
129 public Object getObject() throws Exception { | |
130 return this.siteDescriptionMap; | |
131 } | |
132 | |
133 @Override | |
134 public Class getObjectType() { | |
135 return SiteDescriptionMap.class; | |
136 } | |
137 | |
138 @Override | |
139 public boolean isSingleton() { | |
140 return true; | |
141 } | |
142 } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment