You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by st...@apache.org on 2012/06/27 19:54:53 UTC

git commit: DELTASPIKE-202 improve MessageBuilder configuration

Updated Branches:
  refs/heads/master f468e4532 -> dfb062768


DELTASPIKE-202 improve MessageBuilder configuration

previously we did not always pickup the correct
default LocaleResolver and MessageInterpolator.


Project: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/commit/dfb06276
Tree: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/tree/dfb06276
Diff: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/diff/dfb06276

Branch: refs/heads/master
Commit: dfb062768a851275c8d346fa55ab85a360731ba9
Parents: f468e45
Author: Mark Struberg <st...@apache.org>
Authored: Wed Jun 27 19:51:56 2012 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Wed Jun 27 19:51:56 2012 +0200

----------------------------------------------------------------------
 .../core/impl/message/DefaultMessageBuilder.java   |    2 +-
 .../core/impl/message/MessageContextProducer.java  |   25 ++--
 .../test/core/api/message/MessageContextTest.java  |    4 +-
 .../test/core/api/message/MessageTest.java         |    6 +-
 .../core/api/message/TestMessageInterpolator.java  |    3 +-
 .../locale/ConfigurableLocaleMessageTest.java      |  126 +++++++++++++++
 .../message/locale/ConfigurableLocaleResolver.java |   59 +++++++
 .../core/api/message/locale/MessageWithLocale.java |   45 +++++
 8 files changed, 251 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/dfb06276/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/DefaultMessageBuilder.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/DefaultMessageBuilder.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/DefaultMessageBuilder.java
