You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by jo...@apache.org on 2005/06/29 00:59:14 UTC

svn commit: r202298 - in /cocoon/trunk/src/java/org/apache/cocoon/i18n: XMLResourceBundle.java XMLResourceBundleFactory.java

Author: joerg
Date: Tue Jun 28 15:59:13 2005
New Revision: 202298

URL: http://svn.apache.org/viewcvs?rev=202298&view=rev
Log:
made the sourceURI of an XMLBundle unmodifiable,
i.e. sourceURI can only be set via init() and no longer changed in load() or update()
http://marc.theaimsgroup.com/?t=111978020800002&r=1&w=4

Modified:
    cocoon/trunk/src/java/org/apache/cocoon/i18n/XMLResourceBundle.java
    cocoon/trunk/src/java/org/apache/cocoon/i18n/XMLResourceBundleFactory.java

Modified: cocoon/trunk/src/java/org/apache/cocoon/i18n/XMLResourceBundle.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/i18n/XMLResourceBundle.java?rev=202298&r1=202297&r2=202298&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/i18n/XMLResourceBundle.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/i18n/XMLResourceBundle.java Tue Jun 28 15:59:13 2005
@@ -53,7 +53,7 @@
  * </pre>
  *
  * Value can be any well formed XML snippet and it will be cached by the key specified
- * in the attrbute <code>key</code>. Objects returned by this {@link Bundle} implementation
+ * in the attribute <code>key</code>. Objects returned by this {@link Bundle} implementation
  * are instances of the {@link ParamSaxBuffer} class.
  *
  * @author <a href="mailto:dev@cocoon.apache.org">Apache Cocoon Team</a>
@@ -82,11 +82,10 @@
      */
     public static final String AT_KEY = "key";
 
-
     /**
-     * Bundle name
+     * Source URI of the bundle
      */
-    private String name;
+    private String sourceURI;
 
     /**
      * Bundle validity
@@ -147,7 +146,7 @@
         }
 
         public void startElement(String ns, String localName, String qName, Attributes atts) throws SAXException {
-            switch (state) {
+            switch (this.state) {
                 case 0:
                     // <i18n:catalogue>
                     if (!"".equals(ns) && !NS.equals(ns)) {
@@ -158,7 +157,7 @@
                         throw new SAXException("Root element must be <" + EL_CATALOGUE + ">.");
                     }
                     this.namespace = ns;
-                    state ++;
+                    this.state++;
                     break;
                 case 1:
                     // <i18n:message>
@@ -175,12 +174,12 @@
                         throw new SAXException("<" + EL_MESSAGE + "> must have '" +
                                                AT_KEY + "' attribute.");
                     }
-                    buffer = new ParamSaxBuffer();
-                    values.put(key, buffer);
-                    state ++;
+                    this.buffer = new ParamSaxBuffer();
+                    this.values.put(key, this.buffer);
+                    this.state++;
                     break;
                 case 2:
-                    buffer.startElement(ns, localName, qName, atts);
+                    this.buffer.startElement(ns, localName, qName, atts);
                     break;
                 default:
                     throw new SAXException("Internal error: Invalid state");
@@ -188,20 +187,20 @@
         }
 
         public void endElement(String ns, String localName, String qName) throws SAXException {
-            switch (state) {
+            switch (this.state) {
                 case 0:
                     break;
                 case 1:
                     // </i18n:catalogue>
-                    state --;
+                    this.state--;
                     break;
                 case 2:
                     if (this.namespace.equals(ns) && EL_MESSAGE.equals(localName)) {
                         // </i18n:message>
                         this.buffer = null;
-                        state --;
+                        this.state--;
                     } else {
-                        buffer.endElement(ns, localName, qName);
+                        this.buffer.endElement(ns, localName, qName);
                     }
                     break;
                 default:
@@ -210,26 +209,26 @@
         }
 
         public void startPrefixMapping(String prefix, String uri) throws SAXException {
-            if (buffer != null) {
-                buffer.startPrefixMapping(prefix, uri);
+            if (this.buffer != null) {
+                this.buffer.startPrefixMapping(prefix, uri);
             }
         }
 
         public void endPrefixMapping(String prefix) throws SAXException {
-            if (buffer != null) {
-                buffer.endPrefixMapping(prefix);
+            if (this.buffer != null) {
+                this.buffer.endPrefixMapping(prefix);
             }
         }
 
         public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
-            if (buffer != null) {
-                buffer.ignorableWhitespace(ch, start, length);
+            if (this.buffer != null) {
+                this.buffer.ignorableWhitespace(ch, start, length);
             }
         }
 
         public void characters(char[] ch, int start, int length) throws SAXException {
-            if (buffer != null) {
-                buffer.characters(ch, start, length);
+            if (this.buffer != null) {
+                this.buffer.characters(ch, start, length);
             }
         }
     }
@@ -254,8 +253,7 @@
     /**
      * Initalize the bundle
      *
-     * @param name name of the bundle
-     * @param sourceURL source URL of the XML bundle
+     * @param sourceURI source URI of the XML bundle
      * @param locale locale
      * @param parent parent bundle of this bundle
      *
@@ -263,38 +261,31 @@
      * @throws ProcessingException if an error occurs while loading the bundle
      * @throws SAXException if an error occurs while loading the bundle
      */
