Author: alien11689 Date: Thu Sep 28 17:19:00 2017 New Revision: 1810013 URL: http://svn.apache.org/viewvc?rev=1810013&view=rev Log: [ARIES-1742] Create @Reference annotation for reference element generation
Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/ aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/Availability.java - copied, changed from r1809640, aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/referencelistener/Availability.java 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/bean/ - copied from r1810012, aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/bean/ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/collection/ - copied from r1810012, aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/collection/ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ - copied from r1810012, aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/config/ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/init/ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/init/BlueprintInitialization.java - copied, changed from r1810012, aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/BlueprintInitialization.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/referencelistener/ - copied from r1810012, aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/referencelistener/ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ 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/test/java/org/apache/aries/blueprint/plugin/test/reference/ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/BeanWithReferences.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref1.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref2.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref3.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref4.java Removed: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/bean/ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/BlueprintInitialization.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/collection/ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/config/ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/referencelistener/ Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/pom.xml aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/referencelistener/ReferenceListener.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/pom.xml aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/bean/BeanHandler.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/collection/CollectionInjectHandler.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigAnnotationHandler.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigPropertiesHandler.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigPropertyInjectionHandler.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigWriter.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/referencelistener/ReferenceListenerDefinition.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/referencelistener/ReferenceListenerHandler.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/AnnotationHelper.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanFinder aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CollectionDependencyAnnotationHandler aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.ContextInitializationHandler 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/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.FactoryMethodFinder aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.NamedLikeHandler aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.ValueInjectionHandler aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/BlueprintFileWriterTest.java Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/pom.xml URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/pom.xml?rev=1810013&r1=1810012&r2=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/pom.xml (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/pom.xml Thu Sep 28 17:19:00 2017 @@ -23,7 +23,7 @@ <groupId>org.apache.aries</groupId> <artifactId>parent</artifactId> <version>2.0.1</version> - <relativePath /> + <relativePath/> </parent> <groupId>org.apache.aries.blueprint</groupId> <artifactId>blueprint-maven-plugin-annotation</artifactId> @@ -33,8 +33,7 @@ <scm> <connection>scm:svn:http://svn.apache.org/repos/asf/aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation</connection> - <developerConnection>scm:svn:https://svn.apache.org/repos/asf/aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation - </developerConnection> + <developerConnection>scm:svn:https://svn.apache.org/repos/asf/aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation</developerConnection> <url>http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation</url> </scm> @@ -43,10 +42,11 @@ org.apache.aries.blueprint.annotation.bean, org.apache.aries.blueprint.annotation.collection, org.apache.aries.blueprint.annotation.config, - org.apache.aries.blueprint.annotation.referencelistener + org.apache.aries.blueprint.annotation.referencelistener, + org.apache.aries.blueprint.annotation.service </aries.osgi.export.pkg> - <aries.osgi.import.pkg /> - <aries.osgi.private.pkg /> - <lastReleaseVersion>1.1.0</lastReleaseVersion> + <aries.osgi.import.pkg/> + <aries.osgi.private.pkg/> + <lastReleaseVersion>1.2.0</lastReleaseVersion> </properties> </project> Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/referencelistener/ReferenceListener.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/referencelistener/ReferenceListener.java?rev=1810013&r1=1810012&r2=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/referencelistener/ReferenceListener.java (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/referencelistener/ReferenceListener.java Thu Sep 28 17:19:00 2017 @@ -25,7 +25,7 @@ import java.lang.annotation.Target; /** * Annotating any class with this will create a - * reference or referenclist element in blueprint + * reference or reference-list element in blueprint * with annotated bean as reference-listener. */ @Target({ElementType.TYPE, ElementType.METHOD}) Copied: aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/Availability.java (from r1809640, aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/referencelistener/Availability.java) URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/Availability.java?p2=aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/Availability.java&p1=aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/referencelistener/Availability.java&r1=1809640&r2=1810013&rev=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/referencelistener/Availability.java (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/Availability.java Thu Sep 28 17:19:00 2017 @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.aries.blueprint.annotation.referencelistener; +package org.apache.aries.blueprint.annotation.service; public enum Availability { MANDATORY, Added: 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/Reference.java?rev=1810013&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/Reference.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/Reference.java Thu Sep 28 17:19:00 2017 @@ -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 + * <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; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Annotate dependency to inject service. + * It will generate reference element. + */ +@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface Reference { + /** + * @return filter on reference + */ + String filter() default ""; + + /** + * @return component-name on reference + */ + String componentName() default ""; + + /** + * @return if existence of at least one service is necessary + */ + Availability availability() default Availability.MANDATORY; + + /** + * @return timeout on reference - negative value means blueprint default + */ + long timeout() default Long.MIN_VALUE; +} Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/pom.xml URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/pom.xml?rev=1810013&r1=1810012&r2=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/pom.xml (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/pom.xml Thu Sep 28 17:19:00 2017 @@ -45,7 +45,8 @@ <blueprint-maven-plugin-spi.version>1.1.0</blueprint-maven-plugin-spi.version> <blueprint-maven-plugin-spring-handlers.version>1.0.0</blueprint-maven-plugin-spring-handlers.version> - <blueprint-maven-plugin-annotation.version>1.2.0</blueprint-maven-plugin-annotation.version> + <blueprint-maven-plugin-annotation.version>1.2.1-SNAPSHOT</blueprint-maven-plugin-annotation.version> + <blueprint-maven-plugin-pax-cdi-handlers.version>1.0.0-SNAPSHOT</blueprint-maven-plugin-pax-cdi-handlers.version> <javax.inject.version>1</javax.inject.version> <javax.transaction-api.version>1.2</javax.transaction-api.version> @@ -66,7 +67,6 @@ <org.apache.aries.transaction.blueprint.version>1.1.1</org.apache.aries.transaction.blueprint.version> <org.apache.aries.jpa.blueprint.aries.version>1.0.2</org.apache.aries.jpa.blueprint.aries.version> <org.apache.aries.blueprint.cm.version>1.0.9</org.apache.aries.blueprint.cm.version> - <blueprint-maven-plugin-pax-cdi-handlers.version>1.0.0-SNAPSHOT</blueprint-maven-plugin-pax-cdi-handlers.version> </properties> <scm> Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/bean/BeanHandler.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/bean/BeanHandler.java?rev=1810013&r1=1810012&r2=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/bean/BeanHandler.java (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/bean/BeanHandler.java Thu Sep 28 17:19:00 2017 @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.aries.blueprint.plugin.handlers.bean; +package org.apache.aries.blueprint.plugin.handlers.blueprint.bean; import org.apache.aries.blueprint.annotation.bean.Activation; import org.apache.aries.blueprint.annotation.bean.Bean; Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/collection/CollectionInjectHandler.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/collection/CollectionInjectHandler.java?rev=1810013&r1=1810012&r2=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/collection/CollectionInjectHandler.java (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/collection/CollectionInjectHandler.java Thu Sep 28 17:19:00 2017 @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.aries.blueprint.plugin.handlers.collection; +package org.apache.aries.blueprint.plugin.handlers.blueprint.collection; import org.apache.aries.blueprint.annotation.collection.CollectionInject; import org.apache.aries.blueprint.plugin.spi.CollectionDependencyAnnotationHandler; Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigAnnotationHandler.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigAnnotationHandler.java?rev=1810013&r1=1810012&r2=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigAnnotationHandler.java (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigAnnotationHandler.java Thu Sep 28 17:19:00 2017 @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.aries.blueprint.plugin.handlers.config; +package org.apache.aries.blueprint.plugin.handlers.blueprint.config; import java.lang.reflect.AnnotatedElement; @@ -24,7 +24,6 @@ import org.apache.aries.blueprint.annota import org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler; import org.apache.aries.blueprint.plugin.spi.BeanEnricher; import org.apache.aries.blueprint.plugin.spi.ContextEnricher; -import org.apache.aries.blueprint.plugin.spi.XmlWriter; public class ConfigAnnotationHandler implements BeanAnnotationHandler<Config>{ Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigPropertiesHandler.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigPropertiesHandler.java?rev=1810013&r1=1810012&r2=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigPropertiesHandler.java (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigPropertiesHandler.java Thu Sep 28 17:19:00 2017 @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.aries.blueprint.plugin.handlers.config; +package org.apache.aries.blueprint.plugin.handlers.blueprint.config; import org.apache.aries.blueprint.annotation.config.ConfigProperties; import org.apache.aries.blueprint.plugin.spi.ContextEnricher; @@ -26,8 +26,6 @@ import org.apache.aries.blueprint.plugin import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import java.lang.reflect.AnnotatedElement; -import java.lang.reflect.Field; -import java.lang.reflect.Method; import java.util.Properties; public class ConfigPropertiesHandler implements CustomDependencyAnnotationHandler<ConfigProperties> { Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigPropertyInjectionHandler.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigPropertyInjectionHandler.java?rev=1810013&r1=1810012&r2=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigPropertyInjectionHandler.java (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigPropertyInjectionHandler.java Thu Sep 28 17:19:00 2017 @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.aries.blueprint.plugin.handlers.config; +package org.apache.aries.blueprint.plugin.handlers.blueprint.config; import org.apache.aries.blueprint.annotation.config.ConfigProperty; Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigWriter.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigWriter.java?rev=1810013&r1=1810012&r2=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigWriter.java (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/config/ConfigWriter.java Thu Sep 28 17:19:00 2017 @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.aries.blueprint.plugin.handlers.config; +package org.apache.aries.blueprint.plugin.handlers.blueprint.config; import org.apache.aries.blueprint.annotation.config.Config; import org.apache.aries.blueprint.annotation.config.DefaultProperty; Copied: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/init/BlueprintInitialization.java (from r1810012, aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/BlueprintInitialization.java) URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/init/BlueprintInitialization.java?p2=aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/init/BlueprintInitialization.java&p1=aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/BlueprintInitialization.java&r1=1810012&r2=1810013&rev=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/BlueprintInitialization.java (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/init/BlueprintInitialization.java Thu Sep 28 17:19:00 2017 @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.aries.blueprint.plugin.handlers.blueprint; +package org.apache.aries.blueprint.plugin.handlers.blueprint.init; import org.apache.aries.blueprint.plugin.spi.ContextEnricher; import org.apache.aries.blueprint.plugin.spi.ContextInitializationHandler; Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/referencelistener/ReferenceListenerDefinition.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/referencelistener/ReferenceListenerDefinition.java?rev=1810013&r1=1810012&r2=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/referencelistener/ReferenceListenerDefinition.java (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/referencelistener/ReferenceListenerDefinition.java Thu Sep 28 17:19:00 2017 @@ -16,14 +16,14 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.aries.blueprint.plugin.handlers.referencelistener; +package org.apache.aries.blueprint.plugin.handlers.blueprint.referencelistener; class ReferenceListenerDefinition { final String ref; final String bind; final String unbind; - public ReferenceListenerDefinition(String ref, String bind, String unbind) { + ReferenceListenerDefinition(String ref, String bind, String unbind) { this.ref = ref; this.bind = getOrNull(bind); this.unbind = getOrNull(unbind); Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/referencelistener/ReferenceListenerHandler.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/referencelistener/ReferenceListenerHandler.java?rev=1810013&r1=1810012&r2=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/referencelistener/ReferenceListenerHandler.java (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/referencelistener/ReferenceListenerHandler.java Thu Sep 28 17:19:00 2017 @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.aries.blueprint.plugin.handlers.referencelistener; +package org.apache.aries.blueprint.plugin.handlers.blueprint.referencelistener; import org.apache.aries.blueprint.annotation.referencelistener.Bind; import org.apache.aries.blueprint.annotation.referencelistener.Cardinality; Added: 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=1810013&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceHandler.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceHandler.java Thu Sep 28 17:19:00 2017 @@ -0,0 +1,144 @@ +/** + * 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 org.apache.aries.blueprint.annotation.service.Reference; +import org.apache.aries.blueprint.plugin.spi.Availability; +import org.apache.aries.blueprint.plugin.spi.ContextEnricher; +import org.apache.aries.blueprint.plugin.spi.CustomDependencyAnnotationHandler; +import org.apache.aries.blueprint.plugin.spi.XmlWriter; + +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamWriter; +import java.lang.reflect.AnnotatedElement; +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +public class ReferenceHandler implements CustomDependencyAnnotationHandler<Reference> { + @Override + public Class<Reference> getAnnotation() { + return Reference.class; + } + + @Override + public String handleDependencyAnnotation(AnnotatedElement annotatedElement, String name, ContextEnricher contextEnricher) { + Reference reference = annotatedElement.getAnnotation(Reference.class); + final Class<?> clazz = getClass(annotatedElement); + final String id = name != null ? name : generateReferenceId(clazz, reference, contextEnricher); + contextEnricher.addBean(id, clazz); + contextEnricher.addBlueprintContentWriter(getWriterId(id, clazz), getXmlWriter(id, clazz, reference, contextEnricher)); + return id; + } + + @Override + public String handleDependencyAnnotation(final Class<?> clazz, Reference reference, String name, ContextEnricher contextEnricher) { + final String id = name != null ? name : generateReferenceId(clazz, reference, contextEnricher); + contextEnricher.addBean(id, clazz); + contextEnricher.addBlueprintContentWriter(getWriterId(id, clazz), getXmlWriter(id, clazz, reference, contextEnricher)); + return id; + } + + private XmlWriter getXmlWriter(final String id, final Class<?> clazz, final Reference reference, final ContextEnricher contextEnricher) { + return new XmlWriter() { + @Override + public void write(XMLStreamWriter writer) throws XMLStreamException { + writer.writeEmptyElement("reference"); + writer.writeAttribute("id", id); + writer.writeAttribute("interface", clazz.getName()); + if (!"".equals(reference.filter())) { + writer.writeAttribute("filter", reference.filter()); + } + if (!"".equals(reference.componentName())) { + writer.writeAttribute("component-name", reference.componentName()); + } + if (needTimeout(reference)) { + writer.writeAttribute("timeout", String.valueOf(reference.timeout())); + } + if (needAvailability(contextEnricher, reference)) { + writer.writeAttribute("availability", reference.availability().name().toLowerCase()); + } + } + }; + } + + private boolean needTimeout(Reference reference) { + return reference.timeout() >= 0; + } + + private boolean needAvailability(ContextEnricher contextEnricher, Reference reference) { + org.apache.aries.blueprint.annotation.service.Availability availability = reference.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()); + } + + private String getWriterId(String id, Class<?> clazz) { + return "reference/" + clazz.getName() + "/" + id; + } + + private Class<?> getClass(AnnotatedElement annotatedElement) { + if (annotatedElement instanceof Class<?>) { + return (Class<?>) annotatedElement; + } + if (annotatedElement instanceof Method) { + return ((Method) annotatedElement).getParameterTypes()[0]; + } + if (annotatedElement instanceof Field) { + return ((Field) annotatedElement).getType(); + } + throw new RuntimeException("Unknown annotated element"); + } + + private String generateReferenceId(Class clazz, Reference reference, ContextEnricher contextEnricher) { + StringBuilder sb = new StringBuilder(); + writeBeanNameFromSimpleName(sb, clazz.getSimpleName()); + sb.append("-"); + if (!"".equals(reference.filter())) { + writeEscapedFilter(sb, reference.filter()); + } + sb.append("-"); + if (!"".equals(reference.componentName())) { + sb.append(reference.componentName()); + } + sb.append("-"); + if (needAvailability(contextEnricher, reference)) { + sb.append(reference.availability().name().toLowerCase()); + } + sb.append("-"); + if (needTimeout(reference)) { + sb.append(reference.timeout()); + } + return sb.toString().replaceAll("-+$", ""); + } + + private static void writeBeanNameFromSimpleName(StringBuilder sb, String name) { + sb.append(name.substring(0, 1).toLowerCase()); + sb.append(name.substring(1, name.length())); + } + + private void writeEscapedFilter(StringBuilder sb, String filter) { + for (int c = 0; c < filter.length(); c++) { + char ch = filter.charAt(c); + if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' || ch >= '0' && ch <= '9') { + sb.append(ch); + } + } + } + +} Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/AnnotationHelper.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/AnnotationHelper.java?rev=1810013&r1=1810012&r2=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/AnnotationHelper.java (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/AnnotationHelper.java Thu Sep 28 17:19:00 2017 @@ -19,7 +19,6 @@ package org.apache.aries.blueprint.plugin.model; import org.apache.aries.blueprint.plugin.handlers.Handlers; -import org.apache.aries.blueprint.plugin.handlers.collection.CollectionInjectHandler; import org.apache.aries.blueprint.plugin.spi.CollectionDependencyAnnotationHandler; import org.apache.aries.blueprint.plugin.spi.InjectLikeHandler; import org.apache.aries.blueprint.plugin.spi.NamedLikeHandler; Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler 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.BeanAnnotationHandler?rev=1810013&r1=1810012&r2=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler Thu Sep 28 17:19:00 2017 @@ -17,6 +17,6 @@ org.apache.aries.blueprint.plugin.handlers.javax.JavaxTransactionFactory org.apache.aries.blueprint.plugin.handlers.javax.CdiTransactionFactory -org.apache.aries.blueprint.plugin.handlers.config.ConfigAnnotationHandler -org.apache.aries.blueprint.plugin.handlers.referencelistener.ReferenceListenerHandler -org.apache.aries.blueprint.plugin.handlers.bean.BeanHandler \ No newline at end of file +org.apache.aries.blueprint.plugin.handlers.blueprint.config.ConfigAnnotationHandler +org.apache.aries.blueprint.plugin.handlers.blueprint.referencelistener.ReferenceListenerHandler +org.apache.aries.blueprint.plugin.handlers.blueprint.bean.BeanHandler \ No newline at end of file Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanFinder 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.BeanFinder?rev=1810013&r1=1810012&r2=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanFinder (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanFinder Thu Sep 28 17:19:00 2017 @@ -17,4 +17,4 @@ org.apache.aries.blueprint.plugin.handlers.javax.SingletonBeanFinder org.apache.aries.blueprint.plugin.handlers.javax.NamedBeanFinder -org.apache.aries.blueprint.plugin.handlers.bean.BeanHandler \ No newline at end of file +org.apache.aries.blueprint.plugin.handlers.blueprint.bean.BeanHandler \ No newline at end of file Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CollectionDependencyAnnotationHandler 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.CollectionDependencyAnnotationHandler?rev=1810013&r1=1810012&r2=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CollectionDependencyAnnotationHandler (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CollectionDependencyAnnotationHandler Thu Sep 28 17:19:00 2017 @@ -15,5 +15,5 @@ # limitations under the License. # -org.apache.aries.blueprint.plugin.handlers.collection.CollectionInjectHandler +org.apache.aries.blueprint.plugin.handlers.blueprint.collection.CollectionInjectHandler Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.ContextInitializationHandler 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.ContextInitializationHandler?rev=1810013&r1=1810012&r2=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.ContextInitializationHandler (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.ContextInitializationHandler Thu Sep 28 17:19:00 2017 @@ -15,4 +15,4 @@ # limitations under the License. # -org.apache.aries.blueprint.plugin.handlers.blueprint.BlueprintInitialization \ No newline at end of file +org.apache.aries.blueprint.plugin.handlers.blueprint.init.BlueprintInitialization \ No newline at end of file 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=1810013&r1=1810012&r2=1810013&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 Thu Sep 28 17:19:00 2017 @@ -15,4 +15,5 @@ # limitations under the License. # -org.apache.aries.blueprint.plugin.handlers.config.ConfigPropertiesHandler \ No newline at end of file +org.apache.aries.blueprint.plugin.handlers.blueprint.config.ConfigPropertiesHandler +org.apache.aries.blueprint.plugin.handlers.blueprint.service.ReferenceHandler \ No newline at end of file Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.FactoryMethodFinder 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.FactoryMethodFinder?rev=1810013&r1=1810012&r2=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.FactoryMethodFinder (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.FactoryMethodFinder Thu Sep 28 17:19:00 2017 @@ -16,4 +16,4 @@ # org.apache.aries.blueprint.plugin.handlers.javax.ProducesHandler -org.apache.aries.blueprint.plugin.handlers.bean.BeanHandler \ No newline at end of file +org.apache.aries.blueprint.plugin.handlers.blueprint.bean.BeanHandler \ No newline at end of file Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.NamedLikeHandler 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.NamedLikeHandler?rev=1810013&r1=1810012&r2=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.NamedLikeHandler (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.NamedLikeHandler Thu Sep 28 17:19:00 2017 @@ -16,4 +16,4 @@ # org.apache.aries.blueprint.plugin.handlers.javax.NamedHandler -org.apache.aries.blueprint.plugin.handlers.bean.BeanHandler \ No newline at end of file +org.apache.aries.blueprint.plugin.handlers.blueprint.bean.BeanHandler \ No newline at end of file Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.ValueInjectionHandler 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.ValueInjectionHandler?rev=1810013&r1=1810012&r2=1810013&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.ValueInjectionHandler (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.ValueInjectionHandler Thu Sep 28 17:19:00 2017 @@ -15,4 +15,4 @@ # limitations under the License. # -org.apache.aries.blueprint.plugin.handlers.config.ConfigPropertyInjectionHandler +org.apache.aries.blueprint.plugin.handlers.blueprint.config.ConfigPropertyInjectionHandler 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=1810013&r1=1810012&r2=1810013&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 Thu Sep 28 17:19:00 2017 @@ -30,6 +30,11 @@ import org.apache.aries.blueprint.plugin import org.apache.aries.blueprint.plugin.test.bean.BeanWithCallbackMethods; import org.apache.aries.blueprint.plugin.test.bean.NamedBean; import org.apache.aries.blueprint.plugin.test.bean.SimpleProducedBean; +import org.apache.aries.blueprint.plugin.test.reference.BeanWithReferences; +import org.apache.aries.blueprint.plugin.test.reference.Ref1; +import org.apache.aries.blueprint.plugin.test.reference.Ref2; +import org.apache.aries.blueprint.plugin.test.reference.Ref3; +import org.apache.aries.blueprint.plugin.test.reference.Ref4; import org.apache.aries.blueprint.plugin.test.referencelistener.ReferenceListenerToProduceWithoutAnnotation; import org.apache.commons.io.output.ByteArrayOutputStream; import org.apache.xbean.finder.ClassFinder; @@ -82,7 +87,8 @@ public class BlueprintFileWriterTest { long start = System.currentTimeMillis(); Set<Class<?>> beanClasses = findClasses(classFinder, Arrays.asList( MyBean1.class.getPackage().getName(), - ReferenceListenerToProduceWithoutAnnotation.class.getPackage().getName() + ReferenceListenerToProduceWithoutAnnotation.class.getPackage().getName(), + BeanWithReferences.class.getPackage().getName() )); Set<String> namespaces = new HashSet<>(Arrays.asList(NS_JPA, NS_TX1)); Map<String, String> customParameters = new HashMap<>(); @@ -920,6 +926,135 @@ public class BlueprintFileWriterTest { assertXpathEquals(typeConverters, "ref[2]/@component-id", "converter2"); } + @Test + public void shouldInjectReferenceViaField() throws Exception { + Node bean = getBeanById("beanWithReferences"); + assertXpathEquals(bean, "property[@name='ref1Field']/@ref", "ref1"); + assertXpathEquals(bean, "property[@name='myRef1Field']/@ref", "myRef1"); + assertXpathEquals(bean, "property[@name='myRef1FieldAllProps']/@ref", "ref1-a453-r1-optional-2000"); + assertXpathEquals(bean, "property[@name='myRef1FieldFilter']/@ref", "ref1-x1"); + } + + @Test + public void shouldGenerateReferenceFromBeanField() throws Exception { + Node ref1 = getReferenceById("ref1"); + assertXpathEquals(ref1, "@interface", Ref1.class.getName()); + Node myRef1 = getReferenceById("myRef1"); + assertXpathEquals(myRef1, "@interface", Ref1.class.getName()); + Node ref1a453r1 = getReferenceById("ref1-a453-r1-optional-2000"); + assertXpathEquals(ref1a453r1, "@interface", Ref1.class.getName()); + assertXpathEquals(ref1a453r1, "@component-name", "r1"); + assertXpathEquals(ref1a453r1, "@filter", "(a=453)"); + assertXpathEquals(ref1a453r1, "@timeout", "2000"); + assertXpathEquals(ref1a453r1, "@availability", "optional"); + Node ref1x1 = getReferenceById("ref1-x1"); + assertXpathEquals(ref1x1, "@interface", Ref1.class.getName()); + assertXpathEquals(ref1x1, "@filter", "(x=1)"); + assertXpathEquals(ref1x1, "count(@component-name)", "0"); + } + + @Test + public void shouldInjectReferenceViaSetter() throws Exception { + Node bean = getBeanById("beanWithReferences"); + assertXpathEquals(bean, "property[@name='ref2Setter']/@ref", "ref2"); + assertXpathEquals(bean, "property[@name='ref2SetterNamed']/@ref", "myRef2"); + assertXpathEquals(bean, "property[@name='ref2SetterFull']/@ref", "ref2-b453-r2-optional-1000"); + assertXpathEquals(bean, "property[@name='ref2SetterComponent']/@ref", "ref2--blablabla"); + } + + @Test + public void shouldGenerateReferenceFromBeanSetter() throws Exception { + Node ref2 = getReferenceById("ref2"); + assertXpathEquals(ref2, "@interface", Ref2.class.getName()); + Node myRef2 = getReferenceById("myRef2"); + assertXpathEquals(myRef2, "@interface", Ref2.class.getName()); + Node ref1b453r2 = getReferenceById("ref2-b453-r2-optional-1000"); + assertXpathEquals(ref1b453r2, "@interface", Ref2.class.getName()); + assertXpathEquals(ref1b453r2, "@component-name", "r2"); + assertXpathEquals(ref1b453r2, "@filter", "(b=453)"); + assertXpathEquals(ref1b453r2, "@timeout", "1000"); + assertXpathEquals(ref1b453r2, "@availability", "optional"); + Node ref2blablabla = getReferenceById("ref2--blablabla"); + assertXpathEquals(ref2blablabla, "@interface", Ref2.class.getName()); + assertXpathEquals(ref2blablabla, "@component-name", "blablabla"); + assertXpathEquals(ref2blablabla, "count(@filter)", "0"); + } + + @Test + public void shouldInjectReferenceViaConstructor() throws Exception { + Node bean = getBeanById("beanWithReferences"); + assertXpathEquals(bean, "argument[1]/@ref", "ref1"); + assertXpathEquals(bean, "argument[2]/@ref", "ref2---optional-20000"); + assertXpathEquals(bean, "argument[3]/@ref", "ref1-y3"); + assertXpathEquals(bean, "argument[4]/@ref", "ref1--compForConstr"); + assertXpathEquals(bean, "argument[5]/@ref", "ref1-y3-compForConstr"); + assertXpathEquals(bean, "argument[6]/@ref", "ref1ForCons"); + } + + @Test + public void shouldGenerateReferenceFromBeanConstructor() throws Exception { + Node ref1 = getReferenceById("ref1"); + assertXpathEquals(ref1, "@interface", Ref1.class.getName()); + Node ref2optional20000 = getReferenceById("ref2---optional-20000"); + assertXpathEquals(ref2optional20000, "@interface", Ref2.class.getName()); + assertXpathEquals(ref2optional20000, "@timeout", "20000"); + assertXpathEquals(ref2optional20000, "@availability", "optional"); + Node ref1y3 = getReferenceById("ref1-y3"); + assertXpathEquals(ref1y3, "@interface", Ref1.class.getName()); + assertXpathEquals(ref1y3, "count(@component-name)", "0"); + assertXpathEquals(ref1y3, "@filter", "(y=3)"); + Node ref1compForConstr = getReferenceById("ref1--compForConstr"); + assertXpathEquals(ref1compForConstr, "@interface", Ref1.class.getName()); + assertXpathEquals(ref1compForConstr, "@component-name", "compForConstr"); + assertXpathEquals(ref1compForConstr, "count(@filter)", "0"); + Node ref1y3compForConstr = getReferenceById("ref1-y3-compForConstr"); + assertXpathEquals(ref1y3compForConstr, "@interface", Ref1.class.getName()); + assertXpathEquals(ref1y3compForConstr, "@component-name", "compForConstr"); + assertXpathEquals(ref1y3compForConstr, "@filter", "(y=3)"); + Node ref1ForCons = getReferenceById("ref1ForCons"); + assertXpathEquals(ref1ForCons, "@interface", Ref1.class.getName()); + assertXpathEquals(ref1ForCons, "@availability", "optional"); + } + + @Test + public void shouldInjectReferenceToProducedBean() throws Exception { + Node bean = getBeanById("producedWithReferences"); + assertXpathEquals(bean, "argument[1]/@ref", "ref3"); + assertXpathEquals(bean, "argument[2]/@ref", "ref4----20000"); + assertXpathEquals(bean, "argument[3]/@ref", "ref4---optional"); + assertXpathEquals(bean, "argument[4]/@ref", "ref3-y3"); + assertXpathEquals(bean, "argument[5]/@ref", "ref3--compForProduces"); + assertXpathEquals(bean, "argument[6]/@ref", "ref3-y3-compForProduces"); + assertXpathEquals(bean, "argument[7]/@ref", "ref3ForProduces"); + } + + @Test + public void shouldGenerateReferenceFromProducedBean() throws Exception { + Node ref3 = getReferenceById("ref3"); + assertXpathEquals(ref3, "@interface", Ref3.class.getName()); + Node ref420000 = getReferenceById("ref4----20000"); + assertXpathEquals(ref420000, "@interface", Ref4.class.getName()); + assertXpathEquals(ref420000, "@timeout", "20000"); + Node ref4optional = getReferenceById("ref4---optional"); + assertXpathEquals(ref4optional, "@interface", Ref4.class.getName()); + assertXpathEquals(ref4optional, "@availability", "optional"); + Node ref3y3 = getReferenceById("ref3-y3"); + assertXpathEquals(ref3y3, "@interface", Ref3.class.getName()); + assertXpathEquals(ref3y3, "count(@component-name)", "0"); + assertXpathEquals(ref3y3, "@filter", "(y=3)"); + Node ref3compForProduces = getReferenceById("ref3--compForProduces"); + assertXpathEquals(ref3compForProduces, "@interface", Ref3.class.getName()); + assertXpathEquals(ref3compForProduces, "@component-name", "compForProduces"); + assertXpathEquals(ref3compForProduces, "count(@filter)", "0"); + Node ref3y3compForProduces = getReferenceById("ref3-y3-compForProduces"); + assertXpathEquals(ref3y3compForProduces, "@interface", Ref3.class.getName()); + assertXpathEquals(ref3y3compForProduces, "@component-name", "compForProduces"); + assertXpathEquals(ref3y3compForProduces, "@filter", "(y=3)"); + Node ref1ForCons = getReferenceById("ref3ForProduces"); + assertXpathEquals(ref1ForCons, "@interface", Ref3.class.getName()); + assertXpathEquals(ref1ForCons, "@timeout", "1000"); + } + private void assertXpathDoesNotExist(Node node, String xpathExpression) throws XPathExpressionException { assertXpathEquals(node, "count(" + xpathExpression + ")", "0"); } Added: 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/BeanWithReferences.java?rev=1810013&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/BeanWithReferences.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/BeanWithReferences.java Thu Sep 28 17:19:00 2017 @@ -0,0 +1,95 @@ +/** + * 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.test.reference; + +import org.apache.aries.blueprint.annotation.service.Availability; +import org.apache.aries.blueprint.annotation.service.Reference; + +import javax.enterprise.inject.Produces; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + +@Singleton +public class BeanWithReferences { + + @Inject + @Reference + Ref1 ref1Field; + + @Inject + @Reference + @Named("myRef1") + Ref1 myRef1Field; + + @Inject + @Reference(filter = "(a=453)", componentName = "r1", timeout = 2000, availability = Availability.OPTIONAL) + Ref1 myRef1FieldAllProps; + + @Inject + @Reference(filter = "(x=1)") + Ref1 myRef1FieldFilter; + + @Inject + @Reference + public void setRef2Setter(Ref2 ref) { + } + + @Inject + @Reference + @Named("myRef2") + public void setRef2SetterNamed(Ref2 ref) { + } + + @Inject + @Reference(filter = "(b=453)", componentName = "r2", timeout = 1000, availability = Availability.OPTIONAL) + public void setRef2SetterFull(Ref2 ref) { + } + + @Inject + @Reference(componentName = "blablabla") + public void setRef2SetterComponent(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 + ) { + } + + @Produces + @Named("producedWithReferences") + 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 + ) { + return null; + } + + +} Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref1.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref1.java?rev=1810013&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref1.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref1.java Thu Sep 28 17:19:00 2017 @@ -0,0 +1,22 @@ +/** + * 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.test.reference; + +public interface Ref1 { +} Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref2.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref2.java?rev=1810013&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref2.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref2.java Thu Sep 28 17:19:00 2017 @@ -0,0 +1,22 @@ +/** + * 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.test.reference; + +public interface Ref2 { +} Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref3.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref3.java?rev=1810013&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref3.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref3.java Thu Sep 28 17:19:00 2017 @@ -0,0 +1,22 @@ +/** + * 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.test.reference; + +public interface Ref3 { +} Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref4.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref4.java?rev=1810013&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref4.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/reference/Ref4.java Thu Sep 28 17:19:00 2017 @@ -0,0 +1,22 @@ +/** + * 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.test.reference; + +public interface Ref4 { +}