Hi,

> Just send the patch to this list - can you do this by the end of this
> week as on monday the code freeze starts :)

Yes, I know, so here is the Patch for the I18nCatalogueGenerator.
I deleted the regex stuff and used the IncludeXMLConsumer instead.
Hopefully this is better ;-)

-- 
* best regards
* Jens Maukisch              
Index: 
D:/dev/eclipse/workspaces/letsrun/branch21x/src/blocks/portal/java/org/apache/cocoon/portal/tools/generation/I18nCatalogueGenerator.java
===================================================================
--- 
D:/dev/eclipse/workspaces/letsrun/branch21x/src/blocks/portal/java/org/apache/cocoon/portal/tools/generation/I18nCatalogueGenerator.java
    (revision 156978)
+++ 
D:/dev/eclipse/workspaces/letsrun/branch21x/src/blocks/portal/java/org/apache/cocoon/portal/tools/generation/I18nCatalogueGenerator.java
    (working copy)
@@ -15,10 +15,7 @@
  */
 package org.apache.cocoon.portal.tools.generation;
 
-import java.io.BufferedReader;
 import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.StringReader;
 import java.net.MalformedURLException;
 import java.util.Iterator;
 import java.util.List;
@@ -26,15 +23,18 @@
 
 import org.apache.avalon.framework.parameters.Parameters;
 import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.cocoon.ProcessingException;
 import org.apache.cocoon.environment.SourceResolver;
 import org.apache.cocoon.generation.ServiceableGenerator;
 import org.apache.cocoon.portal.tools.PortalToolCatalogue;
 import org.apache.cocoon.portal.tools.PortalToolManager;
+import org.apache.cocoon.xml.IncludeXMLConsumer;
 import org.apache.excalibur.source.Source;
 import org.apache.excalibur.xml.sax.SAXParser;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
+import org.xml.sax.helpers.AttributesImpl;
 
 /**
  * 
@@ -43,9 +43,8 @@
 public class I18nCatalogueGenerator extends ServiceableGenerator {
     
     private SAXParser parser;
-
-    private String catalogueStartTag = "<?xml version=\"1.0\"?><catalogue>";
-    private String catalogueEndTag = "</catalogue>";
+    private PortalToolManager ptm;
+    private final String CATALOGUE_TAG = "catalogue";
     private String lang = ".xml";
     private StringBuffer i18n = new StringBuffer();
     
@@ -54,59 +53,55 @@
      */
     public void generate() throws IOException, SAXException,
             ProcessingException {
-        StringBuffer catalogue = new StringBuffer();
-        
catalogue.append(catalogueStartTag).append(i18n.toString()).append(catalogueEndTag);
 //add pi and catalogue tags
-        final InputSource inputSource = new InputSource(new 
StringReader(catalogue.toString()));
-        try {
-            parser = (SAXParser)this.manager.lookup(SAXParser.ROLE);
-        } catch (ServiceException e) {
-            e.printStackTrace();
-        }
-        parser.parse(inputSource, super.xmlConsumer);
-    }
-    
-    /* (non-Javadoc)
-     * @see 
org.apache.cocoon.sitemap.SitemapModelComponent#setup(org.apache.cocoon.environment.SourceResolver,
 java.util.Map, java.lang.String, 
org.apache.avalon.framework.parameters.Parameters)
-     */
-    public void setup(SourceResolver resolver, Map objectModel, String src, 
Parameters par) 
-                                       throws ProcessingException, 
SAXException, IOException {
-        super.setup(resolver, objectModel, src, par);
-        if(src.indexOf("_") != -1) {
-            lang = src.substring(src.indexOf("_"), src.length());
-            lang = lang.toLowerCase();
-        }
-        PortalToolManager ptm = null;
-        try {
-            ptm = (PortalToolManager) 
this.manager.lookup(PortalToolManager.ROLE);
+       this.xmlConsumer.startDocument();
+       this.xmlConsumer.startElement("", CATALOGUE_TAG, CATALOGUE_TAG, new 
AttributesImpl());
             List cats = ptm.getI18n();
             for(Iterator it = cats.iterator(); it.hasNext();) {
                 PortalToolCatalogue ptc = (PortalToolCatalogue) it.next();
                 try {
                     Source cat;
                        cat = resolver.resolveURI(ptc.getLocation() + 
ptc.getName() + lang);
-                       // if(!cat.exists()) {
-                       //    cat = resolver.resolveURI(ptc.getLocation() + 
ptc.getName() + ".xml"); // default file
-                       // }
-                       BufferedReader br = new BufferedReader(new 
InputStreamReader(cat.getInputStream()));
-                       String tmp = new String();
-                       while(br.ready()) {
-                           tmp = tmp + br.readLine();
-                       }
-                    tmp = tmp.replaceAll("<\\?(.+)\\?>",""); // remove 
processing instr.
-                    tmp = tmp.replaceAll("<catalogue([^>]+)?>{1}" ,""); // 
remove catalogue tags
-                    tmp = tmp.replaceAll("</catalogue>", "");
-                    tmp = tmp.replaceAll("<!--(.+)-->", "");
-                    i18n.append(tmp);
+                       IncludeXMLConsumer ixc = new 
IncludeXMLConsumer(this.xmlConsumer);
+                       ixc.setIgnoreRootElement(true);
+                       this.parser.parse(new 
InputSource(cat.getInputStream()),  ixc);
                 } catch (MalformedURLException e) {
+                       // ignore
                 } catch (IOException e) {
+                       // ignore
                 }
             }
-        } catch (ServiceException e) {
-            e.printStackTrace();
-        } finally {
-            this.manager.release(ptm);
+        this.xmlConsumer.endElement("", CATALOGUE_TAG, CATALOGUE_TAG);
+        this.xmlConsumer.endDocument();
+    }
+    
+    /* (non-Javadoc)
+     * @see 
org.apache.cocoon.sitemap.SitemapModelComponent#setup(org.apache.cocoon.environment.SourceResolver,
 java.util.Map, java.lang.String, 
org.apache.avalon.framework.parameters.Parameters)
+     */
+    public void setup(SourceResolver resolver, Map objectModel, String src, 
Parameters par) 
+                                       throws ProcessingException, 
SAXException, IOException {
+        super.setup(resolver, objectModel, src, par);
+        if(src.indexOf("_") != -1) {
+            this.lang = src.substring(src.indexOf("_"), src.length());
+            this.lang = this.lang.toLowerCase();
         }
-        
+
     }
+    
+    /* (non-Javadoc)
+        * @see 
org.apache.cocoon.generation.ServiceableGenerator#service(org.apache.avalon.framework.service.ServiceManager)
+        */
+       public void service(ServiceManager manager) throws ServiceException {
+               super.service(manager);
+               this.parser = (SAXParser)this.manager.lookup(SAXParser.ROLE);
+               ptm = (PortalToolManager) 
this.manager.lookup(PortalToolManager.ROLE);
+       }
 
+       /* (non-Javadoc)
+        * @see org.apache.cocoon.generation.ServiceableGenerator#dispose()
+        */
+       public void dispose() {
+               super.dispose();
+               this.manager.release(this.parser);
+               this.manager.release(this.ptm);
+       }
 }

Reply via email to