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);
+}