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)
{