[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