Skip to content

Instantly share code, notes, and snippets.

@etiennepeiniau
Created September 15, 2011 19:42
Show Gist options
  • Save etiennepeiniau/1220273 to your computer and use it in GitHub Desktop.
Save etiennepeiniau/1220273 to your computer and use it in GitHub Desktop.
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