KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > blandware > atleap > service > core > impl > ApplicationResourceManagerImpl


1 package com.blandware.atleap.service.core.impl;
2
3 import com.blandware.atleap.common.util.ApplicationResourceStorage;
4 import com.blandware.atleap.common.util.ConvertUtil;
5 import com.blandware.atleap.common.util.PartialCollection;
6 import com.blandware.atleap.common.util.QueryInfo;
7 import com.blandware.atleap.model.core.ApplicationResource;
8 import com.blandware.atleap.model.core.ContentLocale;
9 import com.blandware.atleap.persistence.core.ApplicationResourceDAO;
10 import com.blandware.atleap.persistence.core.ContentLocaleDAO;
11 import com.blandware.atleap.service.core.ApplicationResourceManager;
12 import com.blandware.atleap.service.exception.BeanNotFoundException;
13
14 import java.io.IOException JavaDoc;
15 import java.io.InputStream JavaDoc;
16 import java.io.PrintWriter JavaDoc;
17 import java.io.StringWriter JavaDoc;
18 import java.util.Enumeration JavaDoc;
19 import java.util.HashMap JavaDoc;
20 import java.util.Iterator JavaDoc;
21 import java.util.List JavaDoc;
22 import java.util.Locale JavaDoc;
23 import java.util.Map JavaDoc;
24 import java.util.Properties JavaDoc;
25
26 /**
27  * <p>Implementation of ApplicationResourceManager interface.
28  * </p>
29  * <p><a HREF="ApplicationResourceManagerImpl.java.htm"> <i>View Source </i> </a>
30  * </p>
31  *
32  * @author Sergey Zubtcovskii <a HREF="mailto:sergey.zubtcovskii@blandware.com">&lt;sergey.zubtcovskii@blandware.com&gt;</a>
33  * @version $Revision: 1.6 $ $Date: 2005/11/19 14:15:36 $
34  */

