You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by mm...@apache.org on 2007/07/26 10:55:39 UTC

svn commit: r559757 - in /myfaces: core/trunk/impl/src/main/java/org/apache/myfaces/application/jsp/ core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/ tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/ tomahawk...

Author: mmarinschek
Date: Thu Jul 26 01:55:37 2007
New Revision: 559757

URL: http://svn.apache.org/viewvc?view=rev&rev=559757
Log:
https://issues.apache.org/jira/browse/TOMAHAWK-1065: Template renderer can now be changed by configuration. Runtime-Dependency on Freemarker removed, if templated components are not used. No jira-issue: Some additional comments in framework classes. One better commented NPE.

Added:
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/DefaultTemplateEncoder.java
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/TemplateEncoder.java
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/TemplateRenderer.java
      - copied, changed from r558911, myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/FreemarkerRenderer.java
Removed:
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/FreemarkerRenderer.java
Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/jsp/JspStateManagerImpl.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/RenderKitFactoryImpl.java
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlOutputTextRenderer.java

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/jsp/JspStateManagerImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/jsp/JspStateManagerImpl.java?view=diff&rev=559757&r1=559756&r2=559757
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/jsp/JspStateManagerImpl.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/jsp/JspStateManagerImpl.java Thu Jul 26 01:55:37 2007
@@ -257,6 +257,10 @@
 
     private String getSequenceString(FacesContext facesContext, String renderKitId, String viewId) {
         RenderKit rk = getRenderKitFactory().getRenderKit(facesContext, renderKitId);
+
+        if(rk==null) //first access of the renderkit in a typical application - at this point, renderkit needs to be available. if it isn't we'll throw an exception
+            throw new NullPointerException("RenderKit for renderKitId : "+renderKitId + " on viewId : " + viewId + " could not be retrieved. Please specify a valid renderkit-id.");
+
         ResponseStateManager responseStateManager = rk.getResponseStateManager();
         String sequenceStr = (String) responseStateManager.getTreeStructureToRestore(facesContext, viewId);
         return sequenceStr;

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/RenderKitFactoryImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/RenderKitFactoryImpl.java?view=diff&rev=559757&r1=559756&r2=559757
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/RenderKitFactoryImpl.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/RenderKitFactoryImpl.java Thu Jul 26 01:55:37 2007
@@ -73,6 +73,7 @@
             // "If there is no registered RenderKit for the specified identifier, return null"
             // vs "IllegalArgumentException - if no RenderKit instance can be returned for the specified identifier"
             //First sentence is more precise, so we just log a warning
+            //RI doesn't even log a warning. Warning seems appropriate, though.
             log.warn("Unknown RenderKit '" + renderKitId + "'.");
         }
         return renderkit;

Added: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/DefaultTemplateEncoder.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/DefaultTemplateEncoder.java?view=auto&rev=559757
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/DefaultTemplateEncoder.java (added)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/DefaultTemplateEncoder.java Thu Jul 26 01:55:37 2007
@@ -0,0 +1,42 @@
+package org.apache.myfaces.renderkit.freemarker;
+
+import java.io.IOException;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.security.auth.login.Configuration;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import freemarker.cache.ClassTemplateLoader;
+import freemarker.cache.TemplateLoader;
+import freemarker.template.Configuration;
+import freemarker.template.DefaultObjectWrapper;
+import freemarker.template.Template;
+import freemarker.template.TemplateException;
+
+/**
+ * @author Martin Marinschek
+ */
+public class DefaultTemplateEncoder implements TemplateEncoder {
+
+    private static final Log log = LogFactory.getLog(DefaultTemplateEncoder.class);
+
+    public void encodeTemplate(FacesContext context, UIComponent component, String template) throws IOException {    
+            Configuration cfg = new Configuration();
+        log.info("Encoding template : " + getClass().getResource(template));
+        TemplateLoader templateLoader = new ClassTemplateLoader(getClass(), template);
+        cfg.setTemplateLoader(templateLoader);
+        cfg.setObjectWrapper(new DefaultObjectWrapper());
+        Template temp = cfg.getTemplate(template);
+        try
+        {
+            temp.process(getDatamodel(context, component), context.getResponseWriter());
+        }
+        catch (TemplateException e)
+        {
+            throw new IOException(e.getMessage());
+        }
+    }
+}

Added: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/TemplateEncoder.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/TemplateEncoder.java?view=auto&rev=559757
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/TemplateEncoder.java (added)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/TemplateEncoder.java Thu Jul 26 01:55:37 2007
@@ -0,0 +1,12 @@
+package org.apache.myfaces.renderkit.freemarker;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.UIComponent;
+import java.io.IOException;
+
+/**
+ * @author Martin Marinschek
+ */
+public interface TemplateEncoder {
+    public void encodeTemplate(FacesContext context, UIComponent component, String template) throws IOException;
+}