-    public void init(String name, String sourceURL, Locale locale, Bundle parent)
+    public void init(String sourceURI, Locale locale, Bundle parent)
     throws IOException, ProcessingException, SAXException {
-        if (getLogger().isDebugEnabled()) {
-            getLogger().debug("Loading XML bundle: " + name + ", locale: " + locale);
-        }
-
-        this.name = name;
+        this.sourceURI = sourceURI;
         this.locale = locale;
         this.parent = parent;
         this.values = new HashMap();
-        load(sourceURL);
+        load();
     }
 
     /**
-     * Load the XML bundle, based on the source URL.
-     *
-     * @param sourceURL source URL of the XML bundle
+     * Load the XML bundle, based on the source URI.
      *
      * @exception IOException if an IO error occurs while reading the file
      * @exception ProcessingException if no parser is configured
      * @exception SAXException if an error occurs while parsing the file
      */
-    protected void load(String sourceURL)
-    throws IOException, ProcessingException, SAXException {
+    protected void load() throws IOException, ProcessingException, SAXException {
         Source source = null;
         SourceResolver resolver = null;
         try {
-            int valid = this.validity == null? SourceValidity.INVALID: this.validity.isValid();
+            int valid = this.validity == null ? SourceValidity.INVALID : this.validity.isValid();
             if (valid != SourceValidity.VALID) {
                 // Saved validity is not valid, get new source and validity
                 resolver = (SourceResolver) this.manager.lookup(SourceResolver.ROLE);
-                source = resolver.resolveURI(sourceURL);
+                source = resolver.resolveURI(this.sourceURI);
                 SourceValidity sourceValidity = source.getValidity();
                 if (valid == SourceValidity.INVALID || this.validity.isValid(sourceValidity) != SourceValidity.VALID) {
                     HashMap values = new HashMap();
@@ -302,14 +293,14 @@
                     this.validity = sourceValidity;
                     this.values = values;
                     if (getLogger().isDebugEnabled()) {
-                        getLogger().debug("Loaded XML bundle: " + this.name + ", locale: " + this.locale);
+                        getLogger().debug("Loaded XML bundle: " + this.sourceURI + ", locale: " + this.locale);
                     }
                 }
             }
         } catch (ServiceException e) {
             throw new ProcessingException("Can't lookup source resolver", e);
         } catch (MalformedURLException e) {
-            throw new SourceNotFoundException("Invalid resource URL: " + sourceURL, e);
+            throw new SourceNotFoundException("Invalid resource URL: " + this.sourceURI, e);
         } finally {
             if (source != null) {
                 resolver.release(source);
@@ -319,15 +310,6 @@
     }
 
     /**
-     * Gets the name of the bundle.
-     *
-     * @return the name
-     */
-    public String getName() {
-        return this.name;
-    }
-
-    /**
      * Gets the validity of the bundle.
      *
      * @return the validity
@@ -356,7 +338,7 @@
             return null;
         }
 
-        Object value = values.get(key);
+        Object value = this.values.get(key);
         if (value == null && this.parent != null) {
             value = this.parent.getObject(key);
         }
@@ -397,16 +379,14 @@
     }
 
     /**
-     * Reload this bundle if URI's timestam is newer than ours
-     *
-     * @param sourceURL source URL of the XML bundle
+     * Reload this bundle if URI's timestamp is newer than ours.
      */
-    public void update(String sourceURL) {
+    public void update() {
         try {
-            load(sourceURL);
+            load();
         } catch (Exception e) {
-            getLogger().info("Resource update failed. " + this.name + ", locale: " + this.locale +
-                             " Exception: " + e);
+            getLogger().info("Resource update failed. " + this.sourceURI + ", locale: " + this.locale
+                             + " Exception: " + e);
         }
     }
 }

Modified: cocoon/trunk/src/java/org/apache/cocoon/i18n/XMLResourceBundleFactory.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/i18n/XMLResourceBundleFactory.java?rev=202298&r1=202297&r2=202298&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/i18n/XMLResourceBundleFactory.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/i18n/XMLResourceBundleFactory.java Tue Jun 28 15:59:13 2005
@@ -53,12 +53,12 @@
        implements BundleFactory, Serviceable, Configurable, Disposable, ThreadSafe, LogEnabled {
 
     /**
-     * Cache of the bundles by file name
+     * Cache of the bundles
      */
     protected final Map cache = Collections.synchronizedMap(new HashMap());
 
     /**
-     * Cache for the file names of the bundles that were not found
+     * Cache for the bundles that were not found
      */
     protected final Map cacheNotFound = new HashMap();
 
@@ -152,7 +152,7 @@
      * @return the directory path
      */
     protected String getDirectory() {
-        return directory;
+        return this.directory;
     }
 
     /**
@@ -161,7 +161,7 @@
      * @return true if pre-loading all resources; false otherwise
      */
     protected boolean cacheAtStartup() {
-        return cacheAtStartup;
+        return this.cacheAtStartup;
     }
 
     /**
@@ -255,12 +255,11 @@
         }
 
         final String cacheKey = getCacheKey(directories, index, name, locale);
-        final String fileName = getFileName(directories[index], name, locale);
 
-        XMLResourceBundle bundle = selectCached(cacheKey, fileName);
+        XMLResourceBundle bundle = selectCached(cacheKey);
         if (bundle == null) {
             synchronized (this) {
-                bundle = selectCached(cacheKey, fileName);
+                bundle = selectCached(cacheKey);
                 if (bundle == null) {
                     boolean localeAvailable = (locale != null && !locale.getLanguage().equals(""));
                     index++;
@@ -276,6 +275,7 @@
                     }
 
                     if (!isNotFoundBundle(cacheKey)) {
+                        final String fileName = getFileName(directories[index - 1], name, locale);
                         bundle = _loadBundle(name, fileName, locale, parentBundle);
                         updateCache(cacheKey, bundle);
                     }
@@ -309,7 +309,7 @@
             bundle = new XMLResourceBundle();
             bundle.enableLogging(this.logger);
             bundle.service(this.manager);
-            bundle.init(name, fileName, locale, parentBundle);
+            bundle.init(fileName, locale, parentBundle);
             return bundle;
         } catch (ResourceNotFoundException e) {
             getLogger().info("Resource not found: " + name + ", locale: " + locale +
@@ -416,13 +416,12 @@
      * Selects a bundle from the cache.
      *
      * @param cacheKey          caching key of the bundle
-     * @param fileName          file name of the bundle
      * @return                  the cached bundle; null, if not found
      */
-    protected XMLResourceBundle selectCached(String cacheKey, String fileName) {
+    protected XMLResourceBundle selectCached(String cacheKey) {
         XMLResourceBundle bundle = (XMLResourceBundle) this.cache.get(cacheKey);
         if (bundle != null) {
-            bundle.update(fileName);
+            bundle.update();
         }
 
         if (getLogger().isDebugEnabled()) {