35 public class ApplicationResourceManagerImpl extends BaseManagerImpl implements ApplicationResourceManager {
36
37     /**
38      * Name of resource bundle to lookup in file system
39      */

40     protected String JavaDoc resourceBundleName;
41
42     /**
43      * Application resource DAO
44      */

45     protected ApplicationResourceDAO applicationResourceDAO;
46
47     /**
48      * Content locale DAO
49      */

50     protected ContentLocaleDAO contentLocaleDAO;
51
52     /**
53      * Sets name of resource bundle
54      *
55      * @param resourceBundleName Name of resource bundle
56      */

57     public void setResourceBundleName(String JavaDoc resourceBundleName) {
58         this.resourceBundleName = resourceBundleName;
59     }
60
61     /**
62      * Sets DAO for operating with application resources
63      *
64      * @param applicationResourceDAO DAO for operating with application resources
65      */

66     public void setApplicationResourceDAO(ApplicationResourceDAO applicationResourceDAO) {
67         this.applicationResourceDAO = applicationResourceDAO;
68     }
69
70     /**
71      * Sets DAO for operating with content locales
72      *
73      * @param contentLocaleDAO DAO for operating with content locales
74      */

75     public void setContentLocaleDAO(ContentLocaleDAO contentLocaleDAO) {
76         this.contentLocaleDAO = contentLocaleDAO;
77     }
78
79     /**
80      * @see com.blandware.atleap.service.core.ApplicationResourceManager#loadResources(boolean)
81      */

82     public ApplicationResourceStorage loadResources(boolean overrideDynamicValues) {
83         ApplicationResourceStorage applicationResourceStorage = new ApplicationResourceStorage();
84
85         // load bundles for all locales, existent in persistent storage
86
List JavaDoc availableLocales = contentLocaleDAO.listContentLocales(null).asList();
87
88         // fill in our application resources object
89
for ( Iterator JavaDoc i = availableLocales.iterator(); i.hasNext(); ) {
90             ContentLocale contentLocale = (ContentLocale) i.next();
91             applicationResourceStorage.mergeBundle(loadBundle(contentLocale, overrideDynamicValues));
92         }
93
94         // delete unexistent keys from persistent layer
95
List JavaDoc resources = listApplicationResources(null).asList();
96         for ( Iterator JavaDoc i = resources.iterator(); i.hasNext(); ) {
97             ApplicationResource resource = (ApplicationResource) i.next();
98             ApplicationResource.ApplicationResourceID id = resource.getId();
99             String JavaDoc key = id.getKey();
100             String JavaDoc localeIdentifier = id.getLocale().getIdentifier();
101             Locale locale = new Locale(localeIdentifier);
102             if ( !applicationResourceStorage.isMessagePresent(locale, key) ) {
103                 applicationResourceDAO.deleteApplicationResource(resource);
104             }
105         }
106
107         return applicationResourceStorage;
108     }
109
110     /**
111      * @see com.blandware.atleap.service.core.ApplicationResourceManager#loadBundle(com.blandware.atleap.model.core.ContentLocale)
112      */

113     public ApplicationResourceStorage.Bundle loadBundle(ContentLocale locale) {
114         return loadBundle(locale, false);
115     }
116
117     /**
118      * @see com.blandware.atleap.service.core.ApplicationResourceManager#dropBundle(String)
119      */

120     public void dropBundle(String JavaDoc localeIdentifier) {
121         Map JavaDoc queryParameters = new HashMap JavaDoc();
122         queryParameters.put("localeIdentifier", localeIdentifier);
123         QueryInfo queryInfo = new QueryInfo();
124         queryInfo.setQueryParameters(queryParameters);
125         List JavaDoc resources = listApplicationResources(queryInfo).asList();
126         for ( Iterator JavaDoc i = resources.iterator(); i.hasNext(); ) {
127             ApplicationResource resource = (ApplicationResource) i.next();
128             applicationResourceDAO.deleteApplicationResource(resource);
129         }
130     }
131
132     /**
133      * @see com.blandware.atleap.service.core.ApplicationResourceManager#retrieveApplicationResource(String, String)
134      */

135     public ApplicationResource retrieveApplicationResource(String JavaDoc key, String JavaDoc localeIdentifier) {
136         ContentLocale locale = contentLocaleDAO.retrieveContentLocale(localeIdentifier);
137         return retrieveApplicationResource(key, locale);
138     }
139
140     /**
141      * @see com.blandware.atleap.service.core.ApplicationResourceManager#updateApplicationResource(String, String, String, Long)
142      */

143     public void updateApplicationResource(String JavaDoc localeIdentifier, String JavaDoc key, String JavaDoc value, Long JavaDoc version) throws BeanNotFoundException {
144         ApplicationResource resource = retrieveApplicationResource(key, localeIdentifier);
145         if ( resource == null ) {
146             // check locale for existense
147
ContentLocale locale = contentLocaleDAO.retrieveContentLocale(localeIdentifier);
148             if ( locale == null ) {
149                 throw new BeanNotFoundException("Locale with identifier '" + localeIdentifier + "' does not exist");
150             } else {
151                 resource = new ApplicationResource(locale, key, null);
152             }
153         } else {
154             applicationResourceDAO.removeFromCache(resource);
155         }
156         byte[] valueBytes = ConvertUtil.convertToByteArray(value);
157         if ( resource.getValue() == null || !resource.getValue().equals(valueBytes) ) {
158             resource.setValue(valueBytes);
159
160             if (version != null)
161                 resource.setVersion(version);
162
163             // call to persistence layer in order to update object
164
applicationResourceDAO.updateApplicationResource(resource);
165         }
166     }
167
168     /**
169      * @see com.blandware.atleap.service.core.ApplicationResourceManager#listApplicationResources(com.blandware.atleap.common.util.QueryInfo)
170      */

171     public PartialCollection listApplicationResources(QueryInfo queryInfo) {
172         return applicationResourceDAO.listApplicationResources(queryInfo);
173     }
174
175     /**
176      * Internal service method for retrieving bundle
177      *
178      * @param contentLocale Content locale for which to retrieve bundle
179      * @param overrideDynamicValues whether to override values with values
180      * from filesystem
181      * @return Retrieved bundle
182      */

183     protected ApplicationResourceStorage.Bundle loadBundle(ContentLocale contentLocale, boolean overrideDynamicValues) {
184         Locale locale = new Locale(contentLocale.getIdentifier());
185         ApplicationResourceStorage.Bundle bundle = new ApplicationResourceStorage.Bundle(locale);
186
187         String JavaDoc bundleName = resourceBundleName.replace('.', '/') + "_" + contentLocale.getIdentifier();
188
189         bundleName += ".properties";
190         InputStream JavaDoc in = null;
191         Properties JavaDoc props = new Properties JavaDoc();
192
193         ClassLoader JavaDoc classLoader = Thread.currentThread().getContextClassLoader();
194         if ( classLoader == null ) {
195             classLoader = getClass().getClassLoader();
196         }
197
198         in = classLoader.getResourceAsStream(bundleName);
199         if ( in != null ) {
200             try {
201                 props.load(in);
202             } catch ( IOException JavaDoc e ) {
203                 if ( log.isErrorEnabled() ) {
204                     log.error("Failed to load resource bundle for locale '" + contentLocale.getIdentifier() + "'. Cause: ");
205                     // print stack trace
206
StringWriter JavaDoc sw = new StringWriter JavaDoc();
207                     e.printStackTrace(new PrintWriter JavaDoc(sw));
208                     log.error(sw.toString());
209                 }
210             } finally {
211                 try {
212                     in.close();
213                 } catch ( Exception JavaDoc e ) {
214                 }
215             }
216         }
217
218         // fill in bundle object and create values for unexistent keys
219
Enumeration JavaDoc keys = props.propertyNames();
220         while ( keys.hasMoreElements() ) {
221             String JavaDoc key = (String JavaDoc) keys.nextElement();
222             String JavaDoc value = props.getProperty(key);
223             if ( value == null ) {
224                 value = new String JavaDoc();
225             }
226             ApplicationResource resource = retrieveApplicationResource(key, contentLocale);
227             byte[] valueBytes = ConvertUtil.convertToByteArray(value);
228             if ( resource == null ) {
229                 resource = new ApplicationResource(contentLocale, key, value);
230                 applicationResourceDAO.createApplicationResource(resource);
231             } else if ( overrideDynamicValues && !valueBytes.equals(resource.getValue()) ) {
232                 resource.setValue(valueBytes);
233                 applicationResourceDAO.updateApplicationResource(resource);
234             } else {
235                 value = ConvertUtil.convertToString(resource.getValue());
236             }
237             bundle.putMessage(key, value);
238         }
239
240         return bundle;
241     }
242
243     /**
244      * Internal service method for retrieving application resource by key and
245      * content locale
246      *
247      * @param key Application resource key
248      * @param locale The content locale for which to return application resource
249      * @return Application resource
250      */

251     protected ApplicationResource retrieveApplicationResource(String JavaDoc key, ContentLocale locale) {
252         ApplicationResource.ApplicationResourceID id = new ApplicationResource.ApplicationResourceID(locale, key);
253         return applicationResourceDAO.retrieveApplicationResource(id);
254     }
255
256 }
257
Popular Tags