diff --git a/cdi/alternatives-qualifiers/pom.xml b/cdi/alternatives-qualifiers/pom.xml new file mode 100644 index 000000000..01b765ae3 --- /dev/null +++ b/cdi/alternatives-qualifiers/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + + org.javaee7 + cdi + 1.0-SNAPSHOT + ../pom.xml + + cdi-alternatives-qualifiers + Java EE 7 Sample: cdi - alternatives-qualifiers + diff --git a/cdi/alternatives-qualifiers/src/main/java/org/javaee7/cdi/alternatives/AlternativeGreeting.java b/cdi/alternatives-qualifiers/src/main/java/org/javaee7/cdi/alternatives/AlternativeGreeting.java new file mode 100644 index 000000000..232e8f6e7 --- /dev/null +++ b/cdi/alternatives-qualifiers/src/main/java/org/javaee7/cdi/alternatives/AlternativeGreeting.java @@ -0,0 +1,16 @@ +package org.javaee7.cdi.alternatives; + +import javax.enterprise.inject.Alternative; + + +/** + * @author Radim Hanus + */ +@Alternative +public class AlternativeGreeting implements Greeting { + @Override + public String greet(String name) { + return "Nice to meet you, hello " + name; + } + +} diff --git a/cdi/alternatives-qualifiers/src/main/java/org/javaee7/cdi/alternatives/AlternativePersonalGreeting.java b/cdi/alternatives-qualifiers/src/main/java/org/javaee7/cdi/alternatives/AlternativePersonalGreeting.java new file mode 100644 index 000000000..af053fe79 --- /dev/null +++ b/cdi/alternatives-qualifiers/src/main/java/org/javaee7/cdi/alternatives/AlternativePersonalGreeting.java @@ -0,0 +1,17 @@ +package org.javaee7.cdi.alternatives; + +import javax.enterprise.inject.Alternative; + + +/** + * @author Radim Hanus + */ +@Alternative +@Personal +public class AlternativePersonalGreeting implements Greeting { + @Override + public String greet(String name) { + return "Fine to see you, hi " + name; + } + +} diff --git a/cdi/alternatives-qualifiers/src/main/java/org/javaee7/cdi/alternatives/DefaultGreeting.java b/cdi/alternatives-qualifiers/src/main/java/org/javaee7/cdi/alternatives/DefaultGreeting.java new file mode 100644 index 000000000..5991ffe8f --- /dev/null +++ b/cdi/alternatives-qualifiers/src/main/java/org/javaee7/cdi/alternatives/DefaultGreeting.java @@ -0,0 +1,12 @@ +package org.javaee7.cdi.alternatives; + + +/** + * @author Radim Hanus + */ +public class DefaultGreeting implements Greeting { + @Override + public String greet(String name) { + return "Hello " + name; + } +} diff --git a/cdi/alternatives-qualifiers/src/main/java/org/javaee7/cdi/alternatives/Greeting.java b/cdi/alternatives-qualifiers/src/main/java/org/javaee7/cdi/alternatives/Greeting.java new file mode 100644 index 000000000..1f76ee4ca --- /dev/null +++ b/cdi/alternatives-qualifiers/src/main/java/org/javaee7/cdi/alternatives/Greeting.java @@ -0,0 +1,9 @@ +package org.javaee7.cdi.alternatives; + + +/** + * @author Arun Gupta + */ +public interface Greeting { + String greet(String name); +} diff --git a/cdi/alternatives-qualifiers/src/main/java/org/javaee7/cdi/alternatives/Personal.java b/cdi/alternatives-qualifiers/src/main/java/org/javaee7/cdi/alternatives/Personal.java new file mode 100644 index 000000000..c871916d0 --- /dev/null +++ b/cdi/alternatives-qualifiers/src/main/java/org/javaee7/cdi/alternatives/Personal.java @@ -0,0 +1,18 @@ +package org.javaee7.cdi.alternatives; + +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; + + +/** + * @author Radim Hanus + */ +@Qualifier +@Retention(RUNTIME) +@Target({TYPE, METHOD, FIELD, PARAMETER}) +public @interface Personal { +} diff --git a/cdi/alternatives-qualifiers/src/main/java/org/javaee7/cdi/alternatives/PersonalGreeting.java b/cdi/alternatives-qualifiers/src/main/java/org/javaee7/cdi/alternatives/PersonalGreeting.java new file mode 100644 index 000000000..1d54eb82b --- /dev/null +++ b/cdi/alternatives-qualifiers/src/main/java/org/javaee7/cdi/alternatives/PersonalGreeting.java @@ -0,0 +1,13 @@ +package org.javaee7.cdi.alternatives; + + +/** + * @author Radim Hanus + */ +@Personal +public class PersonalGreeting implements Greeting { + @Override + public String greet(String name) { + return "Hi " + name; + } +} diff --git a/cdi/alternatives-qualifiers/src/test/java/org/javaee7/cdi/alternatives/AlternativeGreetingTest.java b/cdi/alternatives-qualifiers/src/test/java/org/javaee7/cdi/alternatives/AlternativeGreetingTest.java new file mode 100644 index 000000000..7c2bd36c7 --- /dev/null +++ b/cdi/alternatives-qualifiers/src/test/java/org/javaee7/cdi/alternatives/AlternativeGreetingTest.java @@ -0,0 +1,48 @@ +package org.javaee7.cdi.alternatives; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.inject.Inject; + +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.junit.Assert.assertThat; + + +/** + * @author Radim Hanus + */ +@RunWith(Arquillian.class) +public class AlternativeGreetingTest { + @Deployment + public static Archive deploy() { + return ShrinkWrap.create(JavaArchive.class) + .addClasses(Greeting.class, DefaultGreeting.class, AlternativeGreeting.class, + Personal.class, PersonalGreeting.class, AlternativePersonalGreeting.class) + .addAsManifestResource("beans-default-alternative.xml", "beans.xml"); + } + + @Inject + private Greeting greeting; + + @Inject + @Personal + private Greeting personalGreeting; + + @Test + public void should_greeting_be_alternative() throws Exception { + // alternative implementation is defined in beans.xml + assertThat(greeting, instanceOf(AlternativeGreeting.class)); + } + + @Test + public void should_personal_greeting_be_default() throws Exception { + // qualified implementation because only default alternative is defined in beans.xml + assertThat(personalGreeting, instanceOf(PersonalGreeting.class)); + } +} diff --git a/cdi/alternatives-qualifiers/src/test/java/org/javaee7/cdi/alternatives/AlternativePersonalGreetingTest.java b/cdi/alternatives-qualifiers/src/test/java/org/javaee7/cdi/alternatives/AlternativePersonalGreetingTest.java new file mode 100644 index 000000000..45d5c1796 --- /dev/null +++ b/cdi/alternatives-qualifiers/src/test/java/org/javaee7/cdi/alternatives/AlternativePersonalGreetingTest.java @@ -0,0 +1,48 @@ +package org.javaee7.cdi.alternatives; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.inject.Inject; + +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.junit.Assert.assertThat; + + +/** + * @author Radim Hanus + */ +@RunWith(Arquillian.class) +public class AlternativePersonalGreetingTest { + @Deployment + public static Archive deploy() { + return ShrinkWrap.create(JavaArchive.class) + .addClasses(Greeting.class, DefaultGreeting.class, AlternativeGreeting.class, + Personal.class, PersonalGreeting.class, AlternativePersonalGreeting.class) + .addAsManifestResource("beans-personal-alternative.xml", "beans.xml"); + } + + @Inject + private Greeting greeting; + + @Inject + @Personal + private Greeting personalGreeting; + + @Test + public void should_greeting_be_default() throws Exception { + // default implementation because qualified alternative is defined in beans.xml + assertThat(greeting, instanceOf(DefaultGreeting.class)); + } + + @Test + public void should_personal_greeting_be_alternative() throws Exception { + // qualified alternative implementation is defined in beans.xml + assertThat(personalGreeting, instanceOf(AlternativePersonalGreeting.class)); + } +} diff --git a/cdi/alternatives-qualifiers/src/test/java/org/javaee7/cdi/alternatives/DefaultGreetingTest.java b/cdi/alternatives-qualifiers/src/test/java/org/javaee7/cdi/alternatives/DefaultGreetingTest.java new file mode 100644 index 000000000..bf15ffbfd --- /dev/null +++ b/cdi/alternatives-qualifiers/src/test/java/org/javaee7/cdi/alternatives/DefaultGreetingTest.java @@ -0,0 +1,48 @@ +package org.javaee7.cdi.alternatives; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.inject.Inject; + +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.junit.Assert.assertThat; + + +/** + * @author Radim Hanus + */ +@RunWith(Arquillian.class) +public class DefaultGreetingTest { + @Deployment + public static Archive deploy() { + return ShrinkWrap.create(JavaArchive.class) + .addClasses(Greeting.class, DefaultGreeting.class, AlternativeGreeting.class, + Personal.class, PersonalGreeting.class, AlternativePersonalGreeting.class) + .addAsManifestResource("beans-empty.xml", "beans.xml"); + } + + @Inject + private Greeting greeting; + + @Inject + @Personal + private Greeting personalGreeting; + + @Test + public void should_greeting_be_default() throws Exception { + // default implementation because of empty beans.xml + assertThat(greeting, instanceOf(DefaultGreeting.class)); + } + + @Test + public void should_personal_greeting_be_default() throws Exception { + // qualified implementation because of empty beans.xml + assertThat(personalGreeting, instanceOf(PersonalGreeting.class)); + } +} diff --git a/cdi/alternatives-qualifiers/src/test/resources/beans-default-alternative.xml b/cdi/alternatives-qualifiers/src/test/resources/beans-default-alternative.xml new file mode 100644 index 000000000..c954f6819 --- /dev/null +++ b/cdi/alternatives-qualifiers/src/test/resources/beans-default-alternative.xml @@ -0,0 +1,13 @@ + + + + + + org.javaee7.cdi.alternatives.AlternativeGreeting + + + \ No newline at end of file diff --git a/cdi/alternatives-qualifiers/src/test/resources/beans-empty.xml b/cdi/alternatives-qualifiers/src/test/resources/beans-empty.xml new file mode 100644 index 000000000..888faa1dd --- /dev/null +++ b/cdi/alternatives-qualifiers/src/test/resources/beans-empty.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/cdi/alternatives-qualifiers/src/test/resources/beans-personal-alternative.xml b/cdi/alternatives-qualifiers/src/test/resources/beans-personal-alternative.xml new file mode 100644 index 000000000..50bfae493 --- /dev/null +++ b/cdi/alternatives-qualifiers/src/test/resources/beans-personal-alternative.xml @@ -0,0 +1,13 @@ + + + + + + org.javaee7.cdi.alternatives.AlternativePersonalGreeting + + + \ No newline at end of file diff --git a/cdi/pom.xml b/cdi/pom.xml index cad40efd8..1868f8150 100644 --- a/cdi/pom.xml +++ b/cdi/pom.xml @@ -32,6 +32,7 @@ scopes alternatives alternatives-priority + alternatives-qualifiers nobeans-el-injection nobeans-el-injection-flowscoped events