index ec4b30d..6bc2a45 100644
--- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/DefaultMessageBuilder.java
+++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/DefaultMessageBuilder.java
@@ -227,7 +227,7 @@ class DefaultMessageBuilder implements MessageContext.MessageBuilder
     private String interpolateMessage(MessageInterpolator messageInterpolator,
                                       String messageTemplate, Object... arguments)
     {
-        Locale l = locale != null ? locale : Locale.getDefault();
+        Locale l = messageContext.getLocale();
         return messageInterpolator.interpolate(getEscapedTemplate(messageTemplate), arguments, l);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/dfb06276/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/MessageContextProducer.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/MessageContextProducer.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/MessageContextProducer.java
index b45398f..8a3e04a 100644
--- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/MessageContextProducer.java
+++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/MessageContextProducer.java
@@ -18,6 +18,7 @@
  */
 package org.apache.deltaspike.core.impl.message;
 
+import org.apache.deltaspike.core.api.config.annotation.DefaultConfiguration;
 import org.apache.deltaspike.core.api.message.LocaleResolver;
 import org.apache.deltaspike.core.api.message.MessageContext;
 import org.apache.deltaspike.core.api.message.MessageInterpolator;
@@ -28,17 +29,24 @@ import javax.enterprise.context.Dependent;
 import javax.enterprise.inject.Instance;
 import javax.enterprise.inject.Produces;
 import javax.enterprise.inject.Typed;
+import javax.inject.Inject;
 
 @ApplicationScoped
 @SuppressWarnings("UnusedDeclaration")
 public class MessageContextProducer
 {
+    @Inject
+    @DefaultConfiguration
+    private LocaleResolver localeResolver;
+
+    @Inject
+    @DefaultConfiguration
+    private MessageInterpolator messageInterpolator;
+
     @Produces
     @Typed(MessageContext.class)
     @Dependent
-    protected MessageContext createDefaultMessageContext(Instance<MessageResolver> customMessageResolver,
-                                                         Instance<MessageInterpolator> customMessageInterpolator,
-                                                         Instance<LocaleResolver> customLocalResolver)
+    protected MessageContext createDefaultMessageContext(Instance<MessageResolver> customMessageResolver)
     {
         MessageContext.Config messageContextConfig = new DefaultMessageContext().config();
 
@@ -47,15 +55,8 @@ public class MessageContextProducer
             messageContextConfig.change().messageResolver(customMessageResolver.get());
         }
 
-        if (!customMessageInterpolator.isUnsatisfied())
-        {
-            messageContextConfig.change().messageInterpolator(customMessageInterpolator.get());
-        }
-
-        if (!customLocalResolver.isUnsatisfied())
-        {
-            messageContextConfig.change().localeResolver(customLocalResolver.get());
-        }
+        messageContextConfig.change().messageInterpolator(messageInterpolator);
+        messageContextConfig.change().localeResolver(localeResolver);
 
         return messageContextConfig.use().create();
     }

http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/dfb06276/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/MessageContextTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/MessageContextTest.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/MessageContextTest.java
index 6e85aa1..f6352ac 100644
--- a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/MessageContextTest.java
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/MessageContextTest.java
@@ -99,8 +99,8 @@ public class MessageContextTest
         LocaleResolver localeResolver = new TestGermanLocaleResolver();
         String messageText = messageContext.config()
                 .use()
-                    .localeResolver(localeResolver)
-                    .messageResolver(new TestMessageResolver(localeResolver))
+                .localeResolver(localeResolver)
+                .messageResolver(new TestMessageResolver(localeResolver))
                 .create().message().text("{hello}").toText();
 
         assertEquals("Test Nachricht", messageText);

http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/dfb06276/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/MessageTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/MessageTest.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/MessageTest.java
index 85777b6..1ce1a0e 100644
--- a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/MessageTest.java
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/MessageTest.java
@@ -70,18 +70,18 @@ public class MessageTest
     @Test
     public void testMessageBundleInjection(Jay jay)
     {
-        assertEquals("Spotted 8 jays", jay.getMessage());
+        assertEquals(TestMessageInterpolator.SPECIALFORMATTED + "Spotted 8 jays", jay.getMessage());
     }
 
     @Test
     public void testInternationalizedMessage()
     {
-        assertEquals("Welcome to DeltaSpike", messages.welcomeToDeltaSpike());
+        assertEquals(TestMessageInterpolator.SPECIALFORMATTED + "Welcome to DeltaSpike", messages.welcomeToDeltaSpike());
     }
 
     @Test
     public void testInternationalizedParametrizedMessage()
     {
-        assertEquals("Welcome to Apache DeltaSpike", messages.welcomeTo("Apache DeltaSpike"));
+        assertEquals(TestMessageInterpolator.SPECIALFORMATTED + "Welcome to Apache DeltaSpike", messages.welcomeTo("Apache DeltaSpike"));
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/dfb06276/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/TestMessageInterpolator.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/TestMessageInterpolator.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/TestMessageInterpolator.java
index bee9034..8fbd41f 100644
--- a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/TestMessageInterpolator.java
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/TestMessageInterpolator.java
@@ -27,10 +27,11 @@ import java.util.Locale;
 public class TestMessageInterpolator implements MessageInterpolator
 {
     private static final long serialVersionUID = 5636914399691923602L;
+    public static final String SPECIALFORMATTED = "specialformatted ";
 
     @Override
     public String interpolate(String messageTemplate, Object[] arguments, Locale locale)
     {
-        return String.format(locale, messageTemplate, arguments);
+        return SPECIALFORMATTED + String.format(locale, messageTemplate, arguments);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/dfb06276/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/locale/ConfigurableLocaleMessageTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/locale/ConfigurableLocaleMessageTest.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/locale/ConfigurableLocaleMessageTest.java
new file mode 100644
index 0000000..cd23b39
--- /dev/null
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/locale/ConfigurableLocaleMessageTest.java
@@ -0,0 +1,126 @@
+/*
+ * 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.deltaspike.test.core.api.message.locale;
+
+import javax.enterprise.inject.spi.Extension;
+import javax.inject.Inject;
+import java.util.Date;
+import java.util.Locale;
+
+import org.apache.deltaspike.core.api.config.annotation.DefaultConfiguration;
+import org.apache.deltaspike.core.api.message.MessageContext;
+import org.apache.deltaspike.core.impl.message.MessageBundleExtension;
+import org.apache.deltaspike.test.category.SeCategory;
+import org.apache.deltaspike.test.util.ArchiveUtils;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests for {@link org.apache.deltaspike.core.api.message.annotation.MessageTemplate}
+ */
+@RunWith(Arquillian.class)
+@Category(SeCategory.class)
+public class ConfigurableLocaleMessageTest
+{
+    private static final String BEANS_XML_CONTENT =
+            "<beans><alternatives><class>" +
+            ConfigurableLocaleResolver.class.getName() +
+            "</class></alternatives></beans>";
+
+    @Inject
+    private MessageWithLocale localizedMessage;
+
+    @Inject
+    @DefaultConfiguration
+    private ConfigurableLocaleResolver localeResolver;
+
+    @Inject
+    private MessageContext messageContext;
+
+
+    /**
+     * X TODO creating a WebArchive is only a workaround because JavaArchive
+     * cannot contain other archives.
+     */
+    @Deployment
+    public static WebArchive deploy()
+    {
+        JavaArchive testJar = ShrinkWrap
+                .create(JavaArchive.class, "simpleMessageTest.jar")
+                .addPackage(ConfigurableLocaleMessageTest.class.getPackage())
+                .addAsManifestResource(new StringAsset(BEANS_XML_CONTENT), "beans.xml");
+
+        return ShrinkWrap
+                .create(WebArchive.class, "simpleMessageTest.war")
+                .addAsLibraries(ArchiveUtils.getDeltaSpikeCoreArchive())
+                .addAsLibraries(testJar)
+                .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")
+                .addAsServiceProvider(Extension.class,
+                        MessageBundleExtension.class);
+    }
+
+    @Test
+    public void testSimpleMessage()
+    {
+        assertEquals("Welcome to DeltaSpike", localizedMessage.welcomeToDeltaSpike());
+        assertEquals("Welcome to DeltaSpike", localizedMessage.welcomeWithStringVariable("DeltaSpike"));
+    }
+
+    /**
+     * This test checks if the {@link org.apache.deltaspike.core.api.message.LocaleResolver}
+     * gets properly invoked.
+     */
+    @Test
+    public void testDefaultLocaleInMessage()
+    {
+        internalTestLocales(Locale.GERMANY);
+        internalTestLocales(Locale.US);
+        internalTestLocales(Locale.FRANCE);
+    }
+
+    private void internalTestLocales(Locale locale)
+    {
+
+        localeResolver.setLocale(locale);
+
+        float f = 123.45f;
+        String expectedResult = "Welcome " + String.format(locale, "%f", f);
+        String result = localizedMessage.welcomeWithFloatVariable(f);
+        assertEquals(expectedResult, result);
+
+        Date dt = new Date();
+        expectedResult = "Welcome " + String.format(locale, "%1$tB %1$te,%1$tY", dt);
+        result = localizedMessage.welcomeWithDateVariable(dt);
+        assertEquals(expectedResult, result);
+
+        result = messageContext.message().text("Welcome at %tB").argument(dt).toText();
+        assertEquals("Welcome at " + String.format(locale, "%1$tB", dt), result);
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/dfb06276/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/locale/ConfigurableLocaleResolver.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/locale/ConfigurableLocaleResolver.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/locale/ConfigurableLocaleResolver.java
new file mode 100644
index 0000000..faf4e32
--- /dev/null
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/locale/ConfigurableLocaleResolver.java
@@ -0,0 +1,59 @@
+/*
+ * 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.deltaspike.test.core.api.message.locale;
+
+import javax.annotation.PostConstruct;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Alternative;
+import java.util.Locale;
+
+import org.apache.deltaspike.core.api.config.annotation.DefaultConfiguration;
+import org.apache.deltaspike.core.api.message.LocaleResolver;
+
+/**
+ * This alternative LocaleResolver replaces the DefaultLocaleResolver.
+ * It allows us to set the Locale to different ones to test
+ * variations. This is needed to avoid having test which by accident
+ * only run in a single timezone/locale.
+ */
+@ApplicationScoped
+@DefaultConfiguration
+@Alternative
+public class ConfigurableLocaleResolver implements LocaleResolver
+{
+    private static final long serialVersionUID = 1927000487639667775L;
+    private Locale locale;
+
+    @PostConstruct
+    public void init()
+    {
+        locale = Locale.getDefault();
+    }
+
+    @Override
+    public Locale getLocale()
+    {
+        return locale;
+    }
+
+    public void setLocale(Locale locale)
+    {
+        this.locale = locale;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/dfb06276/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/locale/MessageWithLocale.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/locale/MessageWithLocale.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/locale/MessageWithLocale.java
new file mode 100644
index 0000000..5ab2360
--- /dev/null
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/locale/MessageWithLocale.java
@@ -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.deltaspike.test.core.api.message.locale;
+
+import java.util.Date;
+
+import org.apache.deltaspike.core.api.message.Message;
+import org.apache.deltaspike.core.api.message.MessageContext;
+import org.apache.deltaspike.core.api.message.annotation.MessageBundle;
+import org.apache.deltaspike.core.api.message.annotation.MessageTemplate;
+
+@MessageBundle
+public interface MessageWithLocale
+{
+    @MessageTemplate("Welcome to DeltaSpike")
+    String welcomeToDeltaSpike();
+
+    @MessageTemplate("Welcome to %s")
+    Message welcomeTo(MessageContext messageContext, String name);
+
+    @MessageTemplate("Welcome to %s")
+    String welcomeWithStringVariable(String name);
+
+    @MessageTemplate("Welcome %f")
+    String welcomeWithFloatVariable(Float floatValue);
+
+    @MessageTemplate("Welcome %1$tB %1$te,%1$tY")
+    String welcomeWithDateVariable(Date dateValue);
+}