sylvain 2004/02/04 07:16:01
Modified: src/java/org/apache/cocoon/i18n
XMLResourceBundleFactory.java
src/java/org/apache/cocoon/transformation
I18nTransformer.java
Log:
Cache keys for XMLResourceBundles are now absolute. Otherwise, conflicts
arise when different subsitemaps use the same catalogue names
Revision Changes Path
1.11 +30 -8
cocoon-2.1/src/java/org/apache/cocoon/i18n/XMLResourceBundleFactory.java
Index: XMLResourceBundleFactory.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/i18n/XMLResourceBundleFactory.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- XMLResourceBundleFactory.java 16 Jan 2004 15:55:38 -0000 1.10
+++ XMLResourceBundleFactory.java 4 Feb 2004 15:16:01 -0000 1.11
@@ -50,6 +50,7 @@
*/
package org.apache.cocoon.i18n;
+import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Locale;
@@ -64,10 +65,13 @@
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.logger.LogEnabled;
import org.apache.avalon.framework.logger.Logger;
+import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
import org.apache.avalon.framework.thread.ThreadSafe;
+import org.apache.excalibur.source.Source;
import org.apache.excalibur.source.SourceNotFoundException;
+import org.apache.excalibur.source.SourceResolver;
import org.apache.cocoon.ResourceNotFoundException;
import org.xml.sax.SAXParseException;
@@ -108,6 +112,11 @@
* Service Manager
*/
protected ServiceManager manager = null;
+
+ /**
+ * Source resolver
+ */
+ protected SourceResolver resolver;
/**
@@ -127,8 +136,9 @@
return this.logger;
}
- public void service(ServiceManager manager) {
+ public void service(ServiceManager manager) throws ServiceException {
this.manager = manager;
+ this.resolver =
(SourceResolver)this.manager.lookup(SourceResolver.ROLE);
}
public void dispose() {
@@ -140,6 +150,7 @@
}
i.remove();
}
+ this.manager.release(this.resolver);
this.manager = null;
}
@@ -376,14 +387,25 @@
* @return the parent locale
*/
protected String getFileName(String base, String name, Locale locale) {
- if (base == null) {
- base = "";
+ StringBuffer sb = new StringBuffer();
+ if (base == null || base.length() == 0) {
+ // FIXME (SW): can this happen?
+ } else {
+ try {
+ Source src = this.resolver.resolveURI(base);
+ String uri = src.getURI();
+ sb.append(uri);
+ if (!uri.endsWith("/")) {
+ sb.append('/');
+ }
+ this.resolver.release(src);
+ } catch(IOException ioe) {
+ throw new RuntimeException("Cannot resolve " + base, ioe);
+ }
}
+
+ sb.append(name);
- StringBuffer sb = new StringBuffer(base);
- if (!base.endsWith("/")) {
- sb.append('/').append(name);
- }
if (locale != null) {
if (!locale.getLanguage().equals("")) {
sb.append("_");
1.24 +5 -1
cocoon-2.1/src/java/org/apache/cocoon/transformation/I18nTransformer.java
Index: I18nTransformer.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/transformation/I18nTransformer.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- I18nTransformer.java 15 Jan 2004 15:24:31 -0000 1.23
+++ I18nTransformer.java 4 Feb 2004 15:16:01 -0000 1.24
@@ -975,6 +975,10 @@
public void configure(Configuration conf) throws ConfigurationException {
// read in the config options from the transformer definition
Configuration cataloguesConf = conf.getChild("catalogues", false);
+
+ if (cataloguesConf == null) {
+ throw new ConfigurationException("I18NTransformer needs a
'catalogues' configuration at " + conf.getLocation());
+ }
// new configuration style
Configuration[] catalogueConfs =
cataloguesConf.getChildren("catalogue");