You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avalon.apache.org by ne...@apache.org on 2001/10/31 20:56:48 UTC

cvs commit: jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/test DefaultBundleLoaderTestCase.java DefaultBundleLoaderTestCase.xtest XmlBundle.xml XmlBundleTestCase.java XmlBundleTestCase.xtest AbstractBundleTestCase.java

neeme       01/10/31 11:56:47

  Modified:    src/scratchpad/org/apache/avalon/excalibur/i18n
                        AbstractBundle.java Bundle.java BundleSelector.java
                        DefaultBundleLoader.java DefaultMapper.java
                        DirectoryMapper.java XmlBundle.java
               src/scratchpad/org/apache/avalon/excalibur/i18n/test
                        AbstractBundleTestCase.java
  Added:       src/scratchpad/org/apache/avalon/excalibur/i18n/test
                        DefaultBundleLoaderTestCase.java
                        DefaultBundleLoaderTestCase.xtest XmlBundle.xml
                        XmlBundleTestCase.java XmlBundleTestCase.xtest
  Log:
  first round of bugfixing and testing the rewritten i18n support.
  no major changes.
  
  Revision  Changes    Path
  1.4       +3 -1      jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/AbstractBundle.java
  
  Index: AbstractBundle.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/AbstractBundle.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- AbstractBundle.java	2001/10/31 19:39:05	1.3
  +++ AbstractBundle.java	2001/10/31 19:56:47	1.4
  @@ -86,7 +86,7 @@
        * @exception MissingResourceException if value was not found
        */
       public String getString(String key, Map variables) {
  -        return convertKey(substitute(getString(key), variables));
  +        return substitute(getString(key), variables);
       }
   
       /**
  @@ -113,6 +113,7 @@
        */
       public String substitute(String value, Map values) {
           if (value == null || values == null) return value;
  +        if (getLogger().isDebugEnabled()) getLogger().debug("Substituting value: " + value);
   
           StringBuffer result = new StringBuffer(value.length());
           int startPos = 0;
  @@ -149,6 +150,7 @@
                       endPos++;
               }
           }
  +        if (getLogger().isDebugEnabled()) getLogger().debug("Returning substituted value: " + result);
           return result.toString();
       }
   
  
  
  
  1.2       +8 -4      jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/Bundle.java
  
  Index: Bundle.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/Bundle.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Bundle.java	2001/10/30 21:38:56	1.1
  +++ Bundle.java	2001/10/31 19:56:47	1.2
  @@ -14,17 +14,21 @@
    * This is the interface of the ResourceBundle, for used for i18n support.
    *
    * @author <a href="mailto:neeme@apache.org">Neeme Praks</a>
  - * @version CVS $Revision: 1.1 $ $Date: 2001/10/30 21:38:56 $ $Author: neeme $
  + * @version CVS $Revision: 1.2 $ $Date: 2001/10/31 19:56:47 $ $Author: neeme $
    */
   public interface Bundle {
   
       /**
        * Initalize the bundle
        *
  -     * @param fileName          name of the XML source file
  -     * @param cacheAtStartup    cache all the keys when constructing?
  +     * @param uri               URI of the XML source
        */
  -    public void init(String fileName, boolean cacheAtStartup) throws Exception;
  +    public void init(String uri) throws Exception;
  +
  +    /**
  +     * Load all the keys when initializing?
  +     */
  +    public void setLoadOnInit(boolean loadOnInit);
   
       /**
        * Get the bundle info.
  
  
  
  1.2       +10 -3     jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/BundleSelector.java
  
  Index: BundleSelector.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/BundleSelector.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BundleSelector.java	2001/10/30 21:38:56	1.1
  +++ BundleSelector.java	2001/10/31 19:56:47	1.2
  @@ -30,7 +30,7 @@
    *
    * @author <a href="mailto:neeme@one.lv">Neeme Praks</a>
    * @author <a href="mailto:mengelhart@earthtrip.com">Mike Engelhart</a>
  - * @version $Id: BundleSelector.java,v 1.1 2001/10/30 21:38:56 neeme Exp $
  + * @version $Id: BundleSelector.java,v 1.2 2001/10/31 19:56:47 neeme Exp $
    */
   
   public class BundleSelector
  @@ -41,7 +41,7 @@
       /**
       * The role implemented by an <code>BundleSelector</code>.
       */
  -    String ROLE = "org.apache.avalon.excalibur.i18n.BundleSelector";
  +    public static String ROLE = "org.apache.avalon.excalibur.i18n.BundleSelector";
   
       /** Component Manager */
       protected ComponentManager manager = null;
  @@ -83,6 +83,13 @@
           Configuration[] loaderConfs = configuration.getChild("loaders").getChildren("loader");
           for (int i = 0; i < loaderConfs.length; i++) {
               BundleLoader loader = (BundleLoader) getInstance(loaderConfs[i].getAttribute("class"));
  +            if (loader instanceof Loggable) ((Loggable)loader).setLogger(logger);
  +            try {
  +                if (loader instanceof Composable) ((Composable)loader).compose(this.manager);
  +            }
  +            catch (ComponentException e) {
  +                throw new ConfigurationException("unable to compose loader", e);
  +            }
               loader.configure(loaderConfs[i]);
               loader.setBundleSelector(this);
               this.loaders.put(loaderConfs[i].getAttribute("type-name"), loader);
  @@ -156,9 +163,9 @@
                       BundleInfo parentBundleInfo = bundleInfo.getParent();
                       while (bundle == null && parentBundleInfo != null) {
                           if (logger.isDebugEnabled()) logger.debug("synchronized: still not found, trying parent: " + parentBundleInfo);
  -                        parentBundleInfo = bundleInfo.getParent();
                           bundle = loadBundle(parentBundleInfo);
                           updateCache(parentBundleInfo, bundle);
  +                        parentBundleInfo = parentBundleInfo.getParent();
                       }
                       updateCache(bundleInfo, bundle);
                   }
  
  
  
  1.2       +4 -3      jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/DefaultBundleLoader.java
  
  Index: DefaultBundleLoader.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/DefaultBundleLoader.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultBundleLoader.java	2001/10/30 21:38:56	1.1
  +++ DefaultBundleLoader.java	2001/10/31 19:56:47	1.2
  @@ -21,7 +21,7 @@
    * Used to map locale information to URI space, to find the relevant bundle.
    *
    * @author <a href="mailto:neeme@apache.org">Neeme Praks</a>
  - * @version CVS $Revision: 1.1 $ $Date: 2001/10/30 21:38:56 $ $Author: neeme $
  + * @version CVS $Revision: 1.2 $ $Date: 2001/10/31 19:56:47 $ $Author: neeme $
    */
   
   public class DefaultBundleLoader implements BundleLoader, Loggable, Composable {
  @@ -74,7 +74,7 @@
       /**
        * Set the bundle selector.
        *
  -     * @param logger the selector
  +     * @param selector the selector
        */
       public void setBundleSelector(BundleSelector selector) {
           this.selector = selector;
  @@ -190,7 +190,8 @@
               bundle.setBundleInfo(bundleInfo);
               bundle.setParent(parentBundle);
               if (bundle instanceof Composable) ((Composable)bundle).compose(this.manager);
  -            bundle.init(uri, cacheAllValues());
  +            bundle.setLoadOnInit(cacheAllValues());
  +            bundle.init(uri);
               bundle.setLastModified(System.currentTimeMillis());
           }
           catch (Exception e) {
  
  
  
  1.3       +1 -3      jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/DefaultMapper.java
  
  Index: DefaultMapper.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/DefaultMapper.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultMapper.java	2001/10/30 21:38:56	1.2
  +++ DefaultMapper.java	2001/10/31 19:56:47	1.3
  @@ -14,7 +14,7 @@
    * file ending with en_US.
    *
    * @author <a href="mailto:neeme@apache.org">Neeme Praks</a>
  - * @version CVS $Revision: 1.2 $ $Date: 2001/10/30 21:38:56 $ $Author: neeme $
  + * @version CVS $Revision: 1.3 $ $Date: 2001/10/31 19:56:47 $ $Author: neeme $
    */
   
   public class DefaultMapper implements BundleInfoMapper {
  @@ -47,8 +47,6 @@
                   sb.append(loc.getVariant());
               }
           }
  -        sb.append(".xml");
  -
           String result = sb.toString();
           return result;
       }
  
  
  
  1.3       +2 -2      jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/DirectoryMapper.java
  
  Index: DirectoryMapper.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/DirectoryMapper.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DirectoryMapper.java	2001/10/30 21:38:56	1.2
  +++ DirectoryMapper.java	2001/10/31 19:56:47	1.3
  @@ -14,7 +14,7 @@
    * file ending with en_US.
    *
    * @author <a href="mailto:neeme@apache.org">Neeme Praks</a>
  - * @version CVS $Revision: 1.2 $ $Date: 2001/10/30 21:38:56 $ $Author: neeme $
  + * @version CVS $Revision: 1.3 $ $Date: 2001/10/31 19:56:47 $ $Author: neeme $
    */
   
   public class DirectoryMapper implements BundleInfoMapper {
  @@ -37,7 +37,7 @@
               if (country.length() > 0) sb.append("/").append(country);
               if (variant.length() > 0) sb.append("/").append(variant);
           }
  -        sb.append("/").append(name).append(".xml");
  +        sb.append("/").append(name);
   
           String result = sb.toString();
           return result;
  
  
  
  1.2       +84 -40    jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/XmlBundle.java
  
  Index: XmlBundle.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/XmlBundle.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XmlBundle.java	2001/10/30 21:38:56	1.1
  +++ XmlBundle.java	2001/10/31 19:56:47	1.2
  @@ -22,7 +22,9 @@
   import javax.xml.parsers.DocumentBuilder;
   import javax.xml.parsers.DocumentBuilderFactory;
   import javax.xml.parsers.ParserConfigurationException;
  +import java.io.File;
   import java.io.IOException;
  +import java.io.InputStream;
   import java.util.HashMap;
   import java.util.Locale;
   import java.util.Map;
  @@ -32,15 +34,10 @@
    * @author <a href="mailto:mengelhart@earthtrip.com">Mike Engelhart</a>
    * @author <a href="mailto:neeme@apache.org">Neeme Praks</a>
    * @author <a href="mailto:oleg@one.lv">Oleg Podolsky</a>
  - * @version $Id: XmlBundle.java,v 1.1 2001/10/30 21:38:56 neeme Exp $
  + * @version $Id: XmlBundle.java,v 1.2 2001/10/31 19:56:47 neeme Exp $
    */
  -public class XmlBundle extends AbstractBundle
  -implements Disposable, Composable {
  +public class XmlBundle extends AbstractBundle implements Disposable, Composable {
   
  -    /** DOM factory */
  -    private static DocumentBuilderFactory docfactory =
  -    	DocumentBuilderFactory.newInstance();
  -
       /** Cache for storing string values for existing XPaths */
       private Map cache = new HashMap();
   
  @@ -56,59 +53,104 @@
       /** XPath Processor */
       private XPathProcessor processor = null;
   
  +    private boolean loadOnInit = true;
  +    private boolean useRootElement = false;
  +
       public void compose(ComponentManager manager) {
           this.manager = manager;
           try {
               this.processor = (XPathProcessor)this.manager.lookup(XPathProcessor.ROLE);
           } catch (Exception e) {
  -            logger.error("cannot obtain XPathProcessor", e);
  +            getLogger().error("cannot obtain XPathProcessor", e);
           }
       }
   
       /**
  +     * Load all the keys when initializing?
  +     */
  +    public void setLoadOnInit(boolean loadOnInit) {
  +        this.loadOnInit = loadOnInit;
  +    }
  +
  +    /**
  +     * Use the XML root element in key names when pre-loading?
  +     */
  +    public void setUseRootElement(boolean useRootElement) {
  +        this.useRootElement = useRootElement;
  +    }
  +
  +    /**
        * Initalize the bundle
        *
  -     * @param fileName          name of the XML source file
  -     * @param cacheAtStartup    cache all the keys when constructing?
  +     * @param uri               URI of the XML source
        * @exception IOException   if an IO error occurs while reading the file
        * @exception ParserConfigurationException if no parser is configured
        * @exception SAXException  if an error occurs while parsing the file
        */
  -    public void init(String fileName, boolean cacheAtStartup)
  -    throws Exception {
  -        if (logger.isInfoEnabled()) logger.info("Constructing XMLResourceBundle: " + getBundleInfo());
  -        this.doc = loadResourceBundle(fileName);
  -        if (cacheAtStartup) cacheAll(doc.getDocumentElement(), "");
  +    public void init(String uri) throws Exception {
  +        this.init(getDocumentBuilder().parse(uri));
       }
   
       /**
  -     * Convert the &quot;user view&quot; of the lookup key to the
  -     * &quot;system view&quot;.
  -     * Current implementation coverts dots into slashes, so common Java property
  -     * names become XPath paths.
  -     * E.g: this.is.java.property.key --> /this/is/java/property/key
  +     * Initalize the bundle
        *
  -     * @param key           user key
  -     * @return              system key
  +     * @param file              XML source file
  +     * @exception IOException   if an IO error occurs while reading the file
  +     * @exception ParserConfigurationException if no parser is configured
  +     * @exception SAXException  if an error occurs while parsing the file
        */
  -    public String convertKey(String userKey) {
  -        return '/' + userKey.replace('.', '/');
  +    public void init(File file) throws Exception {
  +        this.init(getDocumentBuilder().parse(file));
       }
   
       /**
  -     * Load the DOM tree, based on the file name.
  +     * Initalize the bundle
        *
  -     * @param fileName          name of the XML source file
  -     * @return the DOM tree
  +     * @param inStream          XML source stream
        * @exception IOException   if an IO error occurs while reading the file
        * @exception ParserConfigurationException if no parser is configured
        * @exception SAXException  if an error occurs while parsing the file
  +     */
  +    public void init(InputStream inStream) throws Exception {
  +        this.init(getDocumentBuilder().parse(inStream));
  +    }
  +
  +    /**
  +     * Initalize the bundle
  +     *
  +     * @param document          XML source document (DOM)
        */
  -    protected static Document loadResourceBundle(String fileName)
  -    throws IOException, ParserConfigurationException, SAXException {
  +    public void init(Document document) {
  +        if (getLogger().isInfoEnabled()) getLogger().info("Constructing XMLResourceBundle: " + getBundleInfo());
  +        this.doc = document;
  +        if (this.loadOnInit) {
  +            cacheAll(doc.getDocumentElement(), useRootElement ? '/' + doc.getDocumentElement().getTagName() : "");
  +        }
  +    }
  +
  +    /**
  +     * Return document builder used to parse the XML document.
  +     *
  +     * @return the document builder
  +     * @exception ParserConfigurationException if no parser is configured
  +     */
  +    protected DocumentBuilder getDocumentBuilder() throws ParserConfigurationException {
           DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  -        DocumentBuilder builder = factory.newDocumentBuilder();
  -        return builder.parse(fileName);
  +        return factory.newDocumentBuilder();
  +    }
  +
  +    /**
  +     * Convert the &quot;user view&quot; of the lookup key to the
  +     * &quot;system view&quot;.
  +     * Current implementation coverts dots into slashes, so common Java property
  +     * names become XPath paths.
  +     * E.g: this.is.java.property.key --> /this/is/java/property/key
  +     *
  +     * @param key           user key
  +     * @return              system key
  +     */
  +    public String convertKey(String userKey) {
  +        return '/' + userKey.replace('.', '/');
       }
   
       /**
  @@ -127,8 +169,9 @@
        * @return  true if contains, false otherwise
        */
       protected boolean cacheContains(String key) {
  -        if (logger.isDebugEnabled()) logger.debug(getBundleInfo() + ": cache contains: " + key);
  -        return cache.containsKey(key);
  +        boolean result = cache.containsKey(key);
  +        if (getLogger().isDebugEnabled()) getLogger().debug(getBundleInfo() + ": cache contains key '" + key + "': " + result);
  +        return result;
       }
   
       /**
  @@ -138,8 +181,9 @@
        * @return  true if contains, false otherwise
        */
       protected boolean cacheNotFoundContains(String key) {
  -        if (logger.isDebugEnabled()) logger.debug(getBundleInfo() + ": cache_not_found contains: " + key);
  -        return cacheNotFound.containsKey(key);
  +        boolean result = cacheNotFound.containsKey(key);
  +        if (getLogger().isDebugEnabled()) getLogger().debug(getBundleInfo() + ": cache_not_found contains key '" + key + "': " + result);
  +        return result;
       }
   
       /**
  @@ -149,7 +193,7 @@
        * @param   value   the value
        */
       protected void cacheKey(String key, String value) {
  -        if (logger.isDebugEnabled()) logger.debug(getBundleInfo() + ": caching: " + key + " = " + value);
  +        if (getLogger().isDebugEnabled()) getLogger().debug(getBundleInfo() + ": caching: " + key + " = " + value);
           cache.put(key, value);
       }
   
  @@ -159,7 +203,7 @@
        * @param   key     the key
        */
       protected void cacheNotFoundKey(String key) {
  -        if (logger.isDebugEnabled()) logger.debug(getBundleInfo() + ": caching not_found: " + key);
  +        if (getLogger().isDebugEnabled()) getLogger().debug(getBundleInfo() + ": caching not_found: " + key);
           cacheNotFound.put(key, "");
       }
   
  @@ -170,7 +214,7 @@
        * @return          the value
        */
       protected String getFromCache(String key) {
  -        if (logger.isDebugEnabled()) logger.debug(getBundleInfo() + ": returning from cache: " + key);
  +        if (getLogger().isDebugEnabled()) getLogger().debug(getBundleInfo() + ": returning from cache: " + key);
           return (String) cache.get(key);
       }
   
  @@ -274,7 +318,7 @@
               value = getTextValue(_getNode(node, key));
           }
           catch (Exception e) {
  -            logger.error(getBundleInfo() + ": error while locating resource: " + key, e);
  +            getLogger().error(getBundleInfo() + ": error while locating resource: " + key, e);
           }
           return value;
       }
  @@ -335,7 +379,7 @@
               node = this.processor.selectSingleNode(rootNode, key);
           }
           catch (Exception e) {
  -            logger.error("Error while locating resource with key: " + key, e);
  +            getLogger().error("Error while locating resource with key: " + key, e);
           }
           return node;
       }
  
  
  
  1.5       +15 -11    jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/test/AbstractBundleTestCase.java
  
  Index: AbstractBundleTestCase.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/test/AbstractBundleTestCase.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AbstractBundleTestCase.java	2001/10/31 19:43:52	1.4
  +++ AbstractBundleTestCase.java	2001/10/31 19:56:47	1.5
  @@ -10,20 +10,17 @@
   import java.util.Map;
   import java.util.HashMap;
   
  -import junit.framework.TestCase;
  -import org.apache.log.Hierarchy;
  -import org.apache.avalon.excalibur.i18n.Bundle;
  +import org.apache.avalon.excalibur.testcase.ExcaliburTestCase;
   import org.apache.avalon.excalibur.i18n.AbstractBundle;
  -import java.io.FileWriter;
   
   /**
    * @author <a href="mailto:neeme@one.lv">Neeme Praks</a>
  - * @version $Id: AbstractBundleTestCase.java,v 1.4 2001/10/31 19:43:52 bloritsch Exp $
  + * @version $Id: AbstractBundleTestCase.java,v 1.5 2001/10/31 19:56:47 neeme Exp $
    */
  -public class AbstractBundleTestCase extends TestCase {
  +public class AbstractBundleTestCase extends ExcaliburTestCase {
   
       private TestBundle bundle = new TestBundle();
  -    private HashMap variables = new HashMap(5);
  +    private Map variables = new HashMap(5);
   
       public AbstractBundleTestCase( String name ) {
           super(name);
  @@ -32,8 +29,10 @@
       public void setUp() throws Exception {
           this.variables.put("nice", "not so nice");
           this.variables.put("bad", "too bad");
  +        this.variables.put("value", "a cat");
   
  -        this.bundle.setLogger(Hierarchy.getDefaultHierarchy().getLoggerFor("Bundle"));
  +        this.bundle.setLogger(getLogger());
  +        this.bundle.put("cat", "Here is an example of {value}.");
           this.bundle.put("nice", "This is a {nice} test!");
           this.bundle.put("nice.nice", "This is a {nice}, {nice} test!");
           this.bundle.put("nice.bad", "This is a {nice} but not {bad} test!");
  @@ -47,17 +46,22 @@
       }
   
       public void testSubstitute() {
  -        assertEquals("This is a test!", this.bundle.getString("test.plain", variables));
  -        assertEquals("", this.bundle.getString("test.empty", variables));
           assertEquals("This is a not so nice test!", this.bundle.getString("nice", variables));
           assertEquals("This is a not so nice, not so nice test!", this.bundle.getString("nice.nice", variables));
           assertEquals("This is a not so nice but not too bad test!", this.bundle.getString("nice.bad", variables));
  +        assertEquals("This is a test!", this.bundle.getString("test.plain", variables));
  +        assertEquals("", this.bundle.getString("test.empty", variables));
  +        assertEquals("Here is an example of a cat.", this.bundle.getString("cat", this.variables));
       }
   
       private static class TestBundle extends AbstractBundle {
           private Map store = new HashMap();
  +
  +        public void setLoadOnInit(boolean set) {
  +        }
   
  -        public void init(String fileName, boolean cacheAtStartup) throws Exception {
  +        public void init(String fileName) throws Exception {
  +            // do nothing
           }
   
           void put(String key, String value) {
  
  
  
  1.1                  jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/test/DefaultBundleLoaderTestCase.java
  
  Index: DefaultBundleLoaderTestCase.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE file.
   */
  package org.apache.avalon.excalibur.i18n.test;
  
  import java.util.Map;
  import java.util.HashMap;
  
  import org.apache.avalon.framework.configuration.Configuration;
  
  import org.apache.avalon.excalibur.testcase.ExcaliburTestCase;
  import org.apache.avalon.excalibur.i18n.BundleInfo;
  import org.apache.avalon.excalibur.i18n.XmlBundle;
  import org.apache.avalon.excalibur.i18n.BundleSelector;
  
  /**
   * @author <a href="mailto:neeme@one.lv">Neeme Praks</a>
   * @version $Id: DefaultBundleLoaderTestCase.java,v 1.1 2001/10/31 19:56:47 neeme Exp $
   */
  public class DefaultBundleLoaderTestCase extends ExcaliburTestCase {
  
      private BundleSelector bundleSelector;
  
      public DefaultBundleLoaderTestCase( String name ) {
          super(name);
      }
  
      public void setUp() throws Exception {
          this.bundleSelector = (BundleSelector) manager.lookup(BundleSelector.ROLE);
      }
  
      public void testLoading() throws Exception {
          this.bundleSelector.select("ee", "uu");
      }
  
      public static void main(String[] args) {
          ExcaliburTestCase test = new DefaultBundleLoaderTestCase("test");
          test.run();
      }
  }
  
  
  
  1.1                  jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/test/DefaultBundleLoaderTestCase.xtest
  
  Index: DefaultBundleLoaderTestCase.xtest
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <testcase>
      <annotation><![CDATA[
           <title>DefaultBundleLoader tests</title>
           <para>
           Tests the DefaultBundleLoader implementation: loading bundles, mapping correctly, etc.
           </para>
         ]]></annotation>
      <roles>
          <role name="org.apache.avalon.excalibur.xml.xpath.XPathProcessor" shorthand="xpath-processor" default-class="org.apache.avalon.excalibur.xml.xpath.XPathProcessorImpl"/>
          <role name="org.apache.avalon.excalibur.i18n.BundleSelector" shorthand="bundle-selector" default-class="org.apache.avalon.excalibur.i18n.BundleSelector"/>
      </roles>
  	<components>
  		<bundle-selector>
  	        <loaders>
  	            <loader type-name="xml" bundle="org.apache.avalon.excalibur.i18n.XmlBundle" class="org.apache.avalon.excalibur.i18n.DefaultBundleLoader" mapper="org.apache.avalon.excalibur.i18n.DefaultMapper">
  	                <prefix>file:///root/path/to/xml/files/</prefix>
  	                <suffix>.xml</suffix>
  	                <load-on-startup>
  	                    <!-- implementation specific parameters -->
  	                    <all/>
  	                </load-on-startup>
  	            </loader>
  	        </loaders>
  	        <matchers default-type="xml">
  	            <!--matcher class="org.apache.avalon.excalibur.i18n.DefaultMatcher" type="xml"/-->
  	        </matchers>
  		</bundle-selector>
  	</components>
      <configuration>
      </configuration>
  </testcase>
  
  
  
  1.1                  jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/test/XmlBundle.xml
  
  Index: XmlBundle.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <resources>
  	<level1>
  		<level2>
  			<level3>Text on level3</level3>
  		</level2>
  	</level1>
  	<levels>
  		<level number="1">Flat level 1</level>
  		<level number="2">Flat level 2</level>
  		<level number="3">Flat level 3</level>
  	</levels>
  	<key-with-variable>Here is an example of {value}.</key-with-variable>
  </resources>
  
  
  1.1                  jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/test/XmlBundleTestCase.java
  
  Index: XmlBundleTestCase.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE file.
   */
  package org.apache.avalon.excalibur.i18n.test;
  
  import java.util.Map;
  import java.util.HashMap;
  
  import org.apache.avalon.excalibur.testcase.ExcaliburTestCase;
  import org.apache.avalon.excalibur.i18n.BundleInfo;
  import org.apache.avalon.excalibur.i18n.XmlBundle;
  
  /**
   * @author <a href="mailto:neeme@one.lv">Neeme Praks</a>
   * @version $Id: XmlBundleTestCase.java,v 1.1 2001/10/31 19:56:47 neeme Exp $
   */
  public class XmlBundleTestCase extends ExcaliburTestCase {
  
      private Map variables = new HashMap(5);
      private XmlBundle bundle = new XmlBundle();
      private XmlBundle bundleWithRoot = new XmlBundle();
  
      public XmlBundleTestCase( String name ) {
          super(name);
      }
  
      public void setUp() throws Exception {
          this.variables.put("value", "a cat");
  
          final String bundleFileName = this.getClass().getPackage().getName().replace( '.', '/' ) + "/XmlBundle.xml";
          getLogger().debug("Test-bundle file = " + bundleFileName);
  
          this.bundle.setBundleInfo(new BundleInfo("test", null));
          this.bundle.setLogger(getLogger());
          this.bundle.compose(super.manager);
          this.bundle.setLoadOnInit(true);
          this.bundleWithRoot.setUseRootElement(false);
          this.bundle.init(this.getClass().getClassLoader().getResource(bundleFileName).openStream());
  
          this.bundleWithRoot.setBundleInfo(new BundleInfo("test-with-root", null));
          this.bundleWithRoot.setLogger(getLogger());
          this.bundleWithRoot.compose(super.manager);
          this.bundleWithRoot.setLoadOnInit(true);
          this.bundleWithRoot.setUseRootElement(true);
          this.bundleWithRoot.init(this.getClass().getClassLoader().getResource(bundleFileName).openStream());
      }
  
      public void testGetString() {
          assertEquals("Text on level3", this.bundle.getString("level1.level2.level3"));
          assertEquals("Flat level 2", this.bundle.getString("levels/level[@number='2']"));
  
          assertEquals("Text on level3", this.bundleWithRoot.getString("resources.level1.level2.level3"));
          assertEquals("Flat level 2", this.bundleWithRoot.getString("resources.levels/level[@number='2']"));
      }
  
      public void testGetStringWithVariable() {
          assertEquals("Here is an example of a cat.", this.bundle.getString("key-with-variable", this.variables));
          assertEquals("Here is an example of a cat.", this.bundleWithRoot.getString("resources.key-with-variable", this.variables));
      }
  
  }
  
  
  
  1.1                  jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/i18n/test/XmlBundleTestCase.xtest
  
  Index: XmlBundleTestCase.xtest
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <testcase>
      <annotation><![CDATA[
           <title>XmlResourceBundle tests</title>
           <para>
           Tests the XmlResourceBundle implementation: loading from file, returning correct values, substituting correctly, etc.
           </para>
         ]]></annotation>
      <roles>
          <role name="org.apache.avalon.excalibur.xml.xpath.XPathProcessor" shorthand="xpath-processor" default-class="org.apache.avalon.excalibur.xml.xpath.XPathProcessorImpl"/>
      </roles>
  </testcase>
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>