[Yanel-commits] rev 23507 - in public/yanel/trunk/src/contributions/resources: contact-form/src/java/org/wyona/yanel/impl/resources nutch/src/java/org/wyona/yanel/impl/resources wiki/src/java/org/wyona/yanel/impl/resources

michi at wyona.com michi at wyona.com
Fri Mar 30 09:57:59 CEST 2007


Author: michi
Date: 2007-03-30 09:57:57 +0200 (Fri, 30 Mar 2007)
New Revision: 23507

Modified:
   public/yanel/trunk/src/contributions/resources/contact-form/src/java/org/wyona/yanel/impl/resources/ContactResource.java
   public/yanel/trunk/src/contributions/resources/nutch/src/java/org/wyona/yanel/impl/resources/NutchResource.java
   public/yanel/trunk/src/contributions/resources/wiki/src/java/org/wyona/yanel/impl/resources/WikiResource.java
Log:
xinclude transformer added

Modified: public/yanel/trunk/src/contributions/resources/contact-form/src/java/org/wyona/yanel/impl/resources/ContactResource.java
===================================================================
--- public/yanel/trunk/src/contributions/resources/contact-form/src/java/org/wyona/yanel/impl/resources/ContactResource.java	2007-03-30 07:38:58 UTC (rev 23506)
+++ public/yanel/trunk/src/contributions/resources/contact-form/src/java/org/wyona/yanel/impl/resources/ContactResource.java	2007-03-30 07:57:57 UTC (rev 23507)
@@ -18,6 +18,7 @@
 
 import java.io.BufferedReader;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.StringReader;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -38,10 +39,15 @@
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.TransformerFactoryConfigurationError;
+import javax.xml.transform.sax.SAXResult;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TransformerHandler;
 import javax.xml.transform.stream.StreamResult;
 import javax.xml.transform.stream.StreamSource;
 
 import org.apache.log4j.Category;
+import org.apache.xml.resolver.tools.CatalogResolver;
+import org.apache.xml.serializer.Serializer;
 import org.wyona.yanel.core.Path;
 import org.wyona.yanel.core.Resource;
 import org.wyona.yanel.core.api.attributes.ViewableV1;
@@ -52,10 +58,17 @@
 import org.wyona.yarep.core.Repository;
 import org.wyona.yarep.core.RepositoryException;
 import org.wyona.yarep.core.RepositoryFactory;
+import org.wyona.yanel.core.serialization.SerializerFactory;
+import org.wyona.yanel.core.source.ResourceResolver;
 import org.wyona.yanel.core.transformation.I18nTransformer;
+import org.wyona.yanel.core.transformation.I18nTransformer2;
+import org.wyona.yanel.core.transformation.XIncludeTransformer;
 import org.wyona.yarep.util.RepoPath;
 import org.wyona.yarep.util.YarepUtil;
 import org.wyona.yanel.core.util.HttpServletRequestHelper;import org.wyona.yanel.core.util.PathUtil;
