[Yanel-commits] rev 28768 - in
public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources:
. usecase
josias at wyona.com
josias at wyona.com
Mon Nov 12 10:02:05 CET 2007
Author: josias
Date: 2007-11-12 10:02:05 +0100 (Mon, 12 Nov 2007)
New Revision: 28768
Modified:
public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/BasicXMLResource.java
public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/UsecaseResource.java
Log:
pass htdocs parameters to xslt transformers and to jelly template. fixes bug #5679. thanks to simon
Modified: public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/BasicXMLResource.java
===================================================================
--- public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/BasicXMLResource.java 2007-11-12 09:01:20 UTC (rev 28767)
+++ public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/BasicXMLResource.java 2007-11-12 09:02:05 UTC (rev 28768)
@@ -79,7 +79,7 @@
InputStream xmlInputStream = getContentXML(viewId);
return getXMLView(viewId, xmlInputStream);
}
-
+
/**
* @see org.wyona.yanel.core.api.attributes.ViewableV2#getMimeType(java.lang.String)
*/
@@ -93,7 +93,7 @@
}
return "application/xml";
}
-
+
/**
* @see org.wyona.yanel.core.api.attributes.ViewableV2#exists()
*/
@@ -107,12 +107,12 @@
public long getSize() throws Exception {
return -1;
}
-
-
+
+
public View getXMLView(String viewId, InputStream xmlInputStream) throws Exception {
View view = new View();
String mimeType = getMimeType(viewId);
- view.setMimeType(mimeType);
+ view.setMimeType(mimeType);
try {
Repository repo = getRealm().getRepository();
@@ -123,32 +123,32 @@
return view;
}
-
+
// create reader:
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
CatalogResolver catalogResolver = new CatalogResolver();
xmlReader.setEntityResolver(catalogResolver);
xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
-
+
// create xslt transformer:
SAXTransformerFactory tf = (SAXTransformerFactory)TransformerFactory.newInstance();
-
+
String[] xsltPath = getXSLTPath(getPath());
TransformerHandler[] xsltHandlers = new TransformerHandler[xsltPath.length];
for (int i = 0; i < xsltPath.length; i++) {
xsltHandlers[i] = tf.newTransformerHandler(new StreamSource(repo.getNode(xsltPath[i]).getInputStream()));
passTransformerParameters(xsltHandlers[i].getTransformer());
}
-
+
// create i18n transformer:
I18nTransformer2 i18nTransformer = new I18nTransformer2(getI18NCatalogueNames(), getRequestedLanguage(), getRealm().getDefaultLanguage());
i18nTransformer.setEntityResolver(catalogResolver);
-
+
// create xinclude transformer:
XIncludeTransformer xIncludeTransformer = new XIncludeTransformer();
SourceResolver resolver = new SourceResolver(this);
xIncludeTransformer.setResolver(resolver);
-
+
// create serializer:
Serializer serializer = null;
if (getMimeType(viewId).equals("text/html")) {
@@ -159,7 +159,7 @@
serializer = SerializerFactory.getSerializer(SerializerFactory.XML);
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
+
// chain everything together (create a pipeline):
if (xsltHandlers.length > 0) {
xmlReader.setContentHandler(xsltHandlers[0]);
@@ -173,10 +173,10 @@
xIncludeTransformer.setResult(new SAXResult(i18nTransformer));
i18nTransformer.setResult(new SAXResult(serializer.asContentHandler()));
serializer.setOutputStream(baos);
-
+
// execute pipeline:
xmlReader.parse(new InputSource(xmlInputStream));
-
+
// write result into view:
view.setInputStream(new ByteArrayInputStream(baos.toByteArray()));
return view;
@@ -186,7 +186,7 @@
}
}
-
+
/**
* Gets the names of the i18n message catalogues used for the i18n transformation.
* Looks for an rc config property named 'i18n-catalogue'. Defaults to 'global'.
@@ -200,7 +200,7 @@
}
return catalogueNames;
}
-
+
/**
* Pass parameters to xslt transformer.
* @param transformer
@@ -210,6 +210,8 @@
transformer.setParameter("yanel.path.name", PathUtil.getName(getPath()));
transformer.setParameter("yanel.path", getPath());
transformer.setParameter("yanel.back2context", PathUtil.backToContext(realm, getPath()));
+ transformer.setParameter("yanel.globalHtdocsPath", PathUtil.getGlobalHtdocsPath(this));
+ transformer.setParameter("yanel.resourcesHtdocsPath", PathUtil.getResourcesHtdocsPath(this));
String backToRealm = PathUtil.backToRealm(getPath());
transformer.setParameter("yanel.back2realm", backToRealm);
transformer.setParameter("yarep.back2realm", backToRealm); // for backwards compatibility
@@ -227,9 +229,9 @@
String username = getUsername();
if (username != null) transformer.setParameter("username", username);
}
-
+
/**
- * Gets the XML content which will be fed into the processing pipeline.
+ * Gets the XML content which will be fed into the processing pipeline.
* @return xml stream
* @throws Exception
*/
Modified: public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/UsecaseResource.java
===================================================================
--- public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/UsecaseResource.java 2007-11-12 09:01:20 UTC (rev 28767)
+++ public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/UsecaseResource.java 2007-11-12 09:02:05 UTC (rev 28768)
@@ -77,7 +77,7 @@
init();
return processUsecase(viewID);
}
-
+
protected void init() throws UsecaseException {
// reads views from configuration:
try {
@@ -101,21 +101,21 @@
throw new UsecaseException(errorMsg, e);
}
}
-
+
protected UsecaseView processUsecase(String viewID) throws UsecaseException {
return generateView(viewID);
}
-
+
protected UsecaseView generateView(String viewID) throws UsecaseException {
if (viewID == null || viewID.length() == 0) {
viewID = VIEW_DEFAULT;
}
- UsecaseView view = (UsecaseView)this.views.get(viewID);
-
+ UsecaseView view = (UsecaseView)this.views.get(viewID);
+
if (view == null) {
throw new UsecaseException("Usecase " + getName() + " has no view with id: " + viewID);
}
-
+
if (view.getType().equals(UsecaseView.TYPE_JELLY)) {
String viewTemplate = view.getTemplate();
renderJellyView(view, viewTemplate);
@@ -131,21 +131,23 @@
throw new UsecaseException("Usecase " + getName() + " has invalid view type: " + view.getType());
}
}
-
+
protected String getName() {
return "name";
}
-
+
protected void renderJellyView(UsecaseView view, String viewTemplate) throws UsecaseException {
try {
String viewId = view.getID();
Repository repo = this.getRealm().getRepository();
-
+
JellyContext jellyContext = new JellyContext();
jellyContext.setVariable("resource", this);
jellyContext.setVariable("yanel.back2context", PathUtil.backToContext(realm, getPath()));
jellyContext.setVariable("yanel.back2realm", PathUtil.backToRealm(getPath()));
- jellyContext.setVariable("yanel.reservedPrefix", "yanel"); // TODO don't hardcode
+ jellyContext.setVariable("yanel.globalHtdocsPath", PathUtil.getGlobalHtdocsPath(this));
+ jellyContext.setVariable("yanel.resourcesHtdocsPath", PathUtil.getResourcesHtdocsPath(this));
+ jellyContext.setVariable("yanel.reservedPrefix", this.getYanel().getReservedPrefix());
//jellyContext.setVariable("request", request);
// at first we write the jelly output to a stream,
@@ -153,7 +155,7 @@
// because otherwise there is an error: EmptyStackException
ByteArrayOutputStream jellyResultStream = new ByteArrayOutputStream();
XMLOutput jellyOutput = XMLOutput.createXMLOutput(jellyResultStream);
-
+
//String viewTemplate = view.getTemplate();
jellyContext.runScript(new InputSource(repo.getNode(viewTemplate).getInputStream()), jellyOutput);
jellyOutput.flush();
@@ -165,7 +167,7 @@
// create xslt transformer:
SAXTransformerFactory tf = (SAXTransformerFactory)TransformerFactory.newInstance();
-
+
String[] xsltPath = getResourceConfigProperties("xslt");
TransformerHandler[] xsltHandlers = new TransformerHandler[xsltPath.length];
@@ -174,10 +176,12 @@
xsltHandlers[i].getTransformer().setParameter("yanel.path.name", PathUtil.getName(getPath()));
xsltHandlers[i].getTransformer().setParameter("yanel.path", getPath());
xsltHandlers[i].getTransformer().setParameter("yanel.back2context", PathUtil.backToContext(realm, getPath()));
+ xsltHandlers[i].getTransformer().setParameter("yanel.globalHtdocsPath", PathUtil.getGlobalHtdocsPath(this));
+ xsltHandlers[i].getTransformer().setParameter("yanel.resourcesHtdocsPath", PathUtil.getResourcesHtdocsPath(this));
xsltHandlers[i].getTransformer().setParameter("yanel.back2realm", PathUtil.backToRealm(getPath()));
xsltHandlers[i].getTransformer().setParameter("yarep.back2realm", PathUtil.backToRealm(getPath())); // for backwards compatibility
xsltHandlers[i].getTransformer().setParameter("language", getRequestedLanguage());
- xsltHandlers[i].getTransformer().setParameter("yanel.reservedPrefix", "yanel"); // TODO don't hardcode
+ xsltHandlers[i].getTransformer().setParameter("yanel.reservedPrefix", this.getYanel().getReservedPrefix());
}
// create i18n transformer:
@@ -210,7 +214,7 @@
xIncludeTransformer.setResult(new SAXResult(i18nTransformer));
i18nTransformer.setResult(new SAXResult(serializer.asContentHandler()));
serializer.setOutputStream(baos);
-
+
// execute pipeline:
xmlReader.parse(new InputSource(new ByteArrayInputStream(jellyResultStream.toByteArray())));
@@ -226,12 +230,12 @@
protected String getRedirectURL(UsecaseView view) {
return view.getRedirectURL();
}
-
+
protected void renderCustomView(UsecaseView view) throws UsecaseException {
// implement in subclass
}
-
+
public boolean exists() throws Exception {
return true;
}
@@ -251,7 +255,7 @@
// TODO: call init() instead of return null
if (this.views != null) {
ViewDescriptor[] descriptors = new ViewDescriptor[this.views.size()];
-
+
Iterator iter = this.views.keySet().iterator();
int i = 0;
while (iter.hasNext()) {
More information about the Yanel-commits
mailing list