Copied: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/TemplateRenderer.java (from r558911, myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/FreemarkerRenderer.java)
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/TemplateRenderer.java?view=diff&rev=559757&p1=myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/FreemarkerRenderer.java&r1=558911&p2=myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/TemplateRenderer.java&r2=559757
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/FreemarkerRenderer.java (original)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/freemarker/TemplateRenderer.java Thu Jul 26 01:55:37 2007
@@ -9,16 +9,13 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-import freemarker.cache.ClassTemplateLoader;
-import freemarker.cache.TemplateLoader;
-import freemarker.template.Configuration;
-import freemarker.template.DefaultObjectWrapper;
-import freemarker.template.Template;
-import freemarker.template.TemplateException;
 
-public abstract class FreemarkerRenderer extends Renderer
+public abstract class TemplateRenderer extends Renderer
 {
-    private static final Log log = LogFactory.getLog(FreemarkerRenderer.class);
+    private static final Log log = LogFactory.getLog(TemplateRenderer.class);
+
+    private static final String TEMPLATE_ENCODER = "org.apache.myfaces.tomahawk.TemplateEncoder";
+    private static final String TEMPLATE_ENCODER_ENCODER_CLASS = "org.apache.myfaces.tomahawk.templateEncoder.ENCODER_CLASS";
 
     /**
      * @see javax.faces.render.Renderer#encodeBegin(javax.faces.context.FacesContext, javax.faces.component.UIComponent)
@@ -49,20 +46,31 @@
     }
 
     protected void encodeTemplate(FacesContext context, UIComponent component, String template) throws IOException {
-        Configuration cfg = new Configuration();
-        log.info(getClass().getResource("templates/outputText_begin.ftl"));
-        TemplateLoader templateLoader = new ClassTemplateLoader(getClass(), "template");
-        cfg.setTemplateLoader(templateLoader);
-        cfg.setObjectWrapper(new DefaultObjectWrapper());
-        Template temp = cfg.getTemplate(template);
-        try
-        {
-            temp.process(getDatamodel(context, component), context.getResponseWriter());
-        }
-        catch (TemplateException e)
-        {
-            throw new IOException(e.getMessage());
+        TemplateEncoder templateEncoder =
+                (TemplateEncoder) context.getExternalContext().getApplicationMap().get(TEMPLATE_ENCODER);
+
+        if(templateEncoder == null) {
+
+            String className =
+                    context.getExternalContext().getInitParameter(TEMPLATE_ENCODER_ENCODER_CLASS);
+
+            if(className == null) {
+                className = "org.apache.myfaces.renderkit.freemarker.DefaultTemplateEncoder";
+            }
+
+            try {
+                templateEncoder = (TemplateEncoder) Class.forName(className).newInstance();
+                context.getExternalContext().getApplicationMap().put(TEMPLATE_ENCODER, templateEncoder);
+            } catch (ClassNotFoundException e) {
+                log.error("Template encoder class : "+className+" not found. Alternative classed defined in web-xml parameter : "+TEMPLATE_ENCODER_ENCODER_CLASS);
+            } catch (IllegalAccessException e) {
+                log.error("Constructor of template encoder class : " + className + " could not be accessed. Alternative classes may be defined in web-xml parameter : "+TEMPLATE_ENCODER_ENCODER_CLASS);
+            } catch (InstantiationException e) {
+                log.error("Instance of template encoder class : " + className + " could not be instantiated. Alternative classes may be defined in web-xml parameter : "+TEMPLATE_ENCODER_ENCODER_CLASS);
+            }
         }
+
+        templateEncoder.encodeTemplate(context, component, template);
     }
     
     protected abstract Object getDatamodel(FacesContext context, UIComponent component);

Modified: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlOutputTextRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlOutputTextRenderer.java?view=diff&rev=559757&r1=559756&r2=559757
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlOutputTextRenderer.java (original)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlOutputTextRenderer.java Thu Jul 26 01:55:37 2007
@@ -7,10 +7,9 @@
 import javax.faces.component.UIOutput;
 import javax.faces.context.FacesContext;
 
-import org.apache.myfaces.renderkit.freemarker.FreemarkerRenderer;
+import org.apache.myfaces.renderkit.freemarker.TemplateRenderer;
 
-public class HtmlOutputTextRenderer extends FreemarkerRenderer
-{
+public class HtmlOutputTextRenderer extends TemplateRenderer {
 
     protected Object getDatamodel(FacesContext context, UIComponent component)
     {