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 2010/09/09 14:06:11 UTC
svn commit: r995392 - in /myfaces/extensions/cdi/trunk:
jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/message/
jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/
j...
Author: gpetracek
Date: Thu Sep 9 12:06:11 2010
New Revision: 995392
URL: http://svn.apache.org/viewvc?rev=995392&view=rev
Log:
EXTCDI-21 first draft to allow alternative default value for restricted or unresolved values
Added:
myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/DefaultArgumentFilter.java
myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/spi/ArgumentFilter.java
Modified:
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/message/FacesMessageInterpolator.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/message/JsfAwareMessageContextProducer.java
myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/ELAwareMessageInterpolator.java
myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/NumberedArgumentAwareMessageInterpolator.java
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/message/FacesMessageInterpolator.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/message/FacesMessageInterpolator.java?rev=995392&r1=995391&r2=995392&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/message/FacesMessageInterpolator.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/message/FacesMessageInterpolator.java Thu Sep 9 12:06:11 2010
@@ -24,6 +24,7 @@ import org.apache.myfaces.extensions.cdi
import org.apache.myfaces.extensions.cdi.message.impl.ELAwareMessageInterpolator;
import org.apache.myfaces.extensions.cdi.message.impl.NumberedArgumentAwareMessageInterpolator;
import org.apache.myfaces.extensions.cdi.message.impl.spi.ELProvider;
+import org.apache.myfaces.extensions.cdi.message.impl.spi.ArgumentFilter;
import java.io.Serializable;
@@ -36,12 +37,12 @@ class FacesMessageInterpolator implement
private MessageInterpolator messageInterpolator;
- public FacesMessageInterpolator(ELProvider elProvider)
+ public FacesMessageInterpolator(ELProvider elProvider, ArgumentFilter argumentFilter)
{
if(elProvider != null)
{
this.messageInterpolator = new CompositeMessageInterpolator(
- new ELAwareMessageInterpolator(elProvider),
+ new ELAwareMessageInterpolator(elProvider, argumentFilter),
new NumberedArgumentAwareMessageInterpolator());
}
else
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/message/JsfAwareMessageContextProducer.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/message/JsfAwareMessageContextProducer.java?rev=995392&r1=995391&r2=995392&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/message/JsfAwareMessageContextProducer.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/message/JsfAwareMessageContextProducer.java Thu Sep 9 12:06:11 2010
@@ -24,6 +24,7 @@ import org.apache.myfaces.extensions.cdi
import org.apache.myfaces.extensions.cdi.message.api.MessageFactory;
import org.apache.myfaces.extensions.cdi.message.impl.DefaultMessageContext;
import org.apache.myfaces.extensions.cdi.message.impl.spi.ELProvider;
+import org.apache.myfaces.extensions.cdi.message.impl.spi.ArgumentFilter;
import javax.enterprise.context.Dependent;
import javax.enterprise.inject.Instance;
@@ -43,10 +44,12 @@ public class JsfAwareMessageContextProdu
@Named("messageContext")
public MessageContext createContext(MessageContext defaultMessageContext,
Instance<MessageFactory> messageFactoryInstance,
- Instance<ELProvider> elProviderInstance)
+ Instance<ELProvider> elProviderInstance,
+ Instance<ArgumentFilter> argumentFilterInstance)
{
MessageFactory messageFactory = null;
ELProvider elProvider = null;
+ ArgumentFilter argumentFilter = null;
if (!messageFactoryInstance.isUnsatisfied())
{
@@ -58,12 +61,17 @@ public class JsfAwareMessageContextProdu
elProvider = elProviderInstance.get();
}
+ if (!argumentFilterInstance.isUnsatisfied())
+ {
+ argumentFilter = argumentFilterInstance.get();
+ }
+
MessageContext result = defaultMessageContext.config()
.use()
- .localeResolver(createJsfAwareLocaleResolver())
- .messageResolver(new JsfAwareApplicationMessagesMessageResolver())
- .messageInterpolator(new FacesMessageInterpolator(elProvider))
- .addMessageHandler(new JsfAwareMessageHandler())
+ .localeResolver(createJsfAwareLocaleResolver())
+ .messageResolver(new JsfAwareApplicationMessagesMessageResolver())
+ .messageInterpolator(new FacesMessageInterpolator(elProvider, argumentFilter))
+ .addMessageHandler(new JsfAwareMessageHandler())
.create();
if (messageFactory != null)
Added: myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/DefaultArgumentFilter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/DefaultArgumentFilter.java?rev=995392&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/DefaultArgumentFilter.java (added)
+++ myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/DefaultArgumentFilter.java Thu Sep 9 12:06:11 2010
@@ -0,0 +1,42 @@
+/*
+ * 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.cdi.message.impl;
+
+import org.apache.myfaces.extensions.cdi.message.impl.spi.ArgumentFilter;
+
+/**
+ * @author Gerhard Petracek
+ */
+public class DefaultArgumentFilter implements ArgumentFilter
+{
+ public boolean isArgumentAllowed(String expression, Object value)
+ {
+ return value != null && !isUnresolvedArgument(expression, value);
+ }
+
+ public String getDefaultValue(String expression)
+ {
+ return '{' + expression + '}';
+ }
+
+ private boolean isUnresolvedArgument(String expression, Object value)
+ {
+ return value instanceof Long && expression.equals(value.toString());
+ }
+}
Modified: myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/ELAwareMessageInterpolator.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/ELAwareMessageInterpolator.java?rev=995392&r1=995391&r2=995392&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/ELAwareMessageInterpolator.java (original)
+++ myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/ELAwareMessageInterpolator.java Thu Sep 9 12:06:11 2010
@@ -22,6 +22,7 @@ import org.apache.myfaces.extensions.cdi
import org.apache.myfaces.extensions.cdi.message.api.MessageContext;
import org.apache.myfaces.extensions.cdi.message.impl.spi.ELProvider;
import org.apache.myfaces.extensions.cdi.message.impl.spi.SimpleELContext;
+import org.apache.myfaces.extensions.cdi.message.impl.spi.ArgumentFilter;
import javax.el.ExpressionFactory;
import javax.el.ValueExpression;
@@ -42,10 +43,25 @@ public class ELAwareMessageInterpolator
private static final Pattern MESSAGE_ARGS_PATTERN = Pattern.compile("\\{([^\\}]+?)\\}");
private ELProvider elProvider;
+ private ArgumentFilter argumentFilter;
public ELAwareMessageInterpolator(ELProvider elProvider)
{
+ this(elProvider, null);
+ }
+
+ public ELAwareMessageInterpolator(ELProvider elProvider, ArgumentFilter argumentFilter)
+ {
this.elProvider = elProvider;
+
+ if(argumentFilter != null)
+ {
+ this.argumentFilter = argumentFilter;
+ }
+ else
+ {
+ this.argumentFilter = new DefaultArgumentFilter();
+ }
}
public String interpolate(MessageContext messageContext, String messageDescriptor, Serializable... arguments)
@@ -76,8 +92,8 @@ public class ELAwareMessageInterpolator
//TODO add warning for unused arguments,...
private synchronized String interpolateNamedArguments(MessageContext messageContext,
- String messageDescriptor,
- List<NamedArgument> namedArguments)
+ String messageDescriptor,
+ List<NamedArgument> namedArguments)
{
ExpressionFactory factory = this.elProvider.createExpressionFactory();
SimpleELContext elContext = this.elProvider.createELContext(this.elProvider.createELResolver());
@@ -101,14 +117,13 @@ public class ELAwareMessageInterpolator
Object value = valueExpression.getValue(elContext);
- if (value != null && !isUnresolvedArgument(expression, value))
+ if(this.argumentFilter.isArgumentAllowed(expression, value))
{
resolvedArgumentValue = formatAsString(messageContext, value).toString();
}
else
{
- resolvedArgumentValue = '{' + expression + '}';
- //resolvedArgumentValue = ""; //TODO can we use it as alternative?
+ resolvedArgumentValue = this.argumentFilter.getDefaultValue(expression);
}
matcher.appendReplacement(buffer, resolvedArgumentValue);
@@ -117,9 +132,4 @@ public class ELAwareMessageInterpolator
return buffer.toString();
}
-
- private boolean isUnresolvedArgument(String expression, Object value)
- {
- return value instanceof Long && expression.equals(value.toString());
- }
}
\ No newline at end of file
Modified: myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/NumberedArgumentAwareMessageInterpolator.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/NumberedArgumentAwareMessageInterpolator.java?rev=995392&r1=995391&r2=995392&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/NumberedArgumentAwareMessageInterpolator.java (original)
+++ myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/NumberedArgumentAwareMessageInterpolator.java Thu Sep 9 12:06:11 2010
@@ -27,6 +27,8 @@ import java.util.ArrayList;
import java.util.List;
/**
+ * TODO add ArgumentFilter
+ *
* @author Manfred Geiler
*/
public class NumberedArgumentAwareMessageInterpolator extends AbstractFormatterAwareMessageInterpolator
Added: myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/spi/ArgumentFilter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/spi/ArgumentFilter.java?rev=995392&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/spi/ArgumentFilter.java (added)
+++ myfaces/extensions/cdi/trunk/jse-modules/message-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/message/impl/spi/ArgumentFilter.java Thu Sep 9 12:06:11 2010
@@ -0,0 +1,45 @@
+/*
+ * 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.cdi.message.impl.spi;
+
+import java.io.Serializable;
+
+/**
+ * @author Gerhard Petracek
+ */
+public interface ArgumentFilter extends Serializable
+{
+ /**
+ * Allows to filter resolved argument values e.g. based on custom rules.
+ * Return false to trigger {@link #getDefaultValue(String)}
+ *
+ * @param expressionBody the body of the expression used in the message
+ * @param value the resolved value
+ * @return true if the given value should be used - false otherwise
+ */
+ boolean isArgumentAllowed(String expressionBody, Object value);
+
+ /**
+ * Allows to customize the default value e.g. for restricted or unresolved message arguments
+ *
+ * @param expressionBody the body of the expression used in the message
+ * @return the default value for the given expression
+ */
+ String getDefaultValue(String expressionBody);
+}