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 2011/08/08 09:49:11 UTC
svn commit: r1154862 - in /myfaces/extensions/cdi/trunk/core:
api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/
impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/resource/
impl/src/test/java/org/apache/myfaces/extensio...
Author: gpetracek
Date: Mon Aug 8 07:49:10 2011
New Revision: 1154862
URL: http://svn.apache.org/viewvc?rev=1154862&view=rev
Log:
EXTCDI-204 and EXTCDI-211 injectable resource-bundle and resource-bundle-value
Added:
myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/BundleValue.java
- copied, changed from r1154790, myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/ResourceBundleKey.java
Removed:
myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/ResourceBundleKey.java
Modified:
myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/resource/DefaultResourceBundle.java
myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/resource/ResourceBundleTest.java
myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/resource/Testbundle.java
myfaces/extensions/cdi/trunk/core/impl/src/test/resources/org/apache/myfaces/extensions/cdi/core/test/impl/resource/testbundle.properties
Copied: myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/BundleValue.java (from r1154790, myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/ResourceBundleKey.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/BundleValue.java?p2=myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/BundleValue.java&p1=myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/ResourceBundleKey.java&r1=1154790&r2=1154862&rev=1154862&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/ResourceBundleKey.java (original)
+++ myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/BundleValue.java Mon Aug 8 07:49:10 2011
@@ -24,11 +24,13 @@ import org.apache.myfaces.extensions.cdi
import java.lang.annotation.Annotation;
/**
- * Base class which has to be extended if a key should be injected.
+ * Base class which has to be extended if a key resolves directly to the value.
+ * Compared to {@link BundleKey} it isn't needed to use the {@link ResourceBundle} manually
+ * for resolving the value. It's possible to call #toString in-/directly.
*
* @author Gerhard Petracek
*/
-public abstract class ResourceBundleKey implements BundleKey
+public abstract class BundleValue implements BundleKey
{
private transient ResourceBundle resourceBundle;
@@ -58,7 +60,8 @@ public abstract class ResourceBundleKey
return getResourceBundle().getValue(getClass());
}
- private ResourceBundle getResourceBundle()
+ //override it e.g. for test-cases
+ protected ResourceBundle getResourceBundle()
{
if(this.resourceBundle == null)
{
Modified: myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/resource/DefaultResourceBundle.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/resource/DefaultResourceBundle.java?rev=1154862&r1=1154861&r2=1154862&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/resource/DefaultResourceBundle.java (original)
+++ myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/resource/DefaultResourceBundle.java Mon Aug 8 07:49:10 2011
@@ -21,6 +21,7 @@ package org.apache.myfaces.extensions.cd
import org.apache.myfaces.extensions.cdi.core.api.projectstage.ProjectStage;
import org.apache.myfaces.extensions.cdi.core.api.resource.Bundle;
import org.apache.myfaces.extensions.cdi.core.api.resource.BundleKey;
+import org.apache.myfaces.extensions.cdi.core.api.resource.BundleValue;
import org.apache.myfaces.extensions.cdi.core.api.resource.ResourceBundle;
import org.apache.myfaces.extensions.cdi.core.api.util.ConfigUtils;
import org.apache.myfaces.extensions.cdi.core.impl.projectstage.ProjectStageProducer;
@@ -28,6 +29,8 @@ import org.apache.myfaces.extensions.cdi
import javax.enterprise.inject.Typed;
import javax.inject.Named;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.Properties;
@@ -89,6 +92,12 @@ class DefaultResourceBundle implements R
*/
public String getValue(Class<? extends BundleKey> key)
{
+ //in case of an inner class
+ if("".equals(key.getSimpleName()) && BundleKey.class.isAssignableFrom(key.getSuperclass()))
+ {
+ key = (Class<? extends BundleKey>) key.getSuperclass();
+ }
+
Named named = key.getAnnotation(Named.class);
String resourceKey = null;
@@ -105,10 +114,39 @@ class DefaultResourceBundle implements R
}
Class<?> bundleClass = key.getSuperclass();
- if(this.bundleName == null && !Object.class.getName().equals(bundleClass.getName()))
+ if(this.bundleName == null &&
+ !Object.class.getName().equals(bundleClass.getName()) &&
+ !BundleValue.class.isAssignableFrom(bundleClass))
{
useBundle(bundleClass);
}
+ else
+ {
+ List<Class> bundleClassCandidates = new ArrayList<Class>();
+
+ for(Class interfaceClass : key.getInterfaces())
+ {
+ if(interfaceClass.isAnnotationPresent(Bundle.class))
+ {
+ useBundle(interfaceClass);
+ break;
+ }
+ if(!BundleKey.class.isAssignableFrom(interfaceClass))
+ {
+ bundleClassCandidates.add(interfaceClass);
+ }
+ }
+
+ if(this.bundleName == null && bundleClassCandidates.size() == 1)
+ {
+ useBundle(bundleClassCandidates.iterator().next());
+ }
+ else if(this.bundleName == null && bundleClassCandidates.size() > 1)
+ {
+ throw new IllegalStateException(key.getName() + " implements multiple custom interfaces and " +
+ "non of them is annotated with @" + Bundle.class);
+ }
+ }
return getValue(resourceKey);
}
Modified: myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/resource/ResourceBundleTest.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/resource/ResourceBundleTest.java?rev=1154862&r1=1154861&r2=1154862&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/resource/ResourceBundleTest.java (original)
+++ myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/resource/ResourceBundleTest.java Mon Aug 8 07:49:10 2011
@@ -30,19 +30,38 @@ public class ResourceBundleTest
@Test
public void testNonTypesafeBundleKey() throws Exception
{
- ResourceBundle resourceBundle = getResourceBundle();
+ ResourceBundle resourceBundle = getTestResourceBundle();
Assert.assertEquals(resourceBundle.useBundle(getClass().getPackage().getName() + ".testBundle").getValue("value1"), "1");
}
@Test
public void testTypesafeBundleKey() throws Exception
{
- ResourceBundle resourceBundle = getResourceBundle();
- Assert.assertEquals(resourceBundle.getValue(Testbundle.MyValue.class), "2");
- Assert.assertEquals(resourceBundle.getValue(Testbundle.MyValue1.class), "3");
+ ResourceBundle resourceBundle = getTestResourceBundle();
+ Assert.assertEquals(resourceBundle.getValue(Testbundle.MyValue.class), "2.1");
+ Assert.assertEquals(resourceBundle.getValue(Testbundle.MyValue1.class), "2.2");
}
- private ResourceBundle getResourceBundle()
+ @Test
+ public void testTypesafeBundleValue() throws Exception
+ {
+ Assert.assertEquals(new Testbundle.MyValue2(){
+ @Override
+ protected ResourceBundle getResourceBundle()
+ {
+ return getTestResourceBundle();
+ }
+ }.toString(), "3.1");
+ Assert.assertEquals(new Testbundle.MyValue3(){
+ @Override
+ protected ResourceBundle getResourceBundle()
+ {
+ return getTestResourceBundle();
+ }
+ }.toString(), "3.2");
+ }
+
+ private ResourceBundle getTestResourceBundle()
{
return new ResourceBundleProducer()
{
Modified: myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/resource/Testbundle.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/resource/Testbundle.java?rev=1154862&r1=1154861&r2=1154862&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/resource/Testbundle.java (original)
+++ myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/resource/Testbundle.java Mon Aug 8 07:49:10 2011
@@ -19,17 +19,21 @@
package org.apache.myfaces.extensions.cdi.core.test.impl.resource;
import org.apache.myfaces.extensions.cdi.core.api.resource.BundleKey;
+import org.apache.myfaces.extensions.cdi.core.api.resource.BundleValue;
import javax.enterprise.inject.Typed;
import javax.inject.Named;
@Typed()
-public class Testbundle
+public interface Testbundle
{
- public static class MyValue extends Testbundle implements BundleKey
- {}
+ public static class MyValue implements Testbundle, BundleKey {}
@Named("my.value")
- public static class MyValue1 extends Testbundle implements BundleKey
- {}
+ public static class MyValue1 implements Testbundle, BundleKey {}
+
+ public static class MyValue2 extends BundleValue implements Testbundle {}
+
+ @Named("my.value2")
+ public static class MyValue3 extends BundleValue implements Testbundle {}
}
Modified: myfaces/extensions/cdi/trunk/core/impl/src/test/resources/org/apache/myfaces/extensions/cdi/core/test/impl/resource/testbundle.properties
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/impl/src/test/resources/org/apache/myfaces/extensions/cdi/core/test/impl/resource/testbundle.properties?rev=1154862&r1=1154861&r2=1154862&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/test/resources/org/apache/myfaces/extensions/cdi/core/test/impl/resource/testbundle.properties (original)
+++ myfaces/extensions/cdi/trunk/core/impl/src/test/resources/org/apache/myfaces/extensions/cdi/core/test/impl/resource/testbundle.properties Mon Aug 8 07:49:10 2011
@@ -16,5 +16,7 @@
# under the License.
value1=1
-my_value=2
-my.value=3
\ No newline at end of file
+my_value=2.1
+my.value=2.2
+my_value2=3.1
+my.value2=3.2