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 00:18:44 UTC
svn commit: r1154781 - in /myfaces/extensions/cdi/trunk/core:
api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/
api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/util/
impl/src/main/java/org/apache/myfaces/extensions/cdi...
Author: gpetracek
Date: Sun Aug 7 22:18:43 2011
New Revision: 1154781
URL: http://svn.apache.org/viewvc?rev=1154781&view=rev
Log:
EXTCDI-204 injectable resource-bundle and resource-bundle-key
Added:
myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/
myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/Bundle.java
myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/BundleKey.java
myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/ResourceBundle.java
myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/ResourceBundleKey.java
myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/resource/
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/main/java/org/apache/myfaces/extensions/cdi/core/impl/resource/ResourceBundleProducer.java
myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/util/StringUtils.java
myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/resource/
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/
myfaces/extensions/cdi/trunk/core/impl/src/test/resources/org/apache/
myfaces/extensions/cdi/trunk/core/impl/src/test/resources/org/apache/myfaces/
myfaces/extensions/cdi/trunk/core/impl/src/test/resources/org/apache/myfaces/extensions/
myfaces/extensions/cdi/trunk/core/impl/src/test/resources/org/apache/myfaces/extensions/cdi/
myfaces/extensions/cdi/trunk/core/impl/src/test/resources/org/apache/myfaces/extensions/cdi/core/
myfaces/extensions/cdi/trunk/core/impl/src/test/resources/org/apache/myfaces/extensions/cdi/core/test/
myfaces/extensions/cdi/trunk/core/impl/src/test/resources/org/apache/myfaces/extensions/cdi/core/test/impl/
myfaces/extensions/cdi/trunk/core/impl/src/test/resources/org/apache/myfaces/extensions/cdi/core/test/impl/resource/
myfaces/extensions/cdi/trunk/core/impl/src/test/resources/org/apache/myfaces/extensions/cdi/core/test/impl/resource/testbundle.properties
Modified:
myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/util/ConfigUtils.java
myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/util/CodiUtils.java
Added: myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/Bundle.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/Bundle.java?rev=1154781&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/Bundle.java (added)
+++ myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/Bundle.java Sun Aug 7 22:18:43 2011
@@ -0,0 +1,57 @@
+/*
+ * 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.core.api.resource;
+
+import javax.enterprise.util.Nonbinding;
+import javax.inject.Qualifier;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * Optional to specify a different bundle name
+ *
+ * @author Gerhard Petracek
+ */
+@Documented
+@Retention(RUNTIME)
+@Target({TYPE, CONSTRUCTOR, METHOD, FIELD})
+
+//cdi annotations
+@Qualifier
+public @interface Bundle
+{
+ /**
+ * Allows to specify the class which is mapped to the resource-bundle
+ * @return class which represents the resource-bundle
+ */
+ @Nonbinding
+ Class<?> value() default Class.class;
+
+ /**
+ * Esp. useful if the class which is mapped to the resource-bundle has a different name
+ * and can't be mapped to the bundle via convention. #name allows to explicitly specify the name of the bundle.
+ * @return the overridden name which should be used to identify the resource-bundle
+ */
+ @Nonbinding
+ String name() default "";
+}
Added: myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/BundleKey.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/BundleKey.java?rev=1154781&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/BundleKey.java (added)
+++ myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/BundleKey.java Sun Aug 7 22:18:43 2011
@@ -0,0 +1,31 @@
+/*
+ * 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.core.api.resource;
+
+import java.io.Serializable;
+
+/**
+ * Base interface which can be used for simple keys (if there is no need to inject the key directly).
+ * The key can be used as type-safe argument for {@link ResourceBundle#getValue(Class)}
+ *
+ * @author Gerhard Petracek
+ */
+public interface BundleKey extends Serializable
+{
+}
Added: myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/ResourceBundle.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/ResourceBundle.java?rev=1154781&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/ResourceBundle.java (added)
+++ myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/ResourceBundle.java Sun Aug 7 22:18:43 2011
@@ -0,0 +1,67 @@
+/*
+ * 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.core.api.resource;
+
+import java.io.Serializable;
+import java.util.Locale;
+
+/**
+ * @author Gerhard Petracek
+ */
+public interface ResourceBundle extends Serializable
+{
+ /**
+ * Allows to specify a bundle name
+ * @param bundleName name of the bundle which should be used
+ * @return the instance itself
+ */
+ ResourceBundle useBundle(String bundleName);
+
+ /**
+ * Allows to specify a class which is mapped to a bundle
+ * @param bundleClass class mapped to a bundle
+ * @return the instance itself
+ */
+ ResourceBundle useBundle(Class<?> bundleClass);
+
+ /**
+ * Allows to specify a locale
+ * @param locale locale which should be used
+ * @return the instance itself
+ */
+ ResourceBundle useLocale(Locale locale);
+
+ /**
+ * Returns the value for the given key (and the configured bundle and local).
+ * If the key extends a custom class and there is no specified bundle-name,
+ * the name of the super-class will be used as bundle-name.
+ *
+ * @param key current key
+ * @return the value for the given key
+ */
+ String getValue(Class<? extends BundleKey> key);
+
+ /**
+ * Returns the value for the given key (and the configured bundle and local).
+ *
+ * @param key current key
+ * @return the value for the given key
+ */
+ String getValue(String key);
+}
Added: 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/ResourceBundleKey.java?rev=1154781&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/ResourceBundleKey.java (added)
+++ myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/resource/ResourceBundleKey.java Sun Aug 7 22:18:43 2011
@@ -0,0 +1,75 @@
+/*
+ * 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.core.api.resource;
+
+import org.apache.myfaces.extensions.cdi.core.api.provider.BeanManagerProvider;
+import org.apache.myfaces.extensions.cdi.core.api.tools.DefaultAnnotation;
+
+/**
+ * Base class which has to be extended if a key should be injected.
+ *
+ * @author Gerhard Petracek
+ */
+public abstract class ResourceBundleKey implements BundleKey
+{
+ private transient ResourceBundle resourceBundle;
+
+ /**
+ * Returns the value of the resource-bundle represented by this key
+ *
+ * @return the value of the resource-bundle represented by this key
+ */
+ @Override
+ public String toString()
+ {
+ return getResourceBundle().getValue(getClass());
+ }
+
+ private ResourceBundle getResourceBundle()
+ {
+ if(this.resourceBundle == null)
+ {
+ Class bundleClass = getClass().getSuperclass();
+
+ if(!bundleClass.isAnnotationPresent(Bundle.class))
+ {
+ bundleClass = null;
+ for(Class interfaceClass : getClass().getInterfaces())
+ {
+ if(interfaceClass.isAnnotationPresent(Bundle.class))
+ {
+ bundleClass = interfaceClass;
+ break;
+ }
+ }
+ }
+
+ if(bundleClass == null)
+ {
+ throw new IllegalStateException(getClass() + " has to extend a class or implement an interface " +
+ "which is annotated with @" + Bundle.class.getName());
+ }
+
+ this.resourceBundle = BeanManagerProvider.getInstance()
+ .getContextualReference(ResourceBundle.class, DefaultAnnotation.of(Bundle.class));
+ this.resourceBundle.useBundle(bundleClass);
+ }
+ return resourceBundle;
+ }
+}
Modified: myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/util/ConfigUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/util/ConfigUtils.java?rev=1154781&r1=1154780&r2=1154781&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/util/ConfigUtils.java (original)
+++ myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/util/ConfigUtils.java Sun Aug 7 22:18:43 2011
@@ -184,7 +184,7 @@ public abstract class ConfigUtils
* @return Properties or <code>null</code> if the given property file doesn't exist
*/
//TODO
- private static Properties getProperties(String resourceName)
+ public static Properties getProperties(String resourceName)
{
Properties properties = null;
ClassLoader classLoader = ClassUtils.getClassLoader(resourceName);
Added: 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=1154781&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/resource/DefaultResourceBundle.java (added)
+++ myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/resource/DefaultResourceBundle.java Sun Aug 7 22:18:43 2011
@@ -0,0 +1,167 @@
+/*
+ * 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.core.impl.resource;
+
+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.ResourceBundle;
+import org.apache.myfaces.extensions.cdi.core.api.util.ConfigUtils;
+import org.apache.myfaces.extensions.cdi.core.impl.projectstage.ProjectStageProducer;
+import org.apache.myfaces.extensions.cdi.core.impl.util.StringUtils;
+
+import javax.enterprise.inject.Typed;
+import javax.inject.Named;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * @author Gerhard Petracek
+ */
+@Typed()
+class DefaultResourceBundle implements ResourceBundle
+{
+ private static final long serialVersionUID = 117890966460274247L;
+
+ private String bundleName;
+ private Locale locale;
+
+ /**
+ * {@inheritDoc}
+ */
+ public ResourceBundle useBundle(String name)
+ {
+ this.bundleName = name;
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public ResourceBundle useBundle(Class<?> bundleClass)
+ {
+ Bundle bundleName = bundleClass.getAnnotation(Bundle.class);
+ if(bundleName != null)
+ {
+ this.bundleName = bundleName.name();
+ }
+
+ if(this.bundleName == null || "".equals(this.bundleName))
+ {
+ String className = bundleClass.getSimpleName();
+ className = className.substring(0, 1).toLowerCase() + className.substring(1);
+ className = StringUtils.replaceUpperCaseCharactersWithUnderscores(className);
+ this.bundleName = bundleClass.getPackage().getName() + "." + className;
+ }
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public ResourceBundle useLocale(Locale locale)
+ {
+ this.locale = locale;
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getValue(Class<? extends BundleKey> key)
+ {
+ Named named = key.getAnnotation(Named.class);
+
+ String resourceKey = null;
+
+ if(named != null)
+ {
+ resourceKey = named.value();
+ }
+
+ if(resourceKey == null)
+ {
+ resourceKey = StringUtils.replaceUpperCaseCharactersWithUnderscores(
+ key.getSimpleName().substring(0, 1).toLowerCase() + key.getSimpleName().substring(1));
+ }
+
+ Class<?> bundleClass = key.getSuperclass();
+ if(this.bundleName == null && !Object.class.getName().equals(bundleClass.getName()))
+ {
+ useBundle(bundleClass);
+ }
+ return getValue(resourceKey);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getValue(String key)
+ {
+ if(key == null)
+ {
+ return null;
+ }
+
+ if(this.locale == null)
+ {
+ this.locale = Locale.getDefault();
+ }
+
+ if(this.bundleName == null)
+ {
+ if(ProjectStageProducer.getInstance().getProjectStage() == ProjectStage.Development)
+ {
+ Logger logger = Logger.getLogger(DefaultResourceBundle.class.getName());
+ if(logger.isLoggable(Level.WARNING))
+ {
+ logger.warning("no custom bundle name provided - the codi properties file " +
+ "META-INF/myfaces-extcdi.properties is used as fallback");
+ }
+ }
+ this.bundleName = "META-INF/myfaces-extcdi.properties";
+ }
+
+ if(this.bundleName.contains("/"))
+ {
+ Properties properties = ConfigUtils.getProperties(this.bundleName);
+
+ if(properties == null)
+ {
+ return null;
+ }
+ return properties.getProperty(key);
+ }
+ try
+ {
+ if(this.locale == null)
+ {
+ return java.util.ResourceBundle.getBundle(this.bundleName).getString(key);
+ }
+ return java.util.ResourceBundle.getBundle(this.bundleName, this.locale).getString(key);
+ }
+ catch (MissingResourceException e)
+ {
+ return null;
+ }
+ }
+}
Added: myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/resource/ResourceBundleProducer.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/resource/ResourceBundleProducer.java?rev=1154781&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/resource/ResourceBundleProducer.java (added)
+++ myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/resource/ResourceBundleProducer.java Sun Aug 7 22:18:43 2011
@@ -0,0 +1,78 @@
+/*
+ * 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.core.impl.resource;
+
+import org.apache.myfaces.extensions.cdi.core.api.resource.Bundle;
+import org.apache.myfaces.extensions.cdi.core.api.resource.ResourceBundle;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.inject.Produces;
+import javax.enterprise.inject.spi.InjectionPoint;
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
+/**
+ * @author Gerhard Petracek
+ */
+@ApplicationScoped
+public class ResourceBundleProducer
+{
+ @Produces
+ @Bundle
+ @Dependent
+ protected ResourceBundle injectableResourceBundle(InjectionPoint injectionPoint)
+ {
+ Bundle bundle = getBundleClass(injectionPoint.getQualifiers());
+
+ if(bundle != null)
+ {
+ Class bundleClass = bundle.value();
+
+ if(bundleClass != null && !Class.class.getName().equals(bundleClass.getName()))
+ {
+ return createDefaultResourceBundle().useBundle(bundleClass);
+ }
+
+ if(!"".equals(bundle.name()))
+ {
+ return createDefaultResourceBundle().useBundle(bundle.name());
+ }
+ }
+ return createDefaultResourceBundle();
+ }
+
+ private static Bundle getBundleClass(Set<Annotation> qualifiers)
+ {
+ for(Annotation qualifier : qualifiers)
+ {
+ if(Bundle.class.isAssignableFrom(qualifier.annotationType()))
+ {
+ return ((Bundle)qualifier);
+ }
+ }
+
+ return null;
+ }
+
+ protected ResourceBundle createDefaultResourceBundle()
+ {
+ return new DefaultResourceBundle();
+ }
+}
Modified: myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/util/CodiUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/util/CodiUtils.java?rev=1154781&r1=1154780&r2=1154781&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/util/CodiUtils.java (original)
+++ myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/util/CodiUtils.java Sun Aug 7 22:18:43 2011
@@ -562,23 +562,6 @@ public abstract class CodiUtils
baseKey = baseKey.substring(0, 1).toLowerCase() + baseKey.substring(1);
- StringBuilder dynamicKey = new StringBuilder(baseKey.length());
-
- Character current;
- for(int i = 0; i < baseKey.length(); i++)
- {
- current = baseKey.charAt(i);
- if(Character.isUpperCase(current))
- {
- dynamicKey.append("_");
- dynamicKey.append(Character.toLowerCase(current));
- }
- else
- {
- dynamicKey.append(current);
- }
- }
-
String className = runtimeException.getStackTrace()[1].getClassName();
Class configClass = ClassUtils.tryToLoadClassForName(className);
@@ -593,7 +576,8 @@ public abstract class CodiUtils
className = className.substring(className.lastIndexOf(".") + 1);
}
- key = className + "." + dynamicKey.toString();
+ String convertedKey = StringUtils.replaceUpperCaseCharactersWithUnderscores(baseKey);
+ key = className + "." + convertedKey;
}
String result = lookupFromEnvironment(key, String.class, null, null);
Added: myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/util/StringUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/util/StringUtils.java?rev=1154781&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/util/StringUtils.java (added)
+++ myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/util/StringUtils.java Sun Aug 7 22:18:43 2011
@@ -0,0 +1,60 @@
+/*
+ * 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.core.impl.util;
+
+import javax.enterprise.inject.Typed;
+
+/**
+ * @author Gerhard Petracek
+ */
+@Typed()
+public class StringUtils
+{
+ private StringUtils()
+ {
+ // prevent instantiation
+ }
+
+ /**
+ * Replaces all upper-case characters of the given key with an underscore and
+ * the lower-case version of the character
+ * @param baseKey current key
+ * @return the transformed version of the given key
+ */
+ public static String replaceUpperCaseCharactersWithUnderscores(String baseKey)
+ {
+ StringBuilder dynamicKey = new StringBuilder(baseKey.length());
+
+ Character current;
+ for(int i = 0; i < baseKey.length(); i++)
+ {
+ current = baseKey.charAt(i);
+ if(Character.isUpperCase(current))
+ {
+ dynamicKey.append("_");
+ dynamicKey.append(Character.toLowerCase(current));
+ }
+ else
+ {
+ dynamicKey.append(current);
+ }
+ }
+ return dynamicKey.toString();
+ }
+}
Added: 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=1154781&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/resource/ResourceBundleTest.java (added)
+++ myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/resource/ResourceBundleTest.java Sun Aug 7 22:18:43 2011
@@ -0,0 +1,56 @@
+/*
+ * 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.core.test.impl.resource;
+
+import org.apache.myfaces.extensions.cdi.core.api.resource.ResourceBundle;
+import org.apache.myfaces.extensions.cdi.core.impl.resource.ResourceBundleProducer;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import javax.enterprise.inject.spi.InjectionPoint;
+
+public class ResourceBundleTest
+{
+ @Test
+ public void testNonTypesafeBundleKey() throws Exception
+ {
+ ResourceBundle resourceBundle = getResourceBundle();
+ 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");
+ }
+
+ private ResourceBundle getResourceBundle()
+ {
+ return new ResourceBundleProducer()
+ {
+ @Override
+ public ResourceBundle injectableResourceBundle(InjectionPoint injectionPoint)
+ {
+ return createDefaultResourceBundle();
+ }
+ }.injectableResourceBundle(null);
+ }
+}
Added: 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=1154781&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/resource/Testbundle.java (added)
+++ myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/resource/Testbundle.java Sun Aug 7 22:18:43 2011
@@ -0,0 +1,35 @@
+/*
+ * 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.core.test.impl.resource;
+
+import org.apache.myfaces.extensions.cdi.core.api.resource.BundleKey;
+
+import javax.enterprise.inject.Typed;
+import javax.inject.Named;
+
+@Typed()
+public class Testbundle
+{
+ public static class MyValue extends Testbundle implements BundleKey
+ {}
+
+ @Named("my.value")
+ public static class MyValue1 extends Testbundle implements BundleKey
+ {}
+}
Added: 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=1154781&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/test/resources/org/apache/myfaces/extensions/cdi/core/test/impl/resource/testbundle.properties (added)
+++ myfaces/extensions/cdi/trunk/core/impl/src/test/resources/org/apache/myfaces/extensions/cdi/core/test/impl/resource/testbundle.properties Sun Aug 7 22:18:43 2011
@@ -0,0 +1,20 @@
+# 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.
+
+value1=1
+my_value=2
+my.value=3
\ No newline at end of file