You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2008/11/20 22:19:19 UTC
svn commit: r719377 - in /myfaces/extensions/validator/branches/jsf_1.1:
component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/renderkit/
component-support/trinidad-support/src/main/java/org/apache/myfaces/ex...
Author: gpetracek
Date: Thu Nov 20 13:19:19 2008
New Revision: 719377
URL: http://svn.apache.org/viewvc?rev=719377&view=rev
Log:
support for trinidad table renderer
Added:
myfaces/extensions/validator/branches/jsf_1.1/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/renderkit/ExtValTrinidadRendererProxy.java
myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValLazyRendererProxy.java
Modified:
myfaces/extensions/validator/branches/jsf_1.1/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/startup/TrinidadModuleStartupListener.java
myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRendererProxy.java
myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRendererWrapper.java
myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ExtValStartupListener.java
Added: myfaces/extensions/validator/branches/jsf_1.1/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/renderkit/ExtValTrinidadRendererProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/renderkit/ExtValTrinidadRendererProxy.java?rev=719377&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/renderkit/ExtValTrinidadRendererProxy.java (added)
+++ myfaces/extensions/validator/branches/jsf_1.1/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/renderkit/ExtValTrinidadRendererProxy.java Thu Nov 20 13:19:19 2008
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.trinidad.renderkit;
+
+import org.apache.myfaces.extensions.validator.core.renderkit.ExtValRendererProxy;
+import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.table.TableRenderingContext;
+
+import javax.faces.component.UIComponent;
+import javax.faces.render.Renderer;
+import javax.faces.context.FacesContext;
+
+/**
+ * solution for trinidad table renderer issue (in connection with double call prevention proxies)
+ *
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+public class ExtValTrinidadRendererProxy extends ExtValRendererProxy
+{
+ public ExtValTrinidadRendererProxy(Renderer renderer)
+ {
+ super(renderer);
+ }
+
+ @Override
+ protected String getOptionalKey(FacesContext facesContext, UIComponent uiComponent)
+ {
+ if(TableRenderingContext.getCurrentInstance() != null)
+ {
+ return "|" + TableRenderingContext.getCurrentInstance().getRenderStage().getStage();
+ }
+
+ return "";
+ }
+}
Modified: myfaces/extensions/validator/branches/jsf_1.1/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/startup/TrinidadModuleStartupListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/startup/TrinidadModuleStartupListener.java?rev=719377&r1=719376&r2=719377&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/startup/TrinidadModuleStartupListener.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/startup/TrinidadModuleStartupListener.java Thu Nov 20 13:19:19 2008
@@ -21,9 +21,11 @@
import org.apache.myfaces.extensions.validator.core.startup.AbstractStartupListener;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
import org.apache.myfaces.extensions.validator.core.renderkit.AbstractRenderKitWrapperFactory;
+import org.apache.myfaces.extensions.validator.core.renderkit.ExtValRendererProxy;
import org.apache.myfaces.extensions.validator.core.factory.FactoryNames;
import org.apache.myfaces.extensions.validator.trinidad.initializer.component.TrinidadComponentInitializer;
import org.apache.myfaces.extensions.validator.trinidad.WebXmlParameter;
+import org.apache.myfaces.extensions.validator.trinidad.renderkit.ExtValTrinidadRendererProxy;
import org.apache.myfaces.extensions.validator.trinidad.interceptor.TrinidadValidationExceptionInterceptor;
import org.apache.myfaces.extensions.validator.internal.Priority;
import org.apache.myfaces.extensions.validator.internal.ToDo;
@@ -66,5 +68,16 @@
{
ExtValContext.getContext().addValidationExceptionInterceptor(new TrinidadValidationExceptionInterceptor());
}
+
+ //deactivate extval renderer proxy - due to an incompatibility with the table renderer
+ ExtValContext.getContext()
+ .addGlobalProperty(ExtValRendererProxy.KEY, ExtValTrinidadRendererProxy.class.getName());
+
+ /*
+ * if there are further incompatible renderers use the following quick-fix:
+ * ExtValContext.getContext()
+ .addGlobalProperty(ExtValRendererProxy.KEY, null);
+ attention: it causes direct delegation without a check of double invocations
+ */
}
}
Added: myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValLazyRendererProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValLazyRendererProxy.java?rev=719377&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValLazyRendererProxy.java (added)
+++ myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValLazyRendererProxy.java Thu Nov 20 13:19:19 2008
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.renderkit;
+
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.core.ExtValContext;
+import org.apache.myfaces.extensions.validator.util.ClassUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.faces.context.FacesContext;
+import javax.faces.render.Renderer;
+import javax.faces.component.UIComponent;
+import javax.faces.convert.ConverterException;
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+
+/**
+ * to support a custom proxy
+ *
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation(UsageCategory.INTERNAL)
+class ExtValLazyRendererProxy extends Renderer
+{
+ protected final Log logger = LogFactory.getLog(getClass());
+
+ private Renderer wrapped;
+
+ public ExtValLazyRendererProxy(Renderer renderer)
+ {
+ this.wrapped = renderer;
+
+ if(logger.isTraceEnabled())
+ {
+ logger.trace("simple proxy created for " + renderer.getClass().getName());
+ }
+ }
+
+ @Override
+ public void decode(FacesContext facesContext, UIComponent uiComponent)
+ {
+ getLazyRenderer().decode(facesContext, uiComponent);
+ }
+
+ @Override
+ public void encodeBegin(FacesContext facesContext, UIComponent uiComponent)
+ throws IOException
+ {
+ getLazyRenderer().encodeBegin(facesContext, uiComponent);
+ }
+
+ @Override
+ public void encodeChildren(FacesContext facesContext, UIComponent uiComponent)
+ throws IOException
+ {
+ getLazyRenderer().encodeChildren(facesContext, uiComponent);
+ }
+
+ @Override
+ public void encodeEnd(FacesContext facesContext, UIComponent uiComponent)
+ throws IOException
+ {
+ getLazyRenderer().encodeEnd(facesContext, uiComponent);
+ }
+
+ @Override
+ public String convertClientId(FacesContext facesContext, String s)
+ {
+ return getLazyRenderer().convertClientId(facesContext, s);
+ }
+
+ @Override
+ public boolean getRendersChildren()
+ {
+ return getLazyRenderer().getRendersChildren();
+ }
+
+ @Override
+ public Object getConvertedValue(FacesContext facesContext, UIComponent uiComponent, Object o)
+ throws ConverterException
+ {
+ return getLazyRenderer().getConvertedValue(facesContext, uiComponent, o);
+ }
+
+ private Renderer getLazyRenderer()
+ {
+ String proxyClassName = (String) ExtValContext.getContext().getGlobalProperty(ExtValRendererProxy.KEY);
+
+ if(proxyClassName != null && !proxyClassName.endsWith(getClass().getName()))
+ {
+ Class targetClass = ClassUtils.tryToLoadClassForName(proxyClassName);
+
+ if(targetClass == null)
+ {
+ throw new IllegalStateException("a custom invalid renderer proxy is configured: " + proxyClassName);
+ }
+
+ Class[] argClasses = new Class[1];
+ argClasses[0] = Renderer.class;
+
+ try
+ {
+ Constructor constructor = targetClass.getConstructor(argClasses);
+ return (Renderer)constructor.newInstance(this.wrapped);
+ }
+ catch (Throwable t)
+ {
+ if(logger.isWarnEnabled())
+ {
+ logger.warn("couldn't create: " + targetClass.getName());
+ }
+
+ return this.wrapped;
+ }
+ }
+ else
+ {
+ return this.wrapped;
+ }
+ }
+
+}
Modified: myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRendererProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRendererProxy.java?rev=719377&r1=719376&r2=719377&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRendererProxy.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRendererProxy.java Thu Nov 20 13:19:19 2008
@@ -40,9 +40,10 @@
@UsageInformation(UsageCategory.INTERNAL)
public class ExtValRendererProxy extends Renderer
{
+ public static final String KEY = ExtValRendererProxy.class.getName() + ":KEY";
protected final Log logger = LogFactory.getLog(getClass());
- private Renderer wrapped;
+ protected Renderer wrapped;
public ExtValRendererProxy(Renderer renderer)
{
@@ -64,6 +65,13 @@
entry.setDecodeCalled(true);
wrapped.decode(facesContext, uiComponent);
}
+ else
+ {
+ if(logger.isTraceEnabled())
+ {
+ logger.trace("double call of method 'decode' filtered");
+ }
+ }
}
@Override
@@ -77,6 +85,13 @@
entry.setEncodeBeginCalled(true);
wrapped.encodeBegin(facesContext, uiComponent);
}
+ else
+ {
+ if(logger.isTraceEnabled())
+ {
+ logger.trace("double call of method 'encodeBegin' filtered");
+ }
+ }
}
@Override
@@ -90,6 +105,13 @@
entry.setEncodeChildrenCalled(true);
wrapped.encodeChildren(facesContext, uiComponent);
}
+ else
+ {
+ if(logger.isTraceEnabled())
+ {
+ logger.trace("double call of method 'encodeChildren' filtered");
+ }
+ }
}
@Override
@@ -103,6 +125,13 @@
entry.setEncodeEndCalled(true);
wrapped.encodeEnd(facesContext, uiComponent);
}
+ else
+ {
+ if(logger.isTraceEnabled())
+ {
+ logger.trace("double call of method 'encodeEnd' filtered");
+ }
+ }
}
@Override
@@ -127,18 +156,32 @@
{
entry.setConvertedValue(wrapped.getConvertedValue(facesContext, uiComponent, o));
}
+ else
+ {
+ if(logger.isTraceEnabled())
+ {
+ logger.trace("double call of method 'getConvertedValue' filtered");
+ }
+ }
return entry.getConvertedValue();
}
private RendererProxyEntry getOrInitEntry(FacesContext facesContext, UIComponent uiComponent)
{
- String clientId = uiComponent.getClientId(facesContext);
+ String key = uiComponent.getClientId(facesContext);
+
+ key += getOptionalKey(facesContext, uiComponent);
- if (!getOrInitComponentProxyMapping().containsKey(clientId))
+ if (!getOrInitComponentProxyMapping().containsKey(key))
{
- getOrInitComponentProxyMapping().put(clientId, new RendererProxyEntry());
+ getOrInitComponentProxyMapping().put(key, new RendererProxyEntry());
}
- return getOrInitComponentProxyMapping().get(clientId);
+ return getOrInitComponentProxyMapping().get(key);
+ }
+
+ protected String getOptionalKey(FacesContext facesContext, UIComponent uiComponent)
+ {
+ return "";
}
private static final String PROXY_STORAGE_NAME = ExtValRendererProxy.class.getName() + ":STORAGE";
Modified: myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRendererWrapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRendererWrapper.java?rev=719377&r1=719376&r2=719377&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRendererWrapper.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRendererWrapper.java Thu Nov 20 13:19:19 2008
@@ -25,6 +25,7 @@
import org.apache.myfaces.extensions.validator.core.renderkit.exception.SkipBeforeInterceptorsException;
import org.apache.myfaces.extensions.validator.core.renderkit.exception.SkipAfterInterceptorsException;
import org.apache.myfaces.extensions.validator.core.renderkit.exception.SkipRendererDelegationException;
+import org.apache.myfaces.extensions.validator.util.ClassUtils;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
@@ -33,6 +34,7 @@
import javax.faces.convert.ConverterException;
import javax.faces.render.Renderer;
import java.io.IOException;
+import java.lang.reflect.Constructor;
/**
* Default approach to avoid proxies for converters and the adapter fallback.
@@ -57,7 +59,47 @@
public ExtValRendererWrapper(Renderer renderer)
{
- this.wrapped = new ExtValRendererProxy(renderer);
+ String proxyClassName = (String)ExtValContext.getContext().getGlobalProperty(ExtValRendererProxy.KEY);
+
+ if(proxyClassName == null)
+ {
+ if(logger.isTraceEnabled())
+ {
+ logger.trace("no extval renderer proxy configured");
+ }
+
+ this.wrapped = new ExtValLazyRendererProxy(renderer);
+ return;
+ }
+
+ Class targetClass = ClassUtils.tryToLoadClassForName(proxyClassName);
+
+ if(targetClass == null)
+ {
+ if(logger.isTraceEnabled())
+ {
+ logger.trace("no extval renderer proxy configured");
+ }
+
+ this.wrapped = new ExtValLazyRendererProxy(renderer);
+ return;
+ }
+
+ Class[] argClasses = new Class[1];
+ argClasses[0] = Renderer.class;
+
+ try
+ {
+ Constructor constructor = targetClass.getConstructor(argClasses);
+ this.wrapped = (Renderer)constructor.newInstance(renderer);
+ }
+ catch (Throwable e)
+ {
+ if(logger.isWarnEnabled())
+ {
+ logger.warn("no extval renderer proxy created for " + renderer.getClass().getName());
+ }
+ }
if(logger.isTraceEnabled())
{
Modified: myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ExtValStartupListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ExtValStartupListener.java?rev=719377&r1=719376&r2=719377&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ExtValStartupListener.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ExtValStartupListener.java Thu Nov 20 13:19:19 2008
@@ -23,6 +23,7 @@
import org.apache.myfaces.extensions.validator.core.interceptor.ValidationInterceptor;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
import org.apache.myfaces.extensions.validator.core.CustomInfo;
+import org.apache.myfaces.extensions.validator.core.renderkit.ExtValRendererProxy;
import org.apache.myfaces.extensions.validator.util.ClassUtils;
import org.apache.myfaces.extensions.validator.ExtValInformation;
@@ -52,6 +53,9 @@
AbstractStartupListener customStartupListener =
(AbstractStartupListener)ClassUtils.tryToInstantiateClassForName(customStartupListenerName);
+ ExtValContext.getContext()
+ .addGlobalProperty(ExtValRendererProxy.KEY, ExtValRendererProxy.class.getName(), false);
+
if(customStartupListener != null)
{
if(logger.isInfoEnabled())
@@ -67,4 +71,4 @@
}
}
}
-}
\ No newline at end of file
+}