[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