kpiroumian 2002/12/17 04:03:07 Modified: . changes.xml src/java/org/apache/cocoon/i18n XMLResourceBundle.java Log: <action dev="KP" type="fix" fixes-bug="15431" due-to="Michael Gerzabek" due-to-email="[EMAIL PROTECTED]"> Perform correct source resolution in XMLResourceBundle. Now i18n transformer can obtain dictionaries using any supported source (e.g. 'cocoon:/'). </action> Revision Changes Path 1.309 +5 -1 xml-cocoon2/changes.xml Index: changes.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/changes.xml,v retrieving revision 1.308 retrieving revision 1.309 diff -u -r1.308 -r1.309 --- changes.xml 17 Dec 2002 11:13:21 -0000 1.308 +++ changes.xml 17 Dec 2002 12:03:06 -0000 1.309 @@ -40,6 +40,10 @@ </devs> <release version="@version@" date="@date@"> + <action dev="KP" type="fix" fixes-bug="15431" due-to="Michael Gerzabek" due-to-email="[EMAIL PROTECTED]"> + Perform correct source resolution in XMLResourceBundle. + Now i18n transformer can obtain dictionaries using any supported source (e.g. 'cocoon:/'). + </action> <action dev="KP" type="update"> Added Greek translation, thanks to Stavros Kounis ([EMAIL PROTECTED]). Corrected Armenian translation to be real Unicode and be 1.12 +34 -16 xml-cocoon2/src/java/org/apache/cocoon/i18n/XMLResourceBundle.java Index: XMLResourceBundle.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/i18n/XMLResourceBundle.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- XMLResourceBundle.java 13 Nov 2002 22:09:35 -0000 1.11 +++ XMLResourceBundle.java 17 Dec 2002 12:03:07 -0000 1.12 @@ -68,12 +68,16 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; +import org.xml.sax.InputSource; import org.apache.avalon.excalibur.xml.xpath.XPathProcessor; import org.apache.avalon.framework.component.ComponentException; import org.apache.avalon.framework.component.ComponentManager; import org.apache.avalon.framework.logger.Logger; +import org.apache.excalibur.source.Source; +import org.apache.excalibur.source.SourceResolver; + /** * Implementation of <code>Bundle</code> interface for XML resources. * Represents a single XML message bundle. @@ -182,14 +186,28 @@ * @exception ParserConfigurationException if no parser is configured * @exception SAXException if an error occurs while parsing the file */ - protected static Document loadResourceBundle(String fileName) + protected synchronized Document loadResourceBundle(String fileName) throws IOException, ParserConfigurationException, SAXException { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); + Source source = null; + SourceResolver resolver = null; + try { + resolver = (SourceResolver)manager.lookup(SourceResolver.ROLE); + source = resolver.resolveURI(fileName); + return builder.parse(new InputSource(source.getInputStream())); + } + catch (Exception e) { + logger.warn("XMLResourceBundle: Non excalibur-source " + fileName, e); + } + finally { + resolver.release(source); + manager.release(resolver); + } + // Fallback try return builder.parse(fileName); } - /** * Gets the name of the bundle. * @@ -273,15 +291,15 @@ * @return the value */ private Node getFromCache(String key) { - Object value; - if (logger.isDebugEnabled()) + Object value; + if (logger.isDebugEnabled()) logger.debug(name + ": returning from cache: " + key); - value = cache.get(key); - if(value == null) - logger.debug("Could not find!"); + value = cache.get(key); + if(value == null) + logger.debug("Could not find!"); - return (Node) value; + return (Node) value; } /** @@ -292,7 +310,7 @@ * @param pathToParent XPath to the parent node */ private void cacheAll(Node parent, String pathToParent) { - if (logger.isDebugEnabled()) + if (logger.isDebugEnabled()) logger.debug("Caching all messages"); NodeList children = parent.getChildNodes(); @@ -302,7 +320,7 @@ Node child = children.item(i); if(child.getNodeType() == Node.ELEMENT_NODE) { - StringBuffer pathToChild = new StringBuffer(pathToParent) + StringBuffer pathToChild = new StringBuffer(pathToParent) .append('/').append(child.getNodeName()); NamedNodeMap attrs = child.getAttributes(); @@ -315,15 +333,15 @@ temp = attrs.item(j); if (!temp.getNodeName().equalsIgnoreCase("xml:lang")) pathToChild.append("[@").append(temp.getNodeName()) - .append("='").append(temp.getNodeValue()) + .append("='").append(temp.getNodeValue()) .append("']"); } } - cacheKey(pathToChild.toString(), child); + cacheKey(pathToChild.toString(), child); } - if (logger.isDebugEnabled()) + if (logger.isDebugEnabled()) logger.debug("What we've cached: " + child.toString()); } } @@ -337,9 +355,9 @@ private Object _getObject(String key) { if (key == null) return null; - Node value = getFromCache(key); + Node value = getFromCache(key); if (value == null && !cacheNotFoundContains(key)) { - if (doc != null) + if (doc != null) value = (Node)_getObject(this.doc.getDocumentElement(), key); if (value == null) {
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]