Update of /var/cvs/src/org/mmbase/framework
In directory james.mmbase.org:/tmp/cvs-serv26513

Modified Files:
        ResourceRenderer.java 
Log Message:
added support for xsl-transformations (like in ConnectionRenderer)


See also: http://cvs.mmbase.org/viewcvs/src/org/mmbase/framework


Index: ResourceRenderer.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/ResourceRenderer.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- ResourceRenderer.java       26 Aug 2008 07:48:38 -0000      1.8
+++ ResourceRenderer.java       15 Oct 2008 13:59:11 -0000      1.9
@@ -29,7 +29,7 @@
 
  *
  * @author Michiel Meeuwissen
- * @version $Id: ResourceRenderer.java,v 1.8 2008/08/26 07:48:38 michiel Exp $
+ * @version $Id: ResourceRenderer.java,v 1.9 2008/10/15 13:59:11 michiel Exp $
  * @since MMBase-1.9
  */
 public class ResourceRenderer extends AbstractRenderer {
@@ -38,6 +38,7 @@
 
     protected String resource;
     protected String type = "web";
+    protected String xsl = null;
 
 
     public ResourceRenderer(String t, Block parent) {
@@ -52,6 +53,12 @@
     public void setType(String t) {
         type = t;
     }
+
+    public void setXslt(String x) throws MalformedURLException {
+        xsl = x;
+    }
+
+
     private String getResource() {
         if (type.equals("web")) {
             return resource.charAt(0) == '/' ? resource : JspRenderer.JSP_ROOT 
+ getBlock().getComponent().getName() + '/' + resource;
@@ -65,16 +72,33 @@
                        Writer w, RenderHints hints) throws FrameworkException {
 
 
+        String name = getResource();
+        ResourceLoader loader = 
ResourceLoader.Type.valueOf(type.toUpperCase()).get();
         try {
-            Reader r = 
ResourceLoader.Type.valueOf(type.toUpperCase()).get().getReader(getResource());
-            if (r == null) throw new FrameworkException("No such resource " +  
ResourceLoader.Type.valueOf(type.toUpperCase()).get().getResource(getResource()));
+            InputStream is = loader.getResourceAsStream(name);
+            if (is == null) throw new FrameworkException("No such resource " + 
 ResourceLoader.Type.valueOf(type.toUpperCase()).get().getResource(name));
+            if (xsl == null) {
+                Reader r = loader.getReader(is, name);
             char[] buf = new char[1000];
             int c;
             while ((c = r.read(buf, 0, 1000)) > 0) {
                 w.write(buf, 0, c);
             }
+            } else {
+                /// convert using the xsl and spit out that.
+                Source xml = new StreamSource(is);
+                URL x = ResourceLoader.getConfigurationRoot().getResource(xsl);
+
+                Result res = new StreamResult(w);
+                XSLTransformer.transform(xml, x, res, new HashMap<String, 
Object>());
+            }
         } catch (IOException ioe) {
             throw new FrameworkException(ioe);
+        } catch (javax.xml.transform.TransformerException te) {
+            throw new FrameworkException(te.getMessage(), te);
+        } catch (RuntimeException e) {
+            log.debug(e.getMessage(), e);
+            throw e;
         }
     }
 
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to