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 2016/08/29 12:18:14 UTC
svn commit: r1758211 - in /aries/trunk/blueprint/blueprint-maven-plugin/src:
main/java/org/apache/aries/blueprint/plugin/
main/java/org/apache/aries/blueprint/plugin/model/
main/java/org/apache/aries/blueprint/plugin/model/service/
main/java/org/apache...
Author: alien11689
Date: Mon Aug 29 12:18:13 2016
New Revision: 1758211
URL: http://svn.apache.org/viewvc?rev=1758211&view=rev
Log:
[ARIES-1602] Replace pax annotations with spi handlers
Added:
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BlueprinRegister.java
- copied, changed from r1757990, aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Matcher.java
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceHandler.java
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceProviderHandler.java
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BlueprintWriter.java
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/ContextEnricher.java
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomBeanAnnotationHandler.java
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomDependencyAnnotationHandler.java
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomFactoryMethodAnnotationHandler.java
aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomBeanAnnotationHandler
aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomDependencyAnnotationHandler
aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomFactoryMethodAnnotationHandler
Removed:
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/OsgiServiceRefWriter.java
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Matcher.java
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/OsgiServiceRef.java
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/service/
Modified:
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Extensions.java
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/GeneratorTest.java
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/BeanWithSetters.java
Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Extensions.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Extensions.java?rev=1758211&r1=1758210&r2=1758211&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Extensions.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Extensions.java Mon Aug 29 12:18:13 2016
@@ -6,9 +6,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
+ * <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
@@ -22,6 +22,9 @@ import org.apache.aries.blueprint.plugin
import org.apache.aries.blueprint.plugin.model.ExtensionTransactionFactory;
import org.apache.aries.blueprint.plugin.spi.BeanAttributesResolver;
import org.apache.aries.blueprint.plugin.spi.BeanFinder;
+import org.apache.aries.blueprint.plugin.spi.CustomBeanAnnotationHandler;
+import org.apache.aries.blueprint.plugin.spi.CustomDependencyAnnotationHandler;
+import org.apache.aries.blueprint.plugin.spi.CustomFactoryMethodAnnotationHandler;
import org.apache.aries.blueprint.plugin.spi.InjectLikeHandler;
import org.apache.aries.blueprint.plugin.spi.NamedLikeHandler;
import org.apache.aries.blueprint.plugin.spi.TransactionalFactory;
@@ -40,6 +43,9 @@ public class Extensions {
public static final List<InjectLikeHandler<? extends Annotation>> beanInjectLikeHandlers = new ArrayList<>();
public static final List<NamedLikeHandler> namedLikeHandlers = new ArrayList<>();
public static final List<ValueInjectionHandler<? extends Annotation>> valueInjectionHandlers = new ArrayList<>();
+ public static final List<CustomBeanAnnotationHandler<? extends Annotation>> customBeanAnnotationHandlers = new ArrayList<>();
+ public static final List<CustomFactoryMethodAnnotationHandler<? extends Annotation>> customFactoryMethodAnnotationHandlers = new ArrayList<>();
+ public static final List<CustomDependencyAnnotationHandler<? extends Annotation>> customDependencyAnnotationHandlers = new ArrayList<>();
static {
for (BeanFinder beanFinder : ServiceLoader.load(BeanFinder.class)) {
@@ -68,5 +74,17 @@ public class Extensions {
for (ValueInjectionHandler<? extends Annotation> valueInjectionHandler : ServiceLoader.load(ValueInjectionHandler.class)) {
valueInjectionHandlers.add(valueInjectionHandler);
}
+
+ for (CustomBeanAnnotationHandler<? extends Annotation> customBeanAnnotationHandler : ServiceLoader.load(CustomBeanAnnotationHandler.class)) {
+ customBeanAnnotationHandlers.add(customBeanAnnotationHandler);
+ }
+
+ for (CustomFactoryMethodAnnotationHandler<? extends Annotation> customFactoryMethodAnnotationHandler : ServiceLoader.load(CustomFactoryMethodAnnotationHandler.class)) {
+ customFactoryMethodAnnotationHandlers.add(customFactoryMethodAnnotationHandler);
+ }
+
+ for (CustomDependencyAnnotationHandler<? extends Annotation> customDependencyAnnotationHandler : ServiceLoader.load(CustomDependencyAnnotationHandler.class)) {
+ customDependencyAnnotationHandlers.add(customDependencyAnnotationHandler);
+ }
}
}
Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java?rev=1758211&r1=1758210&r2=1758211&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java Mon Aug 29 12:18:13 2016
@@ -26,7 +26,7 @@ import org.apache.aries.blueprint.plugin
import org.apache.aries.blueprint.plugin.model.Property;
import org.apache.aries.blueprint.plugin.model.PropertyWriter;
import org.apache.aries.blueprint.plugin.model.TransactionalDef;
-import org.apache.aries.blueprint.plugin.model.service.ServiceProviderWriter;
+import org.apache.aries.blueprint.plugin.spi.BlueprintWriter;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceUnit;
@@ -89,8 +89,9 @@ public class Generator implements Proper
writer.writeCharacters("\n");
}
- new OsgiServiceRefWriter(writer).write(context.getServiceRefs());
- new ServiceProviderWriter(writer).write(context.getServiceProviders());
+ for (BlueprintWriter bw : context.getBlueprintWriters().values()) {
+ bw.write(writer);
+ }
writer.writeEndElement();
writer.writeCharacters("\n");
Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java?rev=1758211&r1=1758210&r2=1758211&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java Mon Aug 29 12:18:13 2016
@@ -19,10 +19,13 @@
package org.apache.aries.blueprint.plugin.model;
import org.apache.aries.blueprint.plugin.Extensions;
-import org.apache.aries.blueprint.plugin.model.service.ServiceProvider;
import org.apache.aries.blueprint.plugin.spi.BeanAttributesResolver;
+import org.apache.aries.blueprint.plugin.spi.BlueprintWriter;
+import org.apache.aries.blueprint.plugin.spi.ContextEnricher;
+import org.apache.aries.blueprint.plugin.spi.CustomBeanAnnotationHandler;
+import org.apache.aries.blueprint.plugin.spi.CustomDependencyAnnotationHandler;
import org.apache.aries.blueprint.plugin.spi.InjectLikeHandler;
-import org.ops4j.pax.cdi.api.OsgiService;
+import org.apache.aries.blueprint.plugin.spi.NamedLikeHandler;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@@ -42,21 +45,19 @@ import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
-import static org.apache.aries.blueprint.plugin.model.AnnotationHelper.findAnnotation;
-import static org.apache.aries.blueprint.plugin.model.AnnotationHelper.findName;
import static org.apache.aries.blueprint.plugin.model.AnnotationHelper.findValue;
-public class Bean extends BeanRef {
+public class Bean extends BeanRef implements ContextEnricher {
public final String initMethod;
public String destroyMethod;
public SortedSet<Property> properties = new TreeSet<>();
public List<Argument> constructorArguments = new ArrayList<>();
- public Set<OsgiServiceRef> serviceRefs = new HashSet<>();
public List<Field> persistenceFields;
public Set<TransactionalDef> transactionDefs = new HashSet<>();
public boolean isPrototype;
- public List<ServiceProvider> serviceProviders = new ArrayList<>();
public final Map<String, String> attributes = new HashMap<>();
+ public final Set<BeanRef> refs = new HashSet<>();
+ public final Map<String, BlueprintWriter> blueprintWriters = new HashMap<>();
public Bean(Class<?> clazz) {
super(clazz, BeanRef.getBeanName(clazz));
@@ -72,9 +73,9 @@ public class Bean extends BeanRef {
setQualifiersFromAnnotations(clazz.getAnnotations());
- interpretServiceProvider();
-
resolveBeanAttributes();
+
+ handleCustomBeanAnnotations();
}
private void resolveBeanAttributes() {
@@ -85,10 +86,12 @@ public class Bean extends BeanRef {
}
}
- private void interpretServiceProvider() {
- ServiceProvider serviceProvider = ServiceProvider.fromBean(this);
- if (serviceProvider != null) {
- serviceProviders.add(serviceProvider);
+ private void handleCustomBeanAnnotations() {
+ for (CustomBeanAnnotationHandler customBeanAnnotationHandler : Extensions.customBeanAnnotationHandlers) {
+ Object annotation = AnnotationHelper.findAnnotation(clazz.getAnnotations(), customBeanAnnotationHandler.getAnnotation());
+ if (annotation != null) {
+ customBeanAnnotationHandler.handleBeanAnnotation(clazz, id, this);
+ }
}
}
@@ -123,22 +126,22 @@ public class Bean extends BeanRef {
return false;
}
- public void resolve(Matcher matcher) {
+ public void resolve(BlueprinRegister matcher) {
resolveArguments(matcher);
resolveFields(matcher);
resolveMethods(matcher);
}
- private void resolveMethods(Matcher matcher) {
+ private void resolveMethods(BlueprinRegister blueprinRegister) {
for (Method method : new Introspector(clazz).methodsWith(AnnotationHelper.injectDependencyAnnotations)) {
- Property prop = Property.create(matcher, method);
+ Property prop = Property.create(blueprinRegister, method);
if (prop != null) {
properties.add(prop);
}
}
}
- private void resolveFields(Matcher matcher) {
+ private void resolveFields(BlueprinRegister matcher) {
for (Field field : new Introspector(clazz).fieldsWith(AnnotationHelper.injectDependencyAnnotations)) {
Property prop = Property.create(matcher, field);
if (prop != null) {
@@ -147,7 +150,7 @@ public class Bean extends BeanRef {
}
}
- protected void resolveArguments(Matcher matcher) {
+ protected void resolveArguments(BlueprinRegister matcher) {
Constructor<?>[] declaredConstructors = clazz.getDeclaredConstructors();
for (Constructor constructor : declaredConstructors) {
if (declaredConstructors.length == 1 || shouldInject(constructor)) {
@@ -166,24 +169,27 @@ public class Bean extends BeanRef {
return false;
}
- protected void resolveArguments(Matcher matcher, Class[] parameterTypes, Annotation[][] parameterAnnotations) {
+ protected void resolveArguments(BlueprinRegister blueprinRegister, Class[] parameterTypes, Annotation[][] parameterAnnotations) {
for (int i = 0; i < parameterTypes.length; ++i) {
Annotation[] annotations = parameterAnnotations[i];
String value = findValue(annotations);
- String ref = null;
+ String ref = findName(annotations);
- OsgiService osgiServiceAnnotation = findAnnotation(annotations, OsgiService.class);
- if (osgiServiceAnnotation != null) {
- String name = findName(annotations);
- ref = name != null ? name : getBeanNameFromSimpleName(parameterTypes[i].getSimpleName());
- OsgiServiceRef osgiServiceRef = new OsgiServiceRef(parameterTypes[i], osgiServiceAnnotation, ref);
- serviceRefs.add(osgiServiceRef);
+ for (CustomDependencyAnnotationHandler customDependencyAnnotationHandler : Extensions.customDependencyAnnotationHandlers) {
+ Annotation annotation = (Annotation) AnnotationHelper.findAnnotation(annotations, customDependencyAnnotationHandler.getAnnotation());
+ if (annotation != null) {
+ String generatedRef = customDependencyAnnotationHandler.handleDependencyAnnotation(parameterTypes[i], annotation, ref, blueprinRegister);
+ if (generatedRef != null) {
+ ref = generatedRef;
+ break;
+ }
+ }
}
- if (ref == null && value == null && osgiServiceAnnotation == null) {
+ if (ref == null && value == null) {
BeanRef template = new BeanRef(parameterTypes[i]);
template.setQualifiersFromAnnotations(annotations);
- BeanRef bean = matcher.getMatching(template);
+ BeanRef bean = blueprinRegister.getMatching(template);
if (bean != null) {
ref = bean.id;
} else {
@@ -200,6 +206,19 @@ public class Bean extends BeanRef {
}
}
+ private String findName(Annotation[] annotations) {
+ for (NamedLikeHandler namedLikeHandler : Extensions.namedLikeHandlers) {
+ Object annotation = AnnotationHelper.findAnnotation(annotations, namedLikeHandler.getAnnotation());
+ if (annotation != null) {
+ String name = namedLikeHandler.getName(annotation);
+ if (name != null) {
+ return name;
+ }
+ }
+ }
+ return null;
+ }
+
@Override
public String toString() {
return clazz.getName();
@@ -225,4 +244,14 @@ public class Bean extends BeanRef {
}
return false;
}
+
+ @Override
+ public void addBean(String id, Class<?> clazz) {
+ refs.add(new BeanRef(clazz, id));
+ }
+
+ @Override
+ public void addBlueprintWriter(String id, BlueprintWriter blueprintWriter) {
+ blueprintWriters.put(id, blueprintWriter);
+ }
}
Copied: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BlueprinRegister.java (from r1757990, aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Matcher.java)
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BlueprinRegister.java?p2=aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BlueprinRegister.java&p1=aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Matcher.java&r1=1757990&r2=1758211&rev=1758211&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Matcher.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BlueprinRegister.java Mon Aug 29 12:18:13 2016
@@ -6,9 +6,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
+ * <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
@@ -18,6 +18,8 @@
*/
package org.apache.aries.blueprint.plugin.model;
-public interface Matcher {
+import org.apache.aries.blueprint.plugin.spi.ContextEnricher;
+
+public interface BlueprinRegister extends ContextEnricher{
BeanRef getMatching(BeanRef template);
}
Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java?rev=1758211&r1=1758210&r2=1758211&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java Mon Aug 29 12:18:13 2016
@@ -18,27 +18,28 @@
*/
package org.apache.aries.blueprint.plugin.model;
-import org.apache.aries.blueprint.plugin.model.service.ServiceProvider;
-import org.ops4j.pax.cdi.api.OsgiService;
+import org.apache.aries.blueprint.plugin.Extensions;
+import org.apache.aries.blueprint.plugin.spi.BlueprintWriter;
+import org.apache.aries.blueprint.plugin.spi.ContextEnricher;
+import org.apache.aries.blueprint.plugin.spi.CustomFactoryMethodAnnotationHandler;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.service.blueprint.container.BlueprintContainer;
import org.osgi.service.blueprint.container.Converter;
import javax.enterprise.inject.Produces;
-import java.lang.reflect.Field;
import java.lang.reflect.Method;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.List;
+import java.util.HashMap;
+import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
-public class Context implements Matcher {
+public class Context implements BlueprinRegister, ContextEnricher {
SortedSet<BeanRef> reg = new TreeSet<BeanRef>();
- private final List<ServiceProvider> serviceProviders = new ArrayList<>();
+ private final Map<String, BlueprintWriter> blueprintWriters = new HashMap<>();
public Context(Class<?>... beanClasses) {
this(Arrays.asList(beanClasses));
@@ -65,13 +66,9 @@ public class Context implements Matcher
private void addBean(Class<?> clazz) {
Bean bean = new Bean(clazz);
reg.add(bean);
- addServiceRefs(clazz);
+ reg.addAll(bean.refs);
+ blueprintWriters.putAll(bean.blueprintWriters);
addProducedBeans(bean);
- addServiceProviders(bean);
- }
-
- private void addServiceProviders(Bean bean) {
- serviceProviders.addAll(bean.serviceProviders);
}
private void addProducedBeans(BeanRef factoryBean) {
@@ -90,34 +87,21 @@ public class Context implements Matcher
producedBean.setSingleton();
}
reg.add(producedBean);
- ServiceProvider serviceProvider = ServiceProvider.fromMethod(producedBean, method);
- if (serviceProvider != null) {
- serviceProviders.add(serviceProvider);
+ for (CustomFactoryMethodAnnotationHandler customFactoryMethodAnnotationHandler : Extensions.customFactoryMethodAnnotationHandlers) {
+ if (AnnotationHelper.findAnnotation(method.getAnnotations(), customFactoryMethodAnnotationHandler.getAnnotation()) != null) {
+ customFactoryMethodAnnotationHandler.handleFactoryMethodAnnotation(method, producedBean.id, this);
+ }
}
}
}
}
- private void addServiceRefs(Class<?> clazz) {
- for (Field field : new Introspector(clazz).fieldsWith(OsgiService.class)) {
- reg.add(new OsgiServiceRef(field));
- }
- for (Method method : new Introspector(clazz).methodsWith(OsgiService.class)) {
- reg.add(new OsgiServiceRef(method));
- }
- }
-
public void resolve() {
for (Bean bean : getBeans()) {
bean.resolve(this);
- addServiceRefs(bean);
}
}
- private void addServiceRefs(Bean bean) {
- reg.addAll(bean.serviceRefs);
- }
-
public BeanRef getMatching(BeanRef template) {
for (BeanRef bean : reg) {
if (bean.matches(template)) {
@@ -137,17 +121,18 @@ public class Context implements Matcher
return beans;
}
- public SortedSet<OsgiServiceRef> getServiceRefs() {
- TreeSet<OsgiServiceRef> serviceRefs = new TreeSet<OsgiServiceRef>();
- for (BeanRef ref : reg) {
- if (ref instanceof OsgiServiceRef) {
- serviceRefs.add((OsgiServiceRef) ref);
- }
- }
- return serviceRefs;
+ public Map<String, BlueprintWriter> getBlueprintWriters() {
+ return blueprintWriters;
+ }
+
+ @Override
+ public void addBean(String id, Class<?> clazz) {
+ reg.add(new BeanRef(clazz, id));
+
}
- public List<ServiceProvider> getServiceProviders() {
- return serviceProviders;
+ @Override
+ public void addBlueprintWriter(String id, BlueprintWriter blueprintWriter) {
+ blueprintWriters.put(id, blueprintWriter);
}
}
Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java?rev=1758211&r1=1758210&r2=1758211&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java Mon Aug 29 12:18:13 2016
@@ -57,7 +57,7 @@ public class ProducedBean extends Bean {
}
@Override
- protected void resolveArguments(Matcher matcher) {
+ protected void resolveArguments(BlueprinRegister matcher) {
resolveArguments(matcher, producingMethod.getParameterTypes(), producingMethod.getParameterAnnotations());
}
}
Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java?rev=1758211&r1=1758210&r2=1758211&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java Mon Aug 29 12:18:13 2016
@@ -19,8 +19,10 @@
package org.apache.aries.blueprint.plugin.model;
import org.apache.aries.blueprint.plugin.Extensions;
+import org.apache.aries.blueprint.plugin.spi.CustomDependencyAnnotationHandler;
import org.apache.aries.blueprint.plugin.spi.NamedLikeHandler;
+import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
@@ -38,14 +40,28 @@ public class Property implements Compara
this.isField = isField;
}
- public static Property create(Matcher matcher, Field field) {
+ public static Property create(BlueprinRegister blueprinRegister, Field field) {
if (needsInject(field)) {
String value = AnnotationHelper.findValue(field.getAnnotations());
if (value != null) {
return new Property(field.getName(), null, value, true);
}
- BeanRef matching = matcher.getMatching(new BeanRef(field));
- String ref = (matching == null) ? getRefName(field) : matching.id;
+ String ref = getForcedRefName(field);
+ for (CustomDependencyAnnotationHandler customDependencyAnnotationHandler : Extensions.customDependencyAnnotationHandlers) {
+ Annotation annotation = (Annotation) AnnotationHelper.findAnnotation(field.getAnnotations(), customDependencyAnnotationHandler.getAnnotation());
+ if (annotation != null) {
+ String generatedRef = customDependencyAnnotationHandler.handleDependencyAnnotation(field, ref, blueprinRegister);
+ if (generatedRef != null) {
+ ref = generatedRef;
+ break;
+ }
+ }
+ }
+ if (ref != null) {
+ return new Property(field.getName(), ref, null, true);
+ }
+ BeanRef matching = blueprinRegister.getMatching(new BeanRef(field));
+ ref = (matching == null) ? getDefaultRefName(field) : matching.id;
return new Property(field.getName(), ref, null, true);
} else {
// Field is not a property
@@ -53,7 +69,7 @@ public class Property implements Compara
}
}
- public static Property create(Matcher matcher, Method method) {
+ public static Property create(BlueprinRegister blueprinRegister, Method method) {
String propertyName = resolveProperty(method);
if (propertyName == null) {
return null;
@@ -65,9 +81,41 @@ public class Property implements Compara
}
if (needsInject(method)) {
+ String ref = getForcedRefName(method);
+ if (ref == null) {
+ ref = getForcedRefName(method.getParameterAnnotations()[0]);
+ }
+ for (CustomDependencyAnnotationHandler customDependencyAnnotationHandler : Extensions.customDependencyAnnotationHandlers) {
+ Annotation annotation = (Annotation) AnnotationHelper.findAnnotation(method.getAnnotations(), customDependencyAnnotationHandler.getAnnotation());
+ if (annotation != null) {
+ String generatedRef = customDependencyAnnotationHandler.handleDependencyAnnotation(method, ref, blueprinRegister);
+ if (generatedRef != null) {
+ ref = generatedRef;
+ break;
+ }
+ }
+ }
+ if (ref != null) {
+ return new Property(propertyName, ref, null, false);
+ }
+
+ for (CustomDependencyAnnotationHandler customDependencyAnnotationHandler : Extensions.customDependencyAnnotationHandlers) {
+ Annotation annotation = (Annotation) AnnotationHelper.findAnnotation(method.getParameterAnnotations()[0], customDependencyAnnotationHandler.getAnnotation());
+ if (annotation != null) {
+ String generatedRef = customDependencyAnnotationHandler.handleDependencyAnnotation(method.getParameterTypes()[0], annotation, ref, blueprinRegister);
+ if (generatedRef != null) {
+ ref = generatedRef;
+ break;
+ }
+ }
+ }
+ if (ref != null) {
+ return new Property(propertyName, ref, null, false);
+ }
+
BeanRef beanRef = new BeanRef(method);
- BeanRef matching = matcher.getMatching(beanRef);
- String ref = (matching == null) ? beanRef.id : matching.id;
+ BeanRef matching = blueprinRegister.getMatching(beanRef);
+ ref = (matching == null) ? beanRef.id : matching.id;
return new Property(propertyName, ref, null, false);
}
@@ -88,7 +136,11 @@ public class Property implements Compara
* @param field
* @return
*/
- private static String getRefName(Field field) {
+ private static String getDefaultRefName(Field field) {
+ return Bean.getBeanName(field.getType());
+ }
+
+ private static String getForcedRefName(Field field) {
for (NamedLikeHandler namedLikeHandler : Extensions.namedLikeHandlers) {
if (field.getAnnotation(namedLikeHandler.getAnnotation()) != null) {
String name = namedLikeHandler.getName(field.getType(), field);
@@ -97,7 +149,32 @@ public class Property implements Compara
}
}
}
- return Bean.getBeanName(field.getType());
+ return null;
+ }
+
+ private static String getForcedRefName(Method method) {
+ for (NamedLikeHandler namedLikeHandler : Extensions.namedLikeHandlers) {
+ if (method.getAnnotation(namedLikeHandler.getAnnotation()) != null) {
+ String name = namedLikeHandler.getName(method.getParameterTypes()[0], method);
+ if (name != null) {
+ return name;
+ }
+ }
+ }
+ return null;
+ }
+
+ private static String getForcedRefName(Annotation[] annotations) {
+ for (NamedLikeHandler namedLikeHandler : Extensions.namedLikeHandlers) {
+ Annotation annotation = (Annotation) AnnotationHelper.findAnnotation(annotations, namedLikeHandler.getAnnotation());
+ if (annotation != null) {
+ String name = namedLikeHandler.getName(annotation);
+ if (name != null) {
+ return name;
+ }
+ }
+ }
+ return null;
}
private static boolean needsInject(AnnotatedElement annotatedElement) {
Added: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceHandler.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceHandler.java?rev=1758211&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceHandler.java (added)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceHandler.java Mon Aug 29 12:18:13 2016
@@ -0,0 +1,158 @@
+/**
+ * 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.pax;
+
+import org.apache.aries.blueprint.plugin.spi.BlueprintWriter;
+import org.apache.aries.blueprint.plugin.spi.ContextEnricher;
+import org.apache.aries.blueprint.plugin.spi.CustomDependencyAnnotationHandler;
+import org.ops4j.pax.cdi.api.OsgiService;
+
+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 OsgiServiceHandler implements CustomDependencyAnnotationHandler<OsgiService> {
+ @Override
+ public Class<OsgiService> getAnnotation() {
+ return OsgiService.class;
+ }
+
+ @Override
+ public String handleDependencyAnnotation(AnnotatedElement annotatedElement, String name, ContextEnricher contextEnricher) {
+ final ServiceFilter serviceFilter = extractServiceFilter(annotatedElement);
+ final String id = name != null ? name : generateReferenceId(getClass(annotatedElement), serviceFilter);
+ final Class<?> clazz = getClass(annotatedElement);
+
+ contextEnricher.addBean(id, getClass(annotatedElement));
+ contextEnricher.addBlueprintWriter(id, new BlueprintWriter() {
+ @Override
+ public void write(XMLStreamWriter writer) throws XMLStreamException {
+ writer.writeEmptyElement("reference");
+ writer.writeAttribute("id", id);
+ writer.writeAttribute("interface", clazz.getName());
+ if (serviceFilter.filter != null && !"".equals(serviceFilter.filter)) {
+ writer.writeAttribute("filter", serviceFilter.filter);
+ }
+ if (serviceFilter.compName != null && !"".equals(serviceFilter.compName)) {
+ writer.writeAttribute("component-name", serviceFilter.compName);
+ }
+ writer.writeCharacters("\n");
+ }
+ });
+ return id;
+ }
+
+ @Override
+ public String handleDependencyAnnotation(final Class<?> clazz, OsgiService annotation, String name, ContextEnricher contextEnricher) {
+ final ServiceFilter serviceFilter = extractServiceFilter(annotation);
+ final String id = name != null ? name : generateReferenceId(clazz, serviceFilter);
+
+ contextEnricher.addBean(id, clazz);
+ contextEnricher.addBlueprintWriter(id, new BlueprintWriter() {
+ @Override
+ public void write(XMLStreamWriter writer) throws XMLStreamException {
+ writer.writeEmptyElement("reference");
+ writer.writeAttribute("id", id);
+ writer.writeAttribute("interface", clazz.getName());
+ if (serviceFilter.filter != null && !"".equals(serviceFilter.filter)) {
+ writer.writeAttribute("filter", serviceFilter.filter);
+ }
+ if (serviceFilter.compName != null && !"".equals(serviceFilter.compName)) {
+ writer.writeAttribute("component-name", serviceFilter.compName);
+ }
+ writer.writeCharacters("\n");
+ }
+ });
+ return 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 ServiceFilter extractServiceFilter(AnnotatedElement annotatedElement) {
+ OsgiService osgiService = annotatedElement.getAnnotation(OsgiService.class);
+ return extractServiceFilter(osgiService);
+ }
+
+ private ServiceFilter extractServiceFilter(OsgiService osgiService) {
+ String filterValue = osgiService.filter();
+ return new ServiceFilter(filterValue);
+ }
+
+ private String generateReferenceId(Class clazz, ServiceFilter serviceFilter) {
+ String prefix = getBeanNameFromSimpleName(clazz.getSimpleName());
+ String suffix = createIdSuffix(serviceFilter);
+ return prefix + suffix;
+ }
+
+ protected static String getBeanNameFromSimpleName(String name) {
+ return name.substring(0, 1).toLowerCase() + name.substring(1, name.length());
+ }
+
+ private String createIdSuffix(ServiceFilter serviceFilter) {
+ if (serviceFilter.filter != null) {
+ return "-" + getId(serviceFilter.filter);
+ }
+ if (serviceFilter.compName != null) {
+ return "-" + serviceFilter.compName;
+ }
+ return "";
+ }
+
+ private String getId(String raw) {
+ StringBuilder builder = new StringBuilder();
+ for (int c = 0; c < raw.length(); c++) {
+ char ch = raw.charAt(c);
+ if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' || ch >= '0' && ch <= '9') {
+ builder.append(ch);
+ }
+ }
+ return builder.toString();
+ }
+
+ private static class ServiceFilter {
+ final public String filter;
+ final public String compName;
+
+ public ServiceFilter(String filterValue) {
+ if (filterValue == null) {
+ filter = null;
+ compName = null;
+ } else if (filterValue.contains("(")) {
+ filter = filterValue;
+ compName = null;
+ } else {
+ filter = null;
+ compName = filterValue;
+ }
+ }
+ }
+}
Added: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceProviderHandler.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceProviderHandler.java?rev=1758211&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceProviderHandler.java (added)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceProviderHandler.java Mon Aug 29 12:18:13 2016
@@ -0,0 +1,151 @@
+/**
+ * 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.pax;
+
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import org.apache.aries.blueprint.plugin.spi.BlueprintWriter;
+import org.apache.aries.blueprint.plugin.spi.ContextEnricher;
+import org.apache.aries.blueprint.plugin.spi.CustomBeanAnnotationHandler;
+import org.apache.aries.blueprint.plugin.spi.CustomFactoryMethodAnnotationHandler;
+import org.ops4j.pax.cdi.api.OsgiServiceProvider;
+import org.ops4j.pax.cdi.api.Properties;
+import org.ops4j.pax.cdi.api.Property;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+import java.lang.reflect.AnnotatedElement;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class OsgiServiceProviderHandler implements CustomBeanAnnotationHandler<OsgiServiceProvider>, CustomFactoryMethodAnnotationHandler<OsgiServiceProvider> {
+ @Override
+ public Class<OsgiServiceProvider> getAnnotation() {
+ return OsgiServiceProvider.class;
+ }
+
+ @Override
+ public void handleFactoryMethodAnnotation(AnnotatedElement annotatedElement, String id, ContextEnricher contextEnricher) {
+ handleAnnotation(annotatedElement, id, contextEnricher);
+ }
+
+ @Override
+ public void handleBeanAnnotation(AnnotatedElement annotatedElement, final String id, ContextEnricher contextEnricher) {
+ handleAnnotation(annotatedElement, id, contextEnricher);
+ }
+
+ private void handleAnnotation(AnnotatedElement annotatedElement, final String id, ContextEnricher contextEnricher) {
+ final OsgiServiceProvider serviceProvider = annotatedElement.getAnnotation(OsgiServiceProvider.class);
+ Properties properties = annotatedElement.getAnnotation(Properties.class);
+
+ final List<String> interfaceNames = extractServiceInterfaces(serviceProvider);
+
+ final Map<String, String> propertiesAsMap = extractProperties(properties);
+
+ contextEnricher.addBlueprintWriter("OsgiServiceProvider/" + annotatedElement + "/" + id, new BlueprintWriter() {
+ @Override
+ public void write(XMLStreamWriter writer) throws XMLStreamException {
+ writeService(writer, propertiesAsMap, interfaceNames, id);
+ }
+ });
+ }
+
+ private void writeService(XMLStreamWriter writer, Map<String, String> propertiesAsMap, List<String> interfaceNames, String id) throws XMLStreamException {
+ // If there are no properties to write and only one service attribute (either
+ // interface="MyServiceInterface" or auto-export="interfaces") then create an
+ // empty element
+ boolean writeEmptyElement = propertiesAsMap.isEmpty() && interfaceNames.size() < 2;
+ if (writeEmptyElement) {
+ writer.writeEmptyElement("service");
+ } else {
+ writer.writeStartElement("service");
+ }
+ writer.writeAttribute("ref", id);
+
+ if (interfaceNames.size() == 0) {
+ writer.writeAttribute("auto-export", "interfaces");
+ } else if (interfaceNames.size() == 1) {
+ writer.writeAttribute("interface", Iterables.getOnlyElement(interfaceNames));
+ } else {
+ writeInterfacesElement(writer, interfaceNames);
+ }
+
+ writer.writeCharacters("\n");
+
+ if (!propertiesAsMap.isEmpty()) {
+ writeProperties(writer, propertiesAsMap);
+ }
+
+ if (!writeEmptyElement) {
+ writer.writeEndElement();
+ writer.writeCharacters("\n");
+ }
+ }
+
+ private static Map<String, String> extractProperties(Properties properties) {
+ Map<String, String> propertiesAsMap = new HashMap<>();
+ if (properties != null) {
+ for (Property property : properties.value()) {
+ propertiesAsMap.put(property.name(), property.value());
+ }
+ }
+ return propertiesAsMap;
+ }
+
+ private static List<String> extractServiceInterfaces(OsgiServiceProvider serviceProvider) {
+ List<String> interfaceNames = Lists.newArrayList();
+ for (Class<?> serviceIf : serviceProvider.classes()) {
+ interfaceNames.add(serviceIf.getName());
+ }
+ return interfaceNames;
+ }
+
+ private void writeInterfacesElement(XMLStreamWriter writer, Iterable<String> interfaceNames) throws XMLStreamException {
+ writer.writeCharacters("\n");
+ writer.writeCharacters(" ");
+ writer.writeStartElement("interfaces");
+ writer.writeCharacters("\n");
+ for (String interfaceName : interfaceNames) {
+ writer.writeCharacters(" ");
+ writer.writeStartElement("value");
+ writer.writeCharacters(interfaceName);
+ writer.writeEndElement();
+ writer.writeCharacters("\n");
+ }
+ writer.writeCharacters(" ");
+ writer.writeEndElement();
+ }
+
+ private void writeProperties(XMLStreamWriter writer, Map<String, String> properties) throws XMLStreamException {
+ writer.writeCharacters(" ");
+ writer.writeStartElement("service-properties");
+ writer.writeCharacters("\n");
+ for (Map.Entry<String, String> property : properties.entrySet()) {
+ writer.writeCharacters(" ");
+ writer.writeEmptyElement("entry");
+ writer.writeAttribute("key", property.getKey());
+ writer.writeAttribute("value", property.getValue());
+ writer.writeCharacters("\n");
+ }
+ writer.writeCharacters(" ");
+ writer.writeEndElement();
+ writer.writeCharacters("\n");
+ }
+}
Added: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BlueprintWriter.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BlueprintWriter.java?rev=1758211&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BlueprintWriter.java (added)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BlueprintWriter.java Mon Aug 29 12:18:13 2016
@@ -0,0 +1,8 @@
+package org.apache.aries.blueprint.plugin.spi;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
+public interface BlueprintWriter {
+ void write(XMLStreamWriter xmlStreamWriter) throws XMLStreamException;
+}
Added: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/ContextEnricher.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/ContextEnricher.java?rev=1758211&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/ContextEnricher.java (added)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/ContextEnricher.java Mon Aug 29 12:18:13 2016
@@ -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.plugin.spi;
+
+public interface ContextEnricher {
+ void addBean(String id, Class<?> clazz);
+ void addBlueprintWriter(String id, BlueprintWriter blueprintWriter);
+}
Added: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomBeanAnnotationHandler.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomBeanAnnotationHandler.java?rev=1758211&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomBeanAnnotationHandler.java (added)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomBeanAnnotationHandler.java Mon Aug 29 12:18:13 2016
@@ -0,0 +1,28 @@
+/**
+ * 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.spi;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+
+public interface CustomBeanAnnotationHandler<A extends Annotation> {
+ Class<A> getAnnotation();
+
+ void handleBeanAnnotation(AnnotatedElement annotatedElement, String id, ContextEnricher contextEnricher);
+}
Added: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomDependencyAnnotationHandler.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomDependencyAnnotationHandler.java?rev=1758211&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomDependencyAnnotationHandler.java (added)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomDependencyAnnotationHandler.java Mon Aug 29 12:18:13 2016
@@ -0,0 +1,30 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * <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.spi;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+
+public interface CustomDependencyAnnotationHandler<A extends Annotation> {
+ Class<A> getAnnotation();
+
+ String handleDependencyAnnotation(AnnotatedElement annotatedElement, String name, ContextEnricher contextEnricher);
+
+ String handleDependencyAnnotation(Class<?> clazz, A annotation, String name, ContextEnricher contextEnricher);
+}
Added: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomFactoryMethodAnnotationHandler.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomFactoryMethodAnnotationHandler.java?rev=1758211&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomFactoryMethodAnnotationHandler.java (added)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomFactoryMethodAnnotationHandler.java Mon Aug 29 12:18:13 2016
@@ -0,0 +1,28 @@
+/**
+ * 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.spi;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+
+public interface CustomFactoryMethodAnnotationHandler<A extends Annotation> {
+ Class<A> getAnnotation();
+
+ void handleFactoryMethodAnnotation(AnnotatedElement annotatedElement, String id, ContextEnricher contextEnricher);
+}
Added: aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomBeanAnnotationHandler
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomBeanAnnotationHandler?rev=1758211&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomBeanAnnotationHandler (added)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomBeanAnnotationHandler Mon Aug 29 12:18:13 2016
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+org.apache.aries.blueprint.plugin.pax.OsgiServiceProviderHandler
\ No newline at end of file
Added: aries/trunk/blueprint/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/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomDependencyAnnotationHandler?rev=1758211&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomDependencyAnnotationHandler (added)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomDependencyAnnotationHandler Mon Aug 29 12:18:13 2016
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+org.apache.aries.blueprint.plugin.pax.OsgiServiceHandler
\ No newline at end of file
Added: aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomFactoryMethodAnnotationHandler
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomFactoryMethodAnnotationHandler?rev=1758211&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomFactoryMethodAnnotationHandler (added)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomFactoryMethodAnnotationHandler Mon Aug 29 12:18:13 2016
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+org.apache.aries.blueprint.plugin.pax.OsgiServiceProviderHandler
\ No newline at end of file
Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/GeneratorTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/GeneratorTest.java?rev=1758211&r1=1758210&r2=1758211&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/GeneratorTest.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/GeneratorTest.java Mon Aug 29 12:18:13 2016
@@ -277,7 +277,7 @@ public class GeneratorTest {
assertXpathEquals(bean1, "property[@name='myValue']/@value", "test");
assertXpathEquals(bean1, "property[@name='serviceA1']/@ref", "my1");
- assertXpathEquals(bean1, "property[@name='serviceA2']/@ref", "my1");
+ assertXpathEquals(bean1, "property[@name='serviceA2']/@ref", "my2");
assertXpathEquals(bean1, "property[@name='serviceB']/@ref", "serviceABImpl");
assertXpathEquals(bean1, "property[@name='serviceB2']/@ref", "serviceB2Id");
assertXpathEquals(bean1, "property[@name='serviceBRef']/@ref", "serviceB-typeB1Ref");
Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java?rev=1758211&r1=1758210&r2=1758211&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java Mon Aug 29 12:18:13 2016
@@ -18,14 +18,8 @@
*/
package org.apache.aries.blueprint.plugin.model;
-import static org.junit.Assert.assertEquals;
-
-import org.apache.aries.blueprint.plugin.test.MyBean3;
import org.apache.aries.blueprint.plugin.test.MyFactoryBean;
import org.apache.aries.blueprint.plugin.test.MyProduced;
-import org.apache.aries.blueprint.plugin.test.ServiceB;
-import org.apache.aries.blueprint.plugin.test.ServiceReferences;
-import org.apache.aries.blueprint.plugin.test.ServiceReferencesParent;
import org.junit.Assert;
import org.junit.Test;
import org.osgi.framework.Bundle;
@@ -33,30 +27,32 @@ import org.osgi.framework.BundleContext;
import org.osgi.service.blueprint.container.BlueprintContainer;
import org.osgi.service.blueprint.container.Converter;
+import static org.junit.Assert.assertEquals;
+
public class ContextTest {
- @Test
- public void testLists() {
- Context context = new Context(MyBean3.class);
- Assert.assertEquals(1, context.getBeans().size());
- Assert.assertEquals(0, context.getServiceRefs().size());
- }
-
- @Test
- public void testLists2() {
- Context context = new Context(ServiceReferences.class);
- Assert.assertEquals(1, context.getBeans().size());
- Assert.assertEquals(3, context.getServiceRefs().size());
- }
-
- @Test
- public void testMatching() throws NoSuchFieldException, SecurityException {
- Context context = new Context(ServiceReferences.class);
- BeanRef matching = context.getMatching(new BeanRef(ServiceReferencesParent.class.getDeclaredField("serviceB")));
- Assert.assertEquals(OsgiServiceRef.class, matching.getClass());
- Assert.assertEquals(ServiceB.class, matching.clazz);
- Assert.assertEquals("serviceB-typeB1", matching.id);
- }
+// @Test
+// public void testLists() {
+// Context context = new Context(MyBean3.class);
+// Assert.assertEquals(1, context.getBeans().size());
+// Assert.assertEquals(0, context.getServiceRefs().size());
+// }
+//
+// @Test
+// public void testLists2() {
+// Context context = new Context(ServiceReferences.class);
+// Assert.assertEquals(1, context.getBeans().size());
+// Assert.assertEquals(3, context.getServiceRefs().size());
+// }
+
+// @Test
+// public void testMatching() throws NoSuchFieldException, SecurityException {
+// Context context = new Context(ServiceReferences.class);
+// BeanRef matching = context.getMatching(new BeanRef(ServiceReferencesParent.class.getDeclaredField("serviceB")));
+// Assert.assertEquals(OsgiServiceRef.class, matching.getClass());
+// Assert.assertEquals(ServiceB.class, matching.clazz);
+// Assert.assertEquals("serviceB-typeB1", matching.id);
+// }
private void assertSpecialRef(String expectedId, Class<?> clazz) {
Context context = new Context();
Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/BeanWithSetters.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/BeanWithSetters.java?rev=1758211&r1=1758210&r2=1758211&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/BeanWithSetters.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/BeanWithSetters.java Mon Aug 29 12:18:13 2016
@@ -75,11 +75,9 @@ public class BeanWithSetters {
}
@Inject
- @OsgiService(filter = "(type=B1Ref)")
- public void setServiceBRef(ServiceB serviceBRef) {
+ public void setServiceBRef(@OsgiService(filter = "(type=B1Ref)") ServiceB serviceBRef) {
}
-
@Inject
@Named("serviceB2IdRef")
@OsgiService(filter = "(type=B2Ref)")