Repository: deltaspike Updated Branches: refs/heads/master 737d53063 -> 7988bfc96
DELTASPIKE-1003 support for @Produces in partial-beans Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/7988bfc9 Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/7988bfc9 Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/7988bfc9 Branch: refs/heads/master Commit: 7988bfc960d6cdb91fcb998d82081df233dc1546 Parents: 737d530 Author: gpetracek <[email protected]> Authored: Fri Oct 16 17:38:27 2015 +0200 Committer: gpetracek <[email protected]> Committed: Fri Oct 16 20:37:15 2015 +0200 ---------------------------------------------------------------------- .../DeltaSpikePartialProducerLifecycle.java | 52 ++++++++ .../impl/PartialBeanBindingExtension.java | 125 ++++++++++++++++++- .../PartialBeanWithProducerEarFileTest.java | 43 +++++++ .../uc009/PartialBeanWithProducerTest.java | 53 ++++++++ .../PartialBeanWithProducerWarFileTest.java | 48 +++++++ .../api/partialbean/uc009/TestBaseConfig.java | 30 +++++ .../core/api/partialbean/uc009/TestConfig.java | 32 +++++ .../api/partialbean/uc009/TestCustomType.java | 40 ++++++ .../partialbean/uc009/TestTypeSafeConfig.java | 35 ++++++ .../uc009/TestTypeSafeConfigHandler.java | 54 ++++++++ .../core/api/partialbean/uc009/TestValue.java | 33 +++++ 11 files changed, 544 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7988bfc9/deltaspike/modules/partial-bean/impl/src/main/java/org/apache/deltaspike/partialbean/impl/DeltaSpikePartialProducerLifecycle.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/partial-bean/impl/src/main/java/org/apache/deltaspike/partialbean/impl/DeltaSpikePartialProducerLifecycle.java b/deltaspike/modules/partial-bean/impl/src/main/java/org/apache/deltaspike/partialbean/impl/DeltaSpikePartialProducerLifecycle.java new file mode 100644 index 0000000..97855c3 --- /dev/null +++ b/deltaspike/modules/partial-bean/impl/src/main/java/org/apache/deltaspike/partialbean/impl/DeltaSpikePartialProducerLifecycle.java @@ -0,0 +1,52 @@ +/* + * 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.partialbean.impl; + +import org.apache.deltaspike.core.api.provider.BeanProvider; +import org.apache.deltaspike.core.util.ReflectionUtils; +import org.apache.deltaspike.core.util.metadata.builder.ContextualLifecycle; + +import javax.enterprise.context.spi.CreationalContext; +import javax.enterprise.inject.spi.Bean; +import java.lang.reflect.Method; + +public class DeltaSpikePartialProducerLifecycle<T> implements ContextualLifecycle<T> +{ + private final Class targetPartialBeanClass; + private final Method producerMethod; + + public DeltaSpikePartialProducerLifecycle(Class targetPartialBeanClass, Method producerMethod) + { + this.targetPartialBeanClass = targetPartialBeanClass; + this.producerMethod = producerMethod; + } + + @Override + public T create(Bean<T> bean, CreationalContext<T> creationalContext) + { + Object partialBean = BeanProvider.getContextualReference(this.targetPartialBeanClass); + return (T)ReflectionUtils.invokeMethod(partialBean, this.producerMethod, Object.class, false); + } + + @Override + public void destroy(Bean<T> bean, T instance, CreationalContext<T> creationalContext) + { + //we don't need to support disposer-methods for now (because it's just about exposing injectable values) + } +} http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7988bfc9/deltaspike/modules/partial-bean/impl/src/main/java/org/apache/deltaspike/partialbean/impl/PartialBeanBindingExtension.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/partial-bean/impl/src/main/java/org/apache/deltaspike/partialbean/impl/PartialBeanBindingExtension.java b/deltaspike/modules/partial-bean/impl/src/main/java/org/apache/deltaspike/partialbean/impl/PartialBeanBindingExtension.java index 916a068..75e66db 100644 --- a/deltaspike/modules/partial-bean/impl/src/main/java/org/apache/deltaspike/partialbean/impl/PartialBeanBindingExtension.java +++ b/deltaspike/modules/partial-bean/impl/src/main/java/org/apache/deltaspike/partialbean/impl/PartialBeanBindingExtension.java @@ -18,13 +18,20 @@ */ package org.apache.deltaspike.partialbean.impl; +import java.io.Serializable; import java.lang.annotation.Annotation; import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; import java.lang.reflect.Modifier; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.Set; +import javax.enterprise.context.Dependent; import javax.enterprise.event.Observes; +import javax.enterprise.inject.Produces; import javax.enterprise.inject.spi.AfterBeanDiscovery; import javax.enterprise.inject.spi.AnnotatedType; import javax.enterprise.inject.spi.Bean; @@ -33,7 +40,10 @@ import javax.enterprise.inject.spi.BeforeBeanDiscovery; import javax.enterprise.inject.spi.Extension; import javax.enterprise.inject.spi.ProcessAnnotatedType; +import org.apache.deltaspike.core.api.literal.DefaultLiteral; import org.apache.deltaspike.core.spi.activation.Deactivatable; +import org.apache.deltaspike.core.util.AnnotationUtils; +import org.apache.deltaspike.core.util.BeanUtils; import org.apache.deltaspike.core.util.ClassDeactivationUtils; import org.apache.deltaspike.core.util.bean.BeanBuilder; import org.apache.deltaspike.core.util.metadata.builder.AnnotatedTypeBuilder; @@ -141,6 +151,14 @@ public class PartialBeanBindingExtension implements Extension, Deactivatable if (partialBean != null) { afterBeanDiscovery.addBean(partialBean); + + List<Bean> partialProducerBeans = + createPartialProducersDefinedIn(partialBean, afterBeanDiscovery, beanManager); + + for (Bean partialProducerBean : partialProducerBeans) + { + afterBeanDiscovery.addBean(partialProducerBean); + } } } } @@ -149,7 +167,6 @@ public class PartialBeanBindingExtension implements Extension, Deactivatable this.descriptors.clear(); } - protected <T> Bean<T> createPartialBean(Class<T> beanClass, PartialBeanDescriptor descriptor, AfterBeanDiscovery afterBeanDiscovery, BeanManager beanManager) { @@ -191,4 +208,110 @@ public class PartialBeanBindingExtension implements Extension, Deactivatable return null; } + + /* + * logic for partial-producers + */ + + protected List<Bean> createPartialProducersDefinedIn( + Bean partialBean, AfterBeanDiscovery afterBeanDiscovery, BeanManager beanManager) + { + Class currentClass = partialBean.getBeanClass(); + return createPartialProducersDefinedIn(partialBean, afterBeanDiscovery, beanManager, currentClass); + } + + private List<Bean> createPartialProducersDefinedIn( + Bean partialBean, AfterBeanDiscovery afterBeanDiscovery, BeanManager beanManager, Class currentClass) + { + List<Bean> result = new ArrayList<Bean>(); + + while (currentClass != null && !Object.class.getName().equals(currentClass.getName())) + { + for (Class interfaceClass : currentClass.getInterfaces()) + { + if (interfaceClass.getName().startsWith("java.") || interfaceClass.getName().startsWith("javax.")) + { + continue; + } + result.addAll( + createPartialProducersDefinedIn(partialBean, afterBeanDiscovery, beanManager, interfaceClass)); + } + + for (Method currentMethod : currentClass.getDeclaredMethods()) + { + if (currentMethod.isAnnotationPresent(Produces.class)) + { + if (currentMethod.getParameterTypes().length > 0) + { + afterBeanDiscovery.addDefinitionError( + new IllegalStateException( + "Producer-methods in partial-beans currently don't support injection-points. " + + "Please remove the parameters from " + + currentMethod.toString() + " in " + currentClass.getName())); + } + + DeltaSpikePartialProducerLifecycle lifecycle = + new DeltaSpikePartialProducerLifecycle(partialBean.getBeanClass(), currentMethod); + + Class<? extends Annotation> scopeClass = + extractScope(currentMethod.getDeclaredAnnotations(), beanManager); + + Class<?> producerResultType = currentMethod.getReturnType(); + + boolean passivationCapable = + Serializable.class.isAssignableFrom(producerResultType) || producerResultType.isPrimitive(); + + Set<Annotation> qualifiers = extractQualifiers(currentMethod.getDeclaredAnnotations(), beanManager); + + BeanBuilder<?> beanBuilder = new BeanBuilder(beanManager) + .beanClass(producerResultType) + .types(Object.class, producerResultType) + .qualifiers(qualifiers) + .passivationCapable(passivationCapable) + .scope(scopeClass) + .id(createPartialProducerId(currentClass, currentMethod, qualifiers)) + .beanLifecycle(lifecycle); + + result.add(beanBuilder.create()); + } + } + + currentClass = currentClass.getSuperclass(); + } + + return result; + } + + private Set<Annotation> extractQualifiers(Annotation[] annotations, BeanManager beanManager) + { + Set<Annotation> result = BeanUtils.getQualifiers(beanManager, annotations); + + if (result.isEmpty()) + { + result.add(new DefaultLiteral()); + } + return result; + } + + private Class<? extends Annotation> extractScope(Annotation[] annotations, BeanManager beanManager) + { + for (Annotation annotation : annotations) + { + if (beanManager.isScope(annotation.annotationType())) + { + return annotation.annotationType(); + } + } + return Dependent.class; + } + + private String createPartialProducerId(Class currentClass, Method currentMethod, Set<Annotation> qualifiers) + { + int qualifierHashCode = 0; + for (Annotation qualifier : qualifiers) + { + qualifierHashCode += AnnotationUtils.getQualifierHashCode(qualifier); + } + return "PartialProducer#" + currentClass.getName() + "#" + currentMethod.getName() + "#" + qualifierHashCode; + } } http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7988bfc9/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/PartialBeanWithProducerEarFileTest.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/PartialBeanWithProducerEarFileTest.java b/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/PartialBeanWithProducerEarFileTest.java new file mode 100644 index 0000000..26453af --- /dev/null +++ b/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/PartialBeanWithProducerEarFileTest.java @@ -0,0 +1,43 @@ +/* + * 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.partialbean.uc009; + +import org.apache.deltaspike.test.category.EnterpriseArchiveProfileCategory; +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.spec.EnterpriseArchive; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; + +@RunWith(Arquillian.class) +@Category(EnterpriseArchiveProfileCategory.class) +public class PartialBeanWithProducerEarFileTest extends PartialBeanWithProducerTest +{ + @Deployment + public static EnterpriseArchive deployEar() + { + //workaround for tomee - the ear-file needs to have the same name as the war-file + String simpleName = PartialBeanWithProducerWarFileTest.class.getSimpleName(); + String archiveName = simpleName.substring(0, 1).toLowerCase() + simpleName.substring(1); + + return ShrinkWrap.create(EnterpriseArchive.class, archiveName + ".ear") + .addAsModule(PartialBeanWithProducerWarFileTest.deploy()); + } +} http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7988bfc9/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/PartialBeanWithProducerTest.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/PartialBeanWithProducerTest.java b/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/PartialBeanWithProducerTest.java new file mode 100644 index 0000000..4e8b4ba --- /dev/null +++ b/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/PartialBeanWithProducerTest.java @@ -0,0 +1,53 @@ +/* + * 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.partialbean.uc009; + +import org.junit.Assert; +import org.junit.Test; + +import javax.inject.Inject; + +public abstract class PartialBeanWithProducerTest +{ + @Inject + private TestConfig testConfig; + + @Inject + @TestValue + private String value2; + + @Inject + private TestCustomType value4; + + @Test + public void testPartialBeanWithProducerManualAccess() throws Exception + { + Assert.assertEquals(new Integer(1), testConfig.value1()); + Assert.assertEquals("2", testConfig.value2()); + Assert.assertEquals(new Integer(3), testConfig.value3()); + Assert.assertEquals(new Integer(4), testConfig.value4().getTestValue()); + } + + @Test + public void testProducedResultOfPartialBeanWithProducer() throws Exception + { + Assert.assertEquals("2", value2); + Assert.assertEquals(new Integer(4), value4.getTestValue()); + } +} http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7988bfc9/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/PartialBeanWithProducerWarFileTest.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/PartialBeanWithProducerWarFileTest.java b/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/PartialBeanWithProducerWarFileTest.java new file mode 100644 index 0000000..6cf9887 --- /dev/null +++ b/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/PartialBeanWithProducerWarFileTest.java @@ -0,0 +1,48 @@ +/* + * 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.partialbean.uc009; + +import org.apache.deltaspike.test.core.api.partialbean.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.spec.JavaArchive; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.runner.RunWith; + +@RunWith(Arquillian.class) +public class PartialBeanWithProducerWarFileTest extends PartialBeanWithProducerTest +{ + @Deployment + public static WebArchive deploy() + { + String simpleName = PartialBeanWithProducerWarFileTest.class.getSimpleName(); + String archiveName = simpleName.substring(0, 1).toLowerCase() + simpleName.substring(1); + + JavaArchive testJar = ShrinkWrap.create(JavaArchive.class, archiveName + ".jar") + .addPackage(PartialBeanWithProducerWarFileTest.class.getPackage()) + .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); + + return ShrinkWrap.create(WebArchive.class, archiveName + ".war") + .addAsLibraries(ArchiveUtils.getDeltaSpikeCoreAndPartialBeanArchive()) + .addAsLibraries(testJar) + .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); + } +} http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7988bfc9/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestBaseConfig.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestBaseConfig.java b/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestBaseConfig.java new file mode 100644 index 0000000..1bbbcb6 --- /dev/null +++ b/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestBaseConfig.java @@ -0,0 +1,30 @@ +/* + * 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.partialbean.uc009; + +import javax.enterprise.inject.Produces; + +public interface TestBaseConfig +{ + Integer value1(); + + @Produces + @TestValue + String value2(); +} http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7988bfc9/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestConfig.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestConfig.java b/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestConfig.java new file mode 100644 index 0000000..2587266 --- /dev/null +++ b/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestConfig.java @@ -0,0 +1,32 @@ +/* + * 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.partialbean.uc009; + +import javax.enterprise.context.SessionScoped; +import javax.enterprise.inject.Produces; + +@TestTypeSafeConfig +public interface TestConfig extends TestBaseConfig +{ + Integer value3(); + + @Produces + @SessionScoped + TestCustomType value4(); +} http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7988bfc9/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestCustomType.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestCustomType.java b/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestCustomType.java new file mode 100644 index 0000000..4d3ef93 --- /dev/null +++ b/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestCustomType.java @@ -0,0 +1,40 @@ +/* + * 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.partialbean.uc009; + +import javax.enterprise.inject.Typed; +import java.io.Serializable; + +@Typed() +public class TestCustomType implements Serializable +{ + private Integer testValue; + + public static TestCustomType parse(String value) + { + TestCustomType result = new TestCustomType(); + result.testValue = Integer.parseInt(value); + return result; + } + + public Integer getTestValue() + { + return testValue; + } +} http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7988bfc9/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestTypeSafeConfig.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestTypeSafeConfig.java b/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestTypeSafeConfig.java new file mode 100644 index 0000000..cf5ea60 --- /dev/null +++ b/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestTypeSafeConfig.java @@ -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.deltaspike.test.core.api.partialbean.uc009; + +import org.apache.deltaspike.partialbean.api.PartialBeanBinding; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@PartialBeanBinding + +@Retention(RUNTIME) +@Target(TYPE) +public @interface TestTypeSafeConfig +{ +} http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7988bfc9/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestTypeSafeConfigHandler.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestTypeSafeConfigHandler.java b/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestTypeSafeConfigHandler.java new file mode 100644 index 0000000..73e0429 --- /dev/null +++ b/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestTypeSafeConfigHandler.java @@ -0,0 +1,54 @@ +/* + * 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.partialbean.uc009; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; + +@TestTypeSafeConfig +@SuppressWarnings("unused") +public class TestTypeSafeConfigHandler implements InvocationHandler +{ + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable + { + String stringValue = getTestValue(method.getName()); + Object parsedValue = null; + + final Class<?> configType = method.getReturnType(); + if (configType.equals(Integer.class)) + { + parsedValue = Integer.parseInt(stringValue); + } + else if (configType.equals(String.class)) + { + parsedValue = stringValue; + } + else if (configType.equals(TestCustomType.class)) + { + parsedValue = TestCustomType.parse(stringValue); + } + + return parsedValue; + } + + private String getTestValue(String methodName) + { + return methodName.replace("value", ""); + } +} http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7988bfc9/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestValue.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestValue.java b/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestValue.java new file mode 100644 index 0000000..c3f4bd6 --- /dev/null +++ b/deltaspike/modules/partial-bean/impl/src/test/java/org/apache/deltaspike/test/core/api/partialbean/uc009/TestValue.java @@ -0,0 +1,33 @@ +/* + * 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.partialbean.uc009; + +import javax.inject.Qualifier; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Target({METHOD, FIELD}) +@Retention(RUNTIME) +@Qualifier +public @interface TestValue +{ +}