+import org.xml.sax.InputSource;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
 ;
 
 /**
@@ -127,12 +140,22 @@
             log.debug("language param is empty or null : " + language);
             language = defaultLanguage;
         }
-        Transformer transformer = null;
-        I18nTransformer i18nTransformer = null;
         File xslFile = org.wyona.commons.io.FileUtil.file(rtd.getConfigFile().getParentFile().getAbsolutePath(), "xslt" + File.separator + "contact-form.xsl");
         File xmlFile = org.wyona.commons.io.FileUtil.file(rtd.getConfigFile().getParentFile().getAbsolutePath(), "xml" + File.separator + "contact-form.xml");        
         try {
-            transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(xslFile));
+            
+            // create reader:
+            XMLReader xmlReader = XMLReaderFactory.createXMLReader();
+            CatalogResolver catalogResolver = new CatalogResolver();
+            xmlReader.setEntityResolver(catalogResolver);
+            
+            // create first xslt transformer:
+            SAXTransformerFactory tf = (SAXTransformerFactory)TransformerFactory.newInstance();
+
+            //transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(xslFile));
+            TransformerHandler xsltHandler1 = tf.newTransformerHandler(new StreamSource(xslFile));
+            Transformer transformer = xsltHandler1.getTransformer();
+            
             boolean submit = false;
             Enumeration enumeration = request.getParameterNames();
             while(enumeration.hasMoreElements()){
@@ -149,34 +172,54 @@
                 transformer.setParameter("zipCity", HttpServletRequestHelper.getParameter(request, "zipCity"));
                 transformer.setParameter("message", HttpServletRequestHelper.getParameter(request, "message"));
             }
-            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-            transformer.transform(new javax.xml.transform.stream.StreamSource(xmlFile), new StreamResult(byteArrayOutputStream));
-            //translate the form
-            i18nTransformer = new I18nTransformer(messageBundle, language, getRealm().getDefaultLanguage());
-            SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
-            saxParser = SAXParserFactory.newInstance().newSAXParser();
-            saxParser.parse(new ByteArrayInputStream(byteArrayOutputStream.toByteArray()), i18nTransformer);
             
-            transformer = TransformerFactory.newInstance().newTransformer(getXSLTStreamSource(path, repository));
+            // create first i18n transformer:
+            I18nTransformer2 i18nTransformer1 = new I18nTransformer2(messageBundle, language, getRealm().getDefaultLanguage());
+            i18nTransformer1.setEntityResolver(catalogResolver);
+            
+            // create second xslt transformer:
+            TransformerHandler xsltHandler2 = tf.newTransformerHandler(getXSLTStreamSource(path, repository));
+            transformer = xsltHandler2.getTransformer();
             transformer.setParameter("yanel.path.name", path.getName());
             transformer.setParameter("yanel.path", path.toString());
             transformer.setParameter("yanel.back2context", PathUtil.backToContext(realm, getPath()));
             transformer.setParameter("yarep.back2realm", PathUtil.backToRealm(getPath()));
- 
-            byteArrayOutputStream = new ByteArrayOutputStream();
-            transformer.transform(new StreamSource(i18nTransformer.getInputStream()), new StreamResult(byteArrayOutputStream));
-            //translate the page
-            i18nTransformer = new I18nTransformer("global", language, getRealm().getDefaultLanguage());
-            saxParser = SAXParserFactory.newInstance().newSAXParser();
-            saxParser.parse(new ByteArrayInputStream(byteArrayOutputStream.toByteArray()), i18nTransformer);
+
+            // create xinclude transformer:
+            XIncludeTransformer xIncludeTransformer = new XIncludeTransformer();
+            ResourceResolver resolver = new ResourceResolver(this);
+            xIncludeTransformer.setResolver(resolver);
             
+            // create second i18n transformer:
+            I18nTransformer2 i18nTransformer2 = new I18nTransformer2("global", language, getRealm().getDefaultLanguage());
+            i18nTransformer2.setEntityResolver(catalogResolver);
+            
+            // create serializer:
+            Serializer serializer = SerializerFactory.getSerializer(SerializerFactory.XHTML_STRICT);
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+            // chain everything together (create a pipeline):
+            xmlReader.setContentHandler(xsltHandler1);
+            xsltHandler1.setResult(new SAXResult(i18nTransformer1));
+            i18nTransformer1.setResult(new SAXResult(xsltHandler2));
+            xsltHandler2.setResult(new SAXResult(xIncludeTransformer));
+            xIncludeTransformer.setResult(new SAXResult(i18nTransformer2));
+            i18nTransformer2.setResult(new SAXResult(serializer.asContentHandler()));
+            serializer.setOutputStream(baos);
+            
+            // execute pipeline:
+            xmlReader.parse(new InputSource(new FileInputStream(xmlFile)));
+
+            // create view:
+            View defaultView = new View();
+            defaultView.setMimeType(getMimeType());
+            defaultView.setInputStream(new ByteArrayInputStream(baos.toByteArray()));
+            return defaultView;
+            
         } catch (Exception e) {
             log.error(e.getMessage(), e);
+            throw e;
         }
-        View defaultView = new View();
-        defaultView.setMimeType(getMimeType());
-        defaultView.setInputStream(i18nTransformer.getInputStream());
-        return defaultView;
     }
 
     /**

Modified: public/yanel/trunk/src/contributions/resources/nutch/src/java/org/wyona/yanel/impl/resources/NutchResource.java
===================================================================
--- public/yanel/trunk/src/contributions/resources/nutch/src/java/org/wyona/yanel/impl/resources/NutchResource.java	2007-03-30 07:38:58 UTC (rev 23506)
+++ public/yanel/trunk/src/contributions/resources/nutch/src/java/org/wyona/yanel/impl/resources/NutchResource.java	2007-03-30 07:57:57 UTC (rev 23507)
@@ -37,6 +37,9 @@
 import javax.xml.parsers.SAXParserFactory;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.sax.SAXResult;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TransformerHandler;
 import javax.xml.transform.stream.StreamResult;
 import javax.xml.transform.stream.StreamSource;
 
@@ -53,6 +56,8 @@
 import org.apache.nutch.searcher.Query;
 import org.apache.nutch.searcher.Summary;
 import org.apache.nutch.searcher.Summary.Fragment;
+import org.apache.xml.resolver.tools.CatalogResolver;
+import org.apache.xml.serializer.Serializer;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.wyona.yanel.core.Path;
@@ -61,12 +66,19 @@
 import org.wyona.yanel.core.api.attributes.ViewableV1;
 import org.wyona.yanel.core.attributes.viewable.View;
 import org.wyona.yanel.core.attributes.viewable.ViewDescriptor;
+import org.wyona.yanel.core.serialization.SerializerFactory;
+import org.wyona.yanel.core.source.ResourceResolver;
 import org.wyona.yanel.core.transformation.I18nTransformer;
+import org.wyona.yanel.core.transformation.I18nTransformer2;
+import org.wyona.yanel.core.transformation.XIncludeTransformer;
 import org.wyona.yanel.core.util.PathUtil;
 import org.wyona.yarep.core.RepositoryException;
 import org.wyona.yarep.core.Repository;
 import org.wyona.yarep.core.RepositoryFactory;
 import org.wyona.yarep.util.RepoPath;
+import org.xml.sax.InputSource;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
 
 import javax.servlet.ServletContext;
 /**
@@ -355,7 +367,17 @@
         try {
             streamSource = getGlobalXSLTStreamSource();
             if(streamSource != null) {
-                transformer = TransformerFactory.newInstance().newTransformer(streamSource);
+                
+                // create reader:
+                XMLReader xmlReader = XMLReaderFactory.createXMLReader();
+                CatalogResolver catalogResolver = new CatalogResolver();
+                xmlReader.setEntityResolver(catalogResolver);
+                
+                // create xslt transformer:
+                SAXTransformerFactory tf = (SAXTransformerFactory)TransformerFactory.newInstance();
+
+                TransformerHandler xsltHandler = tf.newTransformerHandler(streamSource);
+                Transformer transformer = xsltHandler.getTransformer();
                 transformer.setParameter("yanel.path.name", PathUtil.getName(getPath()));
                 transformer.setParameter("yanel.path", getPath().toString());
                 transformer.setParameter("yanel.back2context", PathUtil.backToContext(realm, getPath()));
@@ -366,14 +388,32 @@
                 transformer.setParameter("start", "" + start);
                 transformer.setParameter("yanel.meta.lanugage", language);
                 transformer.setParameter("show", show);
-                ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-                transformer.transform(new StreamSource(inputStream), new StreamResult(byteArrayOutputStream));
-                inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
-                log.debug("Language: " + language);
-                i18nTransformer = new I18nTransformer(resourceBundle, language, getRealm().getDefaultLanguage());
-                SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
-                saxParser.parse(inputStream, i18nTransformer);
-                return i18nTransformer.getInputStream(); 
+
+                // create xinclude transformer:
+                XIncludeTransformer xIncludeTransformer = new XIncludeTransformer();
+                ResourceResolver resolver = new ResourceResolver(this);
+                xIncludeTransformer.setResolver(resolver);
+                
+                // create i18n transformer:
+                I18nTransformer2 i18nTransformer = new I18nTransformer2(resourceBundle, language, getRealm().getDefaultLanguage());
+                i18nTransformer.setEntityResolver(catalogResolver);
+                
+                // create serializer:
+                Serializer serializer = SerializerFactory.getSerializer(SerializerFactory.XHTML_STRICT);
+                ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+                // chain everything together (create a pipeline):
+                xmlReader.setContentHandler(xsltHandler);
+                xsltHandler.setResult(new SAXResult(xIncludeTransformer));
+                xIncludeTransformer.setResult(new SAXResult(i18nTransformer));
+                i18nTransformer.setResult(new SAXResult(serializer.asContentHandler()));
+                serializer.setOutputStream(baos);
+                
+                // execute pipeline:
+                xmlReader.parse(new InputSource(inputStream));
+
+                return new ByteArrayInputStream(baos.toByteArray());
+
             } else {
                 return inputStream;
             }     

Modified: public/yanel/trunk/src/contributions/resources/wiki/src/java/org/wyona/yanel/impl/resources/WikiResource.java
===================================================================
--- public/yanel/trunk/src/contributions/resources/wiki/src/java/org/wyona/yanel/impl/resources/WikiResource.java	2007-03-30 07:38:58 UTC (rev 23506)
+++ public/yanel/trunk/src/contributions/resources/wiki/src/java/org/wyona/yanel/impl/resources/WikiResource.java	2007-03-30 07:57:57 UTC (rev 23507)
@@ -31,10 +31,15 @@
 import javax.xml.parsers.SAXParserFactory;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.sax.SAXResult;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TransformerHandler;
 import javax.xml.transform.stream.StreamResult;
 import javax.xml.transform.stream.StreamSource;
 
 import org.apache.log4j.Category;
+import org.apache.xml.resolver.tools.CatalogResolver;
+import org.apache.xml.serializer.Serializer;
 
 import org.wyona.wikiparser.IWikiParser;
 
@@ -46,13 +51,20 @@
 import org.wyona.yanel.core.api.attributes.ViewableV1;
 import org.wyona.yanel.core.attributes.viewable.View;
 import org.wyona.yanel.core.attributes.viewable.ViewDescriptor;
+import org.wyona.yanel.core.serialization.SerializerFactory;
+import org.wyona.yanel.core.source.ResourceResolver;
 import org.wyona.yanel.core.transformation.I18nTransformer;
+import org.wyona.yanel.core.transformation.I18nTransformer2;
+import org.wyona.yanel.core.transformation.XIncludeTransformer;
 import org.wyona.yanel.core.util.PathUtil;
 
 import org.wyona.yarep.core.RepositoryException;
 import org.wyona.yarep.core.Repository;
 import org.wyona.yarep.core.RepositoryFactory;
 import org.wyona.yarep.util.RepoPath;
+import org.xml.sax.InputSource;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
 
 /**
  * 
@@ -132,31 +144,60 @@
             
             transformer.transform(new StreamSource(linkChecker.getInputStream()), new StreamResult(byteArrayOutputStream));
 
+            inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
+            
             if(viewId != null && viewId.equals("source")) {
-                defaultView.setInputStream(new java.io.ByteArrayInputStream(byteArrayOutputStream.toByteArray()));
+                defaultView.setInputStream(inputStream);
                 return defaultView;
             }
             
-            // Apply global XSLT
+            // create reader:
+            XMLReader xmlReader = XMLReaderFactory.createXMLReader();
+            CatalogResolver catalogResolver = new CatalogResolver();
+            xmlReader.setEntityResolver(catalogResolver);
+
+            // create xslt transformer:
+            TransformerHandler xsltHandler = null;
             if(getXSLTPath() != null) {
-                inputStream = new java.io.ByteArrayInputStream(byteArrayOutputStream.toByteArray());
                 
-                transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(dataRepo.getInputStream(new org.wyona.yarep.core.Path(getXSLTPath().toString()))));
+                SAXTransformerFactory tf = (SAXTransformerFactory)TransformerFactory.newInstance();
+                xsltHandler = tf.newTransformerHandler(new StreamSource(dataRepo.getInputStream(new org.wyona.yarep.core.Path(getXSLTPath().toString()))));
+                transformer = xsltHandler.getTransformer();
                 transformer.setParameter("yanel.path.name", PathUtil.getName(getPath()));
                 transformer.setParameter("yanel.path", getPath());
                 transformer.setParameter("yanel.back2context", PathUtil.backToContext(realm, getPath()));
                 transformer.setParameter("yarep.back2realm", PathUtil.backToRealm(getPath()));
                 
-                byteArrayOutputStream = new ByteArrayOutputStream();
-                transformer.transform(new StreamSource(inputStream), new StreamResult(byteArrayOutputStream));    
             }
 
-            inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
-            I18nTransformer i18nTransformer = new I18nTransformer("global", getRealm().getDefaultLanguage(), getRealm().getDefaultLanguage());
-            saxParser = SAXParserFactory.newInstance().newSAXParser();
-            saxParser.parse(inputStream, i18nTransformer);
+            // create xinclude transformer:
+            XIncludeTransformer xIncludeTransformer = new XIncludeTransformer();
+            ResourceResolver resolver = new ResourceResolver(this);
+            xIncludeTransformer.setResolver(resolver);
+            
+            // create i18n transformer:
+            I18nTransformer2 i18nTransformer = new I18nTransformer2("global", getRealm().getDefaultLanguage(), getRealm().getDefaultLanguage());
+            i18nTransformer.setEntityResolver(catalogResolver);
+            
+            // create serializer:
+            Serializer serializer = SerializerFactory.getSerializer(SerializerFactory.XHTML_STRICT);
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
 
-            defaultView.setInputStream(i18nTransformer.getInputStream());
+            // chain everything together (create a pipeline):
+            if (xsltHandler != null) {
+                xmlReader.setContentHandler(xsltHandler);
+                xsltHandler.setResult(new SAXResult(xIncludeTransformer));
+            } else {
+                xmlReader.setContentHandler(xIncludeTransformer);
+            }
+            xIncludeTransformer.setResult(new SAXResult(i18nTransformer));
+            i18nTransformer.setResult(new SAXResult(serializer.asContentHandler()));
+            serializer.setOutputStream(baos);
+            
+            // execute pipeline:
+            xmlReader.parse(new InputSource(inputStream));
+
+            defaultView.setInputStream(new ByteArrayInputStream(baos.toByteArray()));
             return defaultView;
         } catch (Exception e) {
             log.error(e, e);




More information about the Yanel-commits mailing list