You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2010/05/12 00:50:37 UTC
svn commit: r943321 - in /tapestry/tapestry5/trunk/tapestry-core/src:
main/java/org/apache/tapestry5/internal/services/
main/java/org/apache/tapestry5/services/
test/java/org/apache/tapestry5/internal/services/
Author: hlship
Date: Tue May 11 22:50:36 2010
New Revision: 943321
URL: http://svn.apache.org/viewvc?rev=943321&view=rev
Log:
TAP5-424: Phase out ValidationMessagesSource by having Global application message catalog override any catalogs contributed to ValidationMessagesSource
Added:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DelegatingMessagesImpl.java (with props)
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ValidationMessagesSourceImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ValidationMessagesSource.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ValidationMessagesSourceImplTest.java
Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DelegatingMessagesImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DelegatingMessagesImpl.java?rev=943321&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DelegatingMessagesImpl.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DelegatingMessagesImpl.java Tue May 11 22:50:36 2010
@@ -0,0 +1,61 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed 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.tapestry5.internal.services;
+
+import org.apache.tapestry5.ioc.MessageFormatter;
+import org.apache.tapestry5.ioc.Messages;
+
+/**
+ * Implementation of {@link Messages} that wraps two other Messages instances: a primary and a delegate.
+ * The primary handles any keys it contains; method invocations that reference keys not contained by
+ * the primary are passed on to the delegate.
+ *
+ * @since 5.2.0
+ */
+public class DelegatingMessagesImpl implements Messages
+{
+ private final Messages primary, delegate;
+
+ public DelegatingMessagesImpl(Messages primary, Messages delegate)
+ {
+ this.primary = primary;
+ this.delegate = delegate;
+ }
+
+ public boolean contains(String key)
+ {
+ return primary.contains(key) || delegate.contains(key);
+ }
+
+ private Messages select(String key)
+ {
+ return primary.contains(key) ? primary : delegate;
+ }
+
+ public String format(String key, Object... args)
+ {
+ return select(key).format(key, args);
+ }
+
+ public String get(String key)
+ {
+ return select(key).get(key);
+ }
+
+ public MessageFormatter getFormatter(String key)
+ {
+ return select(key).getFormatter(key);
+ }
+}
Propchange: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DelegatingMessagesImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ValidationMessagesSourceImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ValidationMessagesSourceImpl.java?rev=943321&r1=943320&r2=943321&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ValidationMessagesSourceImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ValidationMessagesSourceImpl.java Tue May 11 22:50:36 2010
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2010 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -22,6 +22,7 @@ import org.apache.tapestry5.ioc.internal
import org.apache.tapestry5.ioc.services.ClasspathURLConverter;
import org.apache.tapestry5.services.UpdateListener;
import org.apache.tapestry5.services.ValidationMessagesSource;
+import org.apache.tapestry5.services.messages.ComponentMessagesSource;
import org.apache.tapestry5.services.messages.PropertiesFileParser;
import java.util.List;
@@ -30,6 +31,8 @@ import java.util.Map;
public class ValidationMessagesSourceImpl implements ValidationMessagesSource, UpdateListener
{
+ private final ComponentMessagesSource componentMessagesSource;
+
private final MessagesSource messagesSource;
private final MessagesBundle bundle;
@@ -110,15 +113,16 @@ public class ValidationMessagesSourceImp
}
public ValidationMessagesSourceImpl(List<String> bundles, Resource classpathRoot, PropertiesFileParser parser,
- ClasspathURLConverter classpathURLConverter)
+ ComponentMessagesSource componentMessagesSource, ClasspathURLConverter classpathURLConverter)
{
- this(bundles, classpathRoot, parser, new URLChangeTracker(classpathURLConverter));
+ this(bundles, classpathRoot, parser, componentMessagesSource, new URLChangeTracker(classpathURLConverter));
}
ValidationMessagesSourceImpl(List<String> bundles, Resource classpathRoot, PropertiesFileParser parser,
- URLChangeTracker tracker)
+ ComponentMessagesSource componentMessagesSource, URLChangeTracker tracker)
{
messagesSource = new MessagesSourceImpl(tracker, parser);
+ this.componentMessagesSource = componentMessagesSource;
MessagesBundle parent = null;
@@ -138,7 +142,10 @@ public class ValidationMessagesSourceImp
if (result == null)
{
- result = new ValidationMessages(locale);
+ Messages appCatalog = componentMessagesSource.getApplicationCatalog(locale);
+ Messages validation = new ValidationMessages(locale);
+ result = new DelegatingMessagesImpl(appCatalog, validation);
+
cache.put(locale, result);
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=943321&r1=943320&r2=943321&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java Tue May 11 22:50:36 2010
@@ -1327,10 +1327,12 @@ public final class TapestryModule
PropertiesFileParser parser,
+ ComponentMessagesSource componentMessagesSource,
+
ClasspathURLConverter classpathURLConverter)
{
ValidationMessagesSourceImpl service = new ValidationMessagesSourceImpl(configuration, classpathAssetFactory
- .getRootResource(), parser, classpathURLConverter);
+ .getRootResource(), parser, componentMessagesSource, classpathURLConverter);
updateListenerHub.addUpdateListener(service);
return service;
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ValidationMessagesSource.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ValidationMessagesSource.java?rev=943321&r1=943320&r2=943321&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ValidationMessagesSource.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ValidationMessagesSource.java Tue May 11 22:50:36 2010
@@ -1,10 +1,10 @@
-// Copyright 2006, 2008 The Apache Software Foundation
+// Copyright 2006, 2008, 2010 The Apache Software Foundation
//
// Licensed 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
+// 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,
@@ -16,6 +16,7 @@ package org.apache.tapestry5.services;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
+import org.apache.tapestry5.services.messages.ComponentMessagesSource;
import java.util.Locale;
@@ -23,6 +24,13 @@ import java.util.Locale;
* Source for validation messages, within a particular locale.
* <p/>
* The service's configuration are paths, within the classpath, to bundles to load as part of the validation messages.
+ * <p>
+ * Starting with Tapestry 5.2, the returned Messages reflects all the contributed paths, with the
+ * {@linkplain ComponentMessagesSource#getApplicationCatalog(java.util.Locale) global application catalog} ordered to
+ * <em>override</em> any of the messages supplied by a contributed resource. This service will be elminated entirely in
+ * Tapestry 5.3.
+ *
+ * @deprecated Contribute to the {@link ComponentMessagesSource} service instead
*/
@UsesOrderedConfiguration(String.class)
public interface ValidationMessagesSource
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ValidationMessagesSourceImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ValidationMessagesSourceImplTest.java?rev=943321&r1=943320&r2=943321&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ValidationMessagesSourceImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ValidationMessagesSourceImplTest.java Tue May 11 22:50:36 2010
@@ -14,20 +14,23 @@
package org.apache.tapestry5.internal.services;
+import java.util.Arrays;
+import java.util.Locale;
+
import org.apache.tapestry5.internal.services.messages.PropertiesFileParserImpl;
import org.apache.tapestry5.ioc.MessageFormatter;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.Resource;
import org.apache.tapestry5.ioc.internal.services.ClasspathURLConverterImpl;
import org.apache.tapestry5.ioc.internal.util.ClasspathResource;
+import org.apache.tapestry5.model.ComponentModel;
+import org.apache.tapestry5.services.InvalidationEventHub;
import org.apache.tapestry5.services.ValidationMessagesSource;
+import org.apache.tapestry5.services.messages.ComponentMessagesSource;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
-import java.util.Arrays;
-import java.util.Locale;
-
public class ValidationMessagesSourceImplTest extends Assert
{
private ValidationMessagesSource source;
@@ -35,10 +38,54 @@ public class ValidationMessagesSourceImp
@BeforeClass
public void setup()
{
+ final Messages mockMessages = new Messages()
+ {
+
+ public boolean contains(String key)
+ {
+ return key.equalsIgnoreCase("braniac");
+ }
+
+ public String format(String key, Object... args)
+ {
+ return null;
+ }
+
+ public String get(String key)
+ {
+ return "Braniac";
+ }
+
+ public MessageFormatter getFormatter(String key)
+ {
+ return null;
+ }
+
+ };
+
+ ComponentMessagesSource mockMessagesSource = new ComponentMessagesSource()
+ {
+
+ public Messages getMessages(ComponentModel componentModel, Locale locale)
+ {
+ return null;
+ }
+
+ public InvalidationEventHub getInvalidationEventHub()
+ {
+ return null;
+ }
+
+ public Messages getApplicationCatalog(Locale locale)
+ {
+ return mockMessages;
+ }
+ };
+
Resource rootResource = new ClasspathResource("/");
source = new ValidationMessagesSourceImpl(Arrays.asList("org/apache/tapestry5/internal/ValidationMessages",
"org/apache/tapestry5/internal/ValidationTestMessages"), rootResource, new PropertiesFileParserImpl(),
- new ClasspathURLConverterImpl());
+ mockMessagesSource, new ClasspathURLConverterImpl());
}
@Test
@@ -49,6 +96,17 @@ public class ValidationMessagesSourceImp
assertEquals(messages.format("required", "My Field"), "You must provide a value for My Field.");
}
+ /** TAP5-424 */
+ @Test
+ public void application_catalog_override()
+ {
+ Messages messages = source.getValidationMessages(Locale.ENGLISH);
+
+ assertTrue(messages.contains("braniac"));
+
+ assertEquals(messages.get("braniac"), "Braniac");
+ }
+
@Test
public void overriden_message()
{