You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by al...@apache.org on 2017/09/30 15:27:36 UTC
svn commit: r1810215 - in /aries/trunk/blueprint/plugin:
blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/
blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/
b...
Author: alien11689
Date: Sat Sep 30 15:27:35 2017
New Revision: 1810215
URL: http://svn.apache.org/viewvc?rev=1810215&view=rev
Log:
[ARIES-1740] Add @ReferenceList annotation
Added:
aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/MemberType.java
aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/ReferenceList.java
- copied, changed from r1810198, aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/Reference.java
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceListHandler.java
- copied, changed from r1810198, aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceHandler.java
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceListInvalidInterface.java
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/BeanWithReferenceLists.java
- copied, changed from r1810013, aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/BeanWithReferences.java
Modified:
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceHandler.java
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceId.java
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceParameters.java
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomDependencyAnnotationHandler
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/BlueprintFileWriterTest.java
Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/MemberType.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/MemberType.java?rev=1810215&view=auto
==============================================================================
--- aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/MemberType.java (added)
+++ aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/MemberType.java Sat Sep 30 15:27:35 2017
@@ -0,0 +1,24 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.aries.blueprint.annotation.service;
+
+public enum MemberType {
+ SERVICE_OBJECT,
+ SERVICE_REFERENCE
+}
Copied: aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/ReferenceList.java (from r1810198, aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/Reference.java)
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/ReferenceList.java?p2=aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/ReferenceList.java&p1=aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/Reference.java&r1=1810198&r2=1810215&rev=1810215&view=diff
==============================================================================
--- aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/Reference.java (original)
+++ aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/ReferenceList.java Sat Sep 30 15:27:35 2017
@@ -24,18 +24,24 @@ import java.lang.annotation.RetentionPol
import java.lang.annotation.Target;
/**
- * Annotate dependency to inject a service.
+ * Annotate dependency to inject a list of services.
*/
@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
-public @interface Reference {
+public @interface ReferenceList {
+
+ /**
+ * @return service interface class to inject
+ */
+ Class<?> referenceInterface();
+
/**
- * @return filter on reference
+ * @return filter on reference-list
*/
String filter() default "";
/**
- * @return component-name on reference
+ * @return component-name on reference-list
*/
String componentName() default "";
@@ -45,7 +51,7 @@ public @interface Reference {
Availability availability() default Availability.MANDATORY;
/**
- * @return timeout on reference - negative value means blueprint default
+ * @return should proxy or service reference be injected
*/
- long timeout() default Long.MIN_VALUE;
+ MemberType memberType() default MemberType.SERVICE_OBJECT;
}
Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceHandler.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceHandler.java?rev=1810215&r1=1810214&r2=1810215&view=diff
==============================================================================
--- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceHandler.java (original)
+++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceHandler.java Sat Sep 30 15:27:35 2017
@@ -66,10 +66,10 @@ public class ReferenceHandler implements
if (!"".equals(reference.componentName())) {
writer.writeAttribute("component-name", reference.componentName());
}
- if (needTimeout(reference)) {
+ if (needTimeout(reference.timeout())) {
writer.writeAttribute("timeout", String.valueOf(reference.timeout()));
}
- if (needAvailability(contextEnricher, reference)) {
+ if (needAvailability(contextEnricher, reference.availability())) {
writer.writeAttribute("availability", reference.availability().name().toLowerCase());
}
}
Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceId.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceId.java?rev=1810215&r1=1810214&r2=1810215&view=diff
==============================================================================
--- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceId.java (original)
+++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceId.java Sat Sep 30 15:27:35 2017
@@ -18,7 +18,10 @@
*/
package org.apache.aries.blueprint.plugin.handlers.blueprint.service;
+import org.apache.aries.blueprint.annotation.service.Availability;
+import org.apache.aries.blueprint.annotation.service.MemberType;
import org.apache.aries.blueprint.annotation.service.Reference;
+import org.apache.aries.blueprint.annotation.service.ReferenceList;
import org.apache.aries.blueprint.plugin.spi.ContextEnricher;
import static org.apache.aries.blueprint.plugin.handlers.blueprint.service.ReferenceParameters.needAvailability;
@@ -28,25 +31,58 @@ class ReferenceId {
static String generateReferenceId(Class clazz, Reference reference, ContextEnricher contextEnricher) {
StringBuilder sb = new StringBuilder();
writeBeanNameFromSimpleName(sb, clazz.getSimpleName());
+ appendFilter(sb, reference.filter());
+ appendComponentName(sb, reference.componentName());
+ appendAvailability(sb, reference.availability(), contextEnricher);
+ appendTimeout(sb, reference.timeout());
+ return sb.toString().replaceAll("-+$", "");
+ }
+
+ private static void appendTimeout(StringBuilder sb, long timeout) {
sb.append("-");
- if (!"".equals(reference.filter())) {
- writeEscapedFilter(sb, reference.filter());
+ if (needTimeout(timeout)) {
+ sb.append(timeout);
}
+ }
+
+ private static void appendAvailability(StringBuilder sb, Availability availability, ContextEnricher contextEnricher) {
sb.append("-");
- if (!"".equals(reference.componentName())) {
- sb.append(reference.componentName());
+ if (needAvailability(contextEnricher, availability)) {
+ sb.append(availability.name().toLowerCase());
}
+ }
+
+ private static void appendComponentName(StringBuilder sb, String componentName) {
sb.append("-");
- if (needAvailability(contextEnricher, reference)) {
- sb.append(reference.availability().name().toLowerCase());
+ if (!"".equals(componentName)) {
+ sb.append(componentName);
}
+ }
+
+ private static void appendFilter(StringBuilder sb, String filter) {
sb.append("-");
- if (needTimeout(reference)) {
- sb.append(reference.timeout());
+ if (!"".equals(filter)) {
+ writeEscapedFilter(sb, filter);
}
+ }
+
+ static String generateReferenceListId(ReferenceList referenceList, ContextEnricher contextEnricher) {
+ StringBuilder sb = new StringBuilder("listOf-");
+ writeBeanNameFromSimpleName(sb, referenceList.referenceInterface().getSimpleName());
+ appendFilter(sb, referenceList.filter());
+ appendComponentName(sb, referenceList.componentName());
+ appendAvailability(sb, referenceList.availability(), contextEnricher);
+ appendMemberType(sb, referenceList.memberType());
return sb.toString().replaceAll("-+$", "");
}
+ private static void appendMemberType(StringBuilder sb, MemberType memberType) {
+ sb.append("-");
+ if (memberType == MemberType.SERVICE_REFERENCE) {
+ sb.append("reference");
+ }
+ }
+
private static void writeBeanNameFromSimpleName(StringBuilder sb, String name) {
sb.append(name.substring(0, 1).toLowerCase());
sb.append(name.substring(1, name.length()));
Copied: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceListHandler.java (from r1810198, aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceHandler.java)
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceListHandler.java?p2=aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceListHandler.java&p1=aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceHandler.java&r1=1810198&r2=1810215&rev=1810215&view=diff
==============================================================================
--- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceHandler.java (original)
+++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceListHandler.java Sat Sep 30 15:27:35 2017
@@ -18,7 +18,8 @@
*/
package org.apache.aries.blueprint.plugin.handlers.blueprint.service;
-import org.apache.aries.blueprint.annotation.service.Reference;
+import org.apache.aries.blueprint.annotation.service.MemberType;
+import org.apache.aries.blueprint.annotation.service.ReferenceList;
import org.apache.aries.blueprint.plugin.spi.ContextEnricher;
import org.apache.aries.blueprint.plugin.spi.CustomDependencyAnnotationHandler;
import org.apache.aries.blueprint.plugin.spi.XmlWriter;
@@ -28,56 +29,59 @@ import javax.xml.stream.XMLStreamWriter;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.util.List;
import static org.apache.aries.blueprint.plugin.handlers.blueprint.service.ReferenceParameters.needAvailability;
-import static org.apache.aries.blueprint.plugin.handlers.blueprint.service.ReferenceParameters.needTimeout;
-public class ReferenceHandler implements CustomDependencyAnnotationHandler<Reference> {
+public class ReferenceListHandler implements CustomDependencyAnnotationHandler<ReferenceList> {
@Override
- public Class<Reference> getAnnotation() {
- return Reference.class;
+ public Class<ReferenceList> getAnnotation() {
+ return ReferenceList.class;
}
@Override
public String handleDependencyAnnotation(AnnotatedElement annotatedElement, String name, ContextEnricher contextEnricher) {
- Reference reference = annotatedElement.getAnnotation(Reference.class);
+ ReferenceList referenceList = annotatedElement.getAnnotation(ReferenceList.class);
final Class<?> clazz = getClass(annotatedElement);
- return handleDependencyAnnotation(clazz, reference, name, contextEnricher);
+ return handleDependencyAnnotation(clazz, referenceList, name, contextEnricher);
}
@Override
- public String handleDependencyAnnotation(final Class<?> clazz, Reference reference, String name, ContextEnricher contextEnricher) {
- final String id = name != null ? name : ReferenceId.generateReferenceId(clazz, reference, contextEnricher);
+ public String handleDependencyAnnotation(final Class<?> clazz, ReferenceList referenceList, String name, ContextEnricher contextEnricher) {
+ if (clazz != List.class) {
+ throw new ReferenceListInvalidInterface(clazz);
+ }
+ final String id = name != null ? name : ReferenceId.generateReferenceListId(referenceList, contextEnricher);
contextEnricher.addBean(id, clazz);
- contextEnricher.addBlueprintContentWriter(getWriterId(id, clazz), getXmlWriter(id, clazz, reference, contextEnricher));
+ contextEnricher.addBlueprintContentWriter(getWriterId(id, referenceList.referenceInterface()), getXmlWriter(id, referenceList, contextEnricher));
return id;
}
- private XmlWriter getXmlWriter(final String id, final Class<?> clazz, final Reference reference, final ContextEnricher contextEnricher) {
+ private XmlWriter getXmlWriter(final String id, final ReferenceList referenceList, final ContextEnricher contextEnricher) {
return new XmlWriter() {
@Override
public void write(XMLStreamWriter writer) throws XMLStreamException {
- writer.writeEmptyElement("reference");
+ writer.writeEmptyElement("reference-list");
writer.writeAttribute("id", id);
- writer.writeAttribute("interface", clazz.getName());
- if (!"".equals(reference.filter())) {
- writer.writeAttribute("filter", reference.filter());
+ writer.writeAttribute("interface", referenceList.referenceInterface().getName());
+ if (!"".equals(referenceList.filter())) {
+ writer.writeAttribute("filter", referenceList.filter());
}
- if (!"".equals(reference.componentName())) {
- writer.writeAttribute("component-name", reference.componentName());
+ if (!"".equals(referenceList.componentName())) {
+ writer.writeAttribute("component-name", referenceList.componentName());
}
- if (needTimeout(reference)) {
- writer.writeAttribute("timeout", String.valueOf(reference.timeout()));
+ if (needAvailability(contextEnricher, referenceList.availability())) {
+ writer.writeAttribute("availability", referenceList.availability().name().toLowerCase());
}
- if (needAvailability(contextEnricher, reference)) {
- writer.writeAttribute("availability", reference.availability().name().toLowerCase());
+ if (referenceList.memberType() == MemberType.SERVICE_REFERENCE) {
+ writer.writeAttribute("member-type", "service-reference");
}
}
};
}
private String getWriterId(String id, Class<?> clazz) {
- return "reference/" + clazz.getName() + "/" + id;
+ return "referenceList/" + clazz.getName() + "/" + id;
}
private Class<?> getClass(AnnotatedElement annotatedElement) {
Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceListInvalidInterface.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceListInvalidInterface.java?rev=1810215&view=auto
==============================================================================
--- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceListInvalidInterface.java (added)
+++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceListInvalidInterface.java Sat Sep 30 15:27:35 2017
@@ -0,0 +1,27 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.aries.blueprint.plugin.handlers.blueprint.service;
+
+import java.util.List;
+
+public class ReferenceListInvalidInterface extends RuntimeException {
+ public ReferenceListInvalidInterface(Class<?> received) {
+ super("Reference list must be " + List.class.getName() + " but received " + received.getName());
+ }
+}
Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceParameters.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceParameters.java?rev=1810215&r1=1810214&r2=1810215&view=diff
==============================================================================
--- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceParameters.java (original)
+++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceParameters.java Sat Sep 30 15:27:35 2017
@@ -18,20 +18,18 @@
*/
package org.apache.aries.blueprint.plugin.handlers.blueprint.service;
-import org.apache.aries.blueprint.annotation.service.Reference;
import org.apache.aries.blueprint.plugin.spi.Availability;
import org.apache.aries.blueprint.plugin.spi.ContextEnricher;
class ReferenceParameters {
- static boolean needTimeout(Reference reference) {
- return reference.timeout() >= 0;
+ static boolean needTimeout(long timeout) {
+ return timeout >= 0;
}
- static boolean needAvailability(ContextEnricher contextEnricher, Reference reference) {
- org.apache.aries.blueprint.annotation.service.Availability availability = reference.availability();
+ static boolean needAvailability(ContextEnricher contextEnricher, org.apache.aries.blueprint.annotation.service.Availability availability) {
Availability defaultAvailability = contextEnricher.getBlueprintConfiguration().getDefaultAvailability();
return defaultAvailability == null && availability.equals(org.apache.aries.blueprint.annotation.service.Availability.OPTIONAL) ||
- defaultAvailability != null && !defaultAvailability.name().equals(reference.availability().name());
+ defaultAvailability != null && !defaultAvailability.name().equals(availability.name());
}
}
Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomDependencyAnnotationHandler
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomDependencyAnnotationHandler?rev=1810215&r1=1810214&r2=1810215&view=diff
==============================================================================
--- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomDependencyAnnotationHandler (original)
+++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomDependencyAnnotationHandler Sat Sep 30 15:27:35 2017
@@ -16,4 +16,5 @@
#
org.apache.aries.blueprint.plugin.handlers.blueprint.config.ConfigPropertiesHandler
-org.apache.aries.blueprint.plugin.handlers.blueprint.service.ReferenceHandler
\ No newline at end of file
+org.apache.aries.blueprint.plugin.handlers.blueprint.service.ReferenceHandler
+org.apache.aries.blueprint.plugin.handlers.blueprint.service.ReferenceListHandler
\ No newline at end of file
Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/BlueprintFileWriterTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/BlueprintFileWriterTest.java?rev=1810215&r1=1810214&r2=1810215&view=diff
==============================================================================
--- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/BlueprintFileWriterTest.java (original)
+++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/BlueprintFileWriterTest.java Sat Sep 30 15:27:35 2017
@@ -1217,6 +1217,150 @@ public class BlueprintFileWriterTest {
assertXpathEquals(service, "service-properties/entry[@key='service.ranking']/value/text()", "5");
}
+ @Test
+ public void shouldInjectReferenceListViaField() throws Exception {
+ Node bean = getBeanById("beanWithReferenceLists");
+ assertXpathEquals(bean, "property[@name='ref1Field']/@ref", "listOf-ref1");
+ assertXpathEquals(bean, "property[@name='myRef1Field']/@ref", "myRef1List");
+ assertXpathEquals(bean, "property[@name='myRef1FieldAllProps']/@ref", "listOf-ref1-a453-r1-optional");
+ assertXpathEquals(bean, "property[@name='myRef1FieldFilter']/@ref", "listOf-ref1-x1---reference");
+ }
+
+ @Test
+ public void shouldGenerateReferenceListFromBeanField() throws Exception {
+ Node ref1 = getReferenceListById("listOf-ref1");
+ assertXpathEquals(ref1, "@interface", Ref1.class.getName());
+ assertXpathEquals(ref1, "count(@member-type)", "0");
+
+ Node myRef1 = getReferenceListById("myRef1List");
+ assertXpathEquals(myRef1, "@interface", Ref1.class.getName());
+
+ Node ref1a453r1 = getReferenceListById("listOf-ref1-a453-r1-optional");
+ assertXpathEquals(ref1a453r1, "@interface", Ref1.class.getName());
+ assertXpathEquals(ref1a453r1, "@component-name", "r1");
+ assertXpathEquals(ref1a453r1, "@filter", "(a=453)");
+ assertXpathEquals(ref1a453r1, "@availability", "optional");
+
+ Node ref1x1 = getReferenceListById("listOf-ref1-x1---reference");
+ assertXpathEquals(ref1x1, "@interface", Ref1.class.getName());
+ assertXpathEquals(ref1x1, "@filter", "(x=1)");
+ assertXpathEquals(ref1x1, "count(@component-name)", "0");
+ assertXpathEquals(ref1x1, "@member-type", "service-reference");
+ }
+
+ @Test
+ public void shouldInjectReferenceListViaSetter() throws Exception {
+ Node bean = getBeanById("beanWithReferenceLists");
+ assertXpathEquals(bean, "property[@name='ref2Setter']/@ref", "listOf-ref2");
+ assertXpathEquals(bean, "property[@name='ref2SetterNamed']/@ref", "myRef2List");
+ assertXpathEquals(bean, "property[@name='ref2SetterFull']/@ref", "listOf-ref2-b453-r2-optional");
+ assertXpathEquals(bean, "property[@name='ref2SetterComponent']/@ref", "listOf-ref2--blablabla--reference");
+ }
+
+ @Test
+ public void shouldGenerateReferenceListFromBeanSetter() throws Exception {
+ Node ref2 = getReferenceListById("listOf-ref2");
+ assertXpathEquals(ref2, "@interface", Ref2.class.getName());
+ assertXpathEquals(ref2, "count(@member-type)", "0");
+
+ Node myRef2 = getReferenceListById("myRef2List");
+ assertXpathEquals(myRef2, "@interface", Ref2.class.getName());
+
+ Node ref1b453r2 = getReferenceListById("listOf-ref2-b453-r2-optional");
+ assertXpathEquals(ref1b453r2, "@interface", Ref2.class.getName());
+ assertXpathEquals(ref1b453r2, "@component-name", "r2");
+ assertXpathEquals(ref1b453r2, "@filter", "(b=453)");
+ assertXpathEquals(ref1b453r2, "@availability", "optional");
+
+ Node ref2blablabla = getReferenceListById("listOf-ref2--blablabla--reference");
+ assertXpathEquals(ref2blablabla, "@interface", Ref2.class.getName());
+ assertXpathEquals(ref2blablabla, "@component-name", "blablabla");
+ assertXpathEquals(ref2blablabla, "count(@filter)", "0");
+ assertXpathEquals(ref2blablabla, "@member-type", "service-reference");
+ }
+
+ @Test
+ public void shouldInjectReferenceListViaConstructor() throws Exception {
+ Node bean = getBeanById("beanWithReferenceLists");
+ assertXpathEquals(bean, "argument[1]/@ref", "listOf-ref1");
+ assertXpathEquals(bean, "argument[2]/@ref", "listOf-ref2---optional-reference");
+ assertXpathEquals(bean, "argument[3]/@ref", "listOf-ref1-y3");
+ assertXpathEquals(bean, "argument[4]/@ref", "listOf-ref1--compForConstr");
+ assertXpathEquals(bean, "argument[5]/@ref", "listOf-ref1-y3-compForConstr");
+ assertXpathEquals(bean, "argument[6]/@ref", "ref1ListForCons");
+ }
+
+ @Test
+ public void shouldGenerateReferenceListFromBeanConstructor() throws Exception {
+ Node ref1 = getReferenceListById("listOf-ref1");
+ assertXpathEquals(ref1, "@interface", Ref1.class.getName());
+ assertXpathEquals(ref1, "count(@member-type)", "0");
+
+ Node ref2optional20000 = getReferenceListById("listOf-ref2---optional-reference");
+ assertXpathEquals(ref2optional20000, "@interface", Ref2.class.getName());
+ assertXpathEquals(ref2optional20000, "@availability", "optional");
+ assertXpathEquals(ref2optional20000, "@member-type", "service-reference");
+
+ Node ref1y3 = getReferenceListById("listOf-ref1-y3");
+ assertXpathEquals(ref1y3, "@interface", Ref1.class.getName());
+ assertXpathEquals(ref1y3, "count(@component-name)", "0");
+ assertXpathEquals(ref1y3, "@filter", "(y=3)");
+
+ Node ref1compForConstr = getReferenceListById("listOf-ref1--compForConstr");
+ assertXpathEquals(ref1compForConstr, "@interface", Ref1.class.getName());
+ assertXpathEquals(ref1compForConstr, "@component-name", "compForConstr");
+ assertXpathEquals(ref1compForConstr, "count(@filter)", "0");
+
+ Node ref1y3compForConstr = getReferenceListById("listOf-ref1-y3-compForConstr");
+ assertXpathEquals(ref1y3compForConstr, "@interface", Ref1.class.getName());
+ assertXpathEquals(ref1y3compForConstr, "@component-name", "compForConstr");
+ assertXpathEquals(ref1y3compForConstr, "@filter", "(y=3)");
+
+ Node ref1ForCons = getReferenceListById("ref1ListForCons");
+ assertXpathEquals(ref1ForCons, "@interface", Ref1.class.getName());
+ assertXpathEquals(ref1ForCons, "@availability", "optional");
+ }
+
+ @Test
+ public void shouldInjectReferenceListToProducedBean() throws Exception {
+ Node bean = getBeanById("producedWithReferenceLists");
+ assertXpathEquals(bean, "argument[1]/@ref", "listOf-ref3");
+ assertXpathEquals(bean, "argument[2]/@ref", "listOf-ref4---optional");
+ assertXpathEquals(bean, "argument[3]/@ref", "listOf-ref3-y3");
+ assertXpathEquals(bean, "argument[4]/@ref", "listOf-ref3--compForProduces");
+ assertXpathEquals(bean, "argument[5]/@ref", "listOf-ref3-y3-compForProduces--reference");
+ assertXpathEquals(bean, "argument[6]/@ref", "ref3ListForProduces");
+ }
+
+ @Test
+ public void shouldGenerateReferenceListFromProducedBean() throws Exception {
+ Node ref3 = getReferenceListById("listOf-ref3");
+ assertXpathEquals(ref3, "@interface", Ref3.class.getName());
+ assertXpathEquals(ref3, "count(@member-type)", "0");
+
+ Node ref4optional = getReferenceListById("listOf-ref4---optional");
+ assertXpathEquals(ref4optional, "@interface", Ref4.class.getName());
+ assertXpathEquals(ref4optional, "@availability", "optional");
+
+ Node ref3y3 = getReferenceListById("listOf-ref3-y3");
+ assertXpathEquals(ref3y3, "@interface", Ref3.class.getName());
+ assertXpathEquals(ref3y3, "count(@component-name)", "0");
+ assertXpathEquals(ref3y3, "@filter", "(y=3)");
+
+ Node ref3compForProduces = getReferenceListById("listOf-ref3--compForProduces");
+ assertXpathEquals(ref3compForProduces, "@interface", Ref3.class.getName());
+ assertXpathEquals(ref3compForProduces, "@component-name", "compForProduces");
+ assertXpathEquals(ref3compForProduces, "count(@filter)", "0");
+
+ Node ref3y3compForProduces = getReferenceListById("listOf-ref3-y3-compForProduces--reference");
+ assertXpathEquals(ref3y3compForProduces, "@interface", Ref3.class.getName());
+ assertXpathEquals(ref3y3compForProduces, "@component-name", "compForProduces");
+ assertXpathEquals(ref3y3compForProduces, "@filter", "(y=3)");
+ assertXpathEquals(ref3y3compForProduces, "@member-type", "service-reference");
+
+ Node ref1ForCons = getReferenceListById("ref3ListForProduces");
+ assertXpathEquals(ref1ForCons, "@interface", Ref3.class.getName());
+ }
private void assertXpathDoesNotExist(Node node, String xpathExpression) throws XPathExpressionException {
assertXpathEquals(node, "count(" + xpathExpression + ")", "0");
}
Copied: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/BeanWithReferenceLists.java (from r1810013, aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/BeanWithReferences.java)
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/BeanWithReferenceLists.java?p2=aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/BeanWithReferenceLists.java&p1=aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/BeanWithReferences.java&r1=1810013&r2=1810215&rev=1810215&view=diff
==============================================================================
--- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/BeanWithReferences.java (original)
+++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/BeanWithReferenceLists.java Sat Sep 30 15:27:35 2017
@@ -19,74 +19,77 @@
package org.apache.aries.blueprint.plugin.test.reference;
import org.apache.aries.blueprint.annotation.service.Availability;
+import org.apache.aries.blueprint.annotation.service.MemberType;
import org.apache.aries.blueprint.annotation.service.Reference;
+import org.apache.aries.blueprint.annotation.service.ReferenceList;
+import org.osgi.framework.ServiceReference;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
+import java.util.List;
@Singleton
-public class BeanWithReferences {
+public class BeanWithReferenceLists {
@Inject
- @Reference
- Ref1 ref1Field;
+ @ReferenceList(referenceInterface = Ref1.class)
+ List<Ref1> ref1Field;
@Inject
- @Reference
- @Named("myRef1")
- Ref1 myRef1Field;
+ @ReferenceList(referenceInterface = Ref1.class)
+ @Named("myRef1List")
+ List<Ref1> myRef1Field;
@Inject
- @Reference(filter = "(a=453)", componentName = "r1", timeout = 2000, availability = Availability.OPTIONAL)
- Ref1 myRef1FieldAllProps;
+ @ReferenceList(referenceInterface = Ref1.class, filter = "(a=453)", componentName = "r1", availability = Availability.OPTIONAL)
+ List<Ref1> myRef1FieldAllProps;
@Inject
- @Reference(filter = "(x=1)")
- Ref1 myRef1FieldFilter;
+ @ReferenceList(referenceInterface = Ref1.class, filter = "(x=1)", memberType = MemberType.SERVICE_REFERENCE)
+ List<ServiceReference<Ref1>> myRef1FieldFilter;
@Inject
- @Reference
- public void setRef2Setter(Ref2 ref) {
+ @ReferenceList(referenceInterface = Ref2.class)
+ public void setRef2Setter(List<Ref2> ref) {
}
@Inject
- @Reference
- @Named("myRef2")
- public void setRef2SetterNamed(Ref2 ref) {
+ @ReferenceList(referenceInterface = Ref2.class)
+ @Named("myRef2List")
+ public void setRef2SetterNamed(List<Ref2> ref) {
}
@Inject
- @Reference(filter = "(b=453)", componentName = "r2", timeout = 1000, availability = Availability.OPTIONAL)
- public void setRef2SetterFull(Ref2 ref) {
+ @ReferenceList(referenceInterface = Ref2.class, filter = "(b=453)", componentName = "r2", availability = Availability.OPTIONAL)
+ public void setRef2SetterFull(List<Ref2> ref) {
}
@Inject
- @Reference(componentName = "blablabla")
- public void setRef2SetterComponent(Ref2 ref) {
+ @ReferenceList(referenceInterface = Ref2.class, componentName = "blablabla", memberType = MemberType.SERVICE_REFERENCE)
+ public void setRef2SetterComponent(List<ServiceReference<Ref2>> ref) {
}
- public BeanWithReferences(
- @Reference Ref1 ref1,
- @Reference(availability = Availability.OPTIONAL, timeout = 20000) Ref2 ref2,
- @Reference(filter = "(y=3)") Ref1 ref1x,
- @Reference(componentName = "compForConstr") Ref1 ref1c,
- @Reference(filter = "(y=3)", componentName = "compForConstr") Ref1 ref1fc,
- @Reference(availability = Availability.OPTIONAL) @Named("ref1ForCons") Ref1 ref1Named
+ public BeanWithReferenceLists(
+ @ReferenceList(referenceInterface = Ref1.class) List<Ref1> ref1,
+ @ReferenceList(referenceInterface = Ref2.class, availability = Availability.OPTIONAL, memberType = MemberType.SERVICE_REFERENCE) List<ServiceReference<Ref2>> ref2,
+ @ReferenceList(referenceInterface = Ref1.class, filter = "(y=3)") List<Ref1> ref1x,
+ @ReferenceList(referenceInterface = Ref1.class, componentName = "compForConstr") List<Ref1> ref1c,
+ @ReferenceList(referenceInterface = Ref1.class, filter = "(y=3)", componentName = "compForConstr") List<Ref1> ref1fc,
+ @ReferenceList(referenceInterface = Ref1.class, availability = Availability.OPTIONAL) @Named("ref1ListForCons") List<Ref1> ref1Named
) {
}
@Produces
- @Named("producedWithReferences")
+ @Named("producedWithReferenceLists")
public String create(
- @Reference Ref3 ref3,
- @Reference(timeout = 20000) Ref4 ref4,
- @Reference(availability = Availability.OPTIONAL) Ref4 ref4a,
- @Reference(filter = "(y=3)") Ref3 ref3f,
- @Reference(componentName = "compForProduces") Ref3 ref3c,
- @Reference(filter = "(y=3)", componentName = "compForProduces") Ref3 ref3fc,
- @Reference(timeout = 1000) @Named("ref3ForProduces") Ref3 ref3Named
+ @ReferenceList(referenceInterface = Ref3.class) List<Ref3> ref3,
+ @ReferenceList(referenceInterface = Ref4.class, availability = Availability.OPTIONAL) List<Ref4> ref4a,
+ @ReferenceList(referenceInterface = Ref3.class, filter = "(y=3)") List<Ref3> ref3f,
+ @ReferenceList(referenceInterface = Ref3.class, componentName = "compForProduces") List<Ref3> ref3c,
+ @ReferenceList(referenceInterface = Ref3.class, filter = "(y=3)", componentName = "compForProduces", memberType = MemberType.SERVICE_REFERENCE) List<Ref3> ref3fc,
+ @ReferenceList(referenceInterface = Ref3.class) @Named("ref3ListForProduces") List<Ref3> ref3Named
) {
return null;
}