Author: alien11689 Date: Sat Sep 30 12:22:15 2017 New Revision: 1810198 URL: http://svn.apache.org/viewvc?rev=1810198&view=rev Log: [ARIES-1743] Add @Service and @ServiceProperty annotations with handler
Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/AutoExport.java aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/Service.java aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/ServiceProperty.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceId.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceParameters.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ServiceHandler.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ServicePropertyWriter.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/Service1.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/Service2.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceProducer.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithAllClasses.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithClassHierarchy.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithManyInterfaces.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithOneInterface.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithProperties.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithRankingAndProperty.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithRankingParameter.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/SimplestService.java Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/Reference.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceHandler.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/test/java/org/apache/aries/blueprint/plugin/BlueprintFileWriterTest.java Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/AutoExport.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/AutoExport.java?rev=1810198&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/AutoExport.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/AutoExport.java Sat Sep 30 12:22:15 2017 @@ -0,0 +1,26 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.aries.blueprint.annotation.service; + +public enum AutoExport { + DISABLED, + INTERFACES, + CLASS_HIERARCHY, + ALL_CLASSES +} Modified: 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=1810198&r1=1810197&r2=1810198&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/Reference.java (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/Reference.java Sat Sep 30 12:22:15 2017 @@ -24,8 +24,7 @@ import java.lang.annotation.RetentionPol import java.lang.annotation.Target; /** - * Annotate dependency to inject service. - * It will generate reference element. + * Annotate dependency to inject a service. */ @Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/Service.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/Service.java?rev=1810198&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/Service.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/Service.java Sat Sep 30 12:22:15 2017 @@ -0,0 +1,54 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * <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 bean which should be registered as a service + */ +@Target({ElementType.TYPE, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface Service { + + /** + * @return the list of classes or interfaces with which the service will be registered + * When the list is empty than the service will be registered according to {@link #autoExport()} + */ + Class<?>[] classes() default {}; + + /** + * @return auto export policy (used when {@link #classes()} are not provided) + */ + AutoExport autoExport() default AutoExport.INTERFACES; + + /** + * @return service.ranking property of service + * this parameter override service.ranking property (in {@link #properties()}) if it has value not equal to 0 + */ + int ranking() default 0; + + /** + * @return the list of service properties + */ + ServiceProperty[] properties() default {}; +} Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/ServiceProperty.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/ServiceProperty.java?rev=1810198&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/ServiceProperty.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin-annotation/src/main/java/org/apache/aries/blueprint/annotation/service/ServiceProperty.java Sat Sep 30 12:22:15 2017 @@ -0,0 +1,40 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.aries.blueprint.annotation.service; + +/** + * Service property for service registration + */ +public @interface ServiceProperty { + + /** + * @return name of property + */ + String name(); + + /** + * @return array of property values + */ + String[] values(); + + /** + * @return type of value or type of each value in values array + */ + Class<?> type() default String.class; +} Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceHandler.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceHandler.java?rev=1810198&r1=1810197&r2=1810198&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceHandler.java (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceHandler.java Sat Sep 30 12:22:15 2017 @@ -19,7 +19,6 @@ 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; @@ -30,6 +29,9 @@ import java.lang.reflect.AnnotatedElemen import java.lang.reflect.Field; import java.lang.reflect.Method; +import static org.apache.aries.blueprint.plugin.handlers.blueprint.service.ReferenceParameters.needAvailability; +import static org.apache.aries.blueprint.plugin.handlers.blueprint.service.ReferenceParameters.needTimeout; + public class ReferenceHandler implements CustomDependencyAnnotationHandler<Reference> { @Override public Class<Reference> getAnnotation() { @@ -40,15 +42,12 @@ public class ReferenceHandler implements 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; + return handleDependencyAnnotation(clazz, reference, name, contextEnricher); } @Override public String handleDependencyAnnotation(final Class<?> clazz, Reference reference, String name, ContextEnricher contextEnricher) { - final String id = name != null ? name : generateReferenceId(clazz, reference, contextEnricher); + final String id = name != null ? name : ReferenceId.generateReferenceId(clazz, reference, contextEnricher); contextEnricher.addBean(id, clazz); contextEnricher.addBlueprintContentWriter(getWriterId(id, clazz), getXmlWriter(id, clazz, reference, contextEnricher)); return id; @@ -77,17 +76,6 @@ public class ReferenceHandler implements }; } - 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; } @@ -105,40 +93,4 @@ public class ReferenceHandler implements 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); - } - } - } - } Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceId.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceId.java?rev=1810198&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceId.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceId.java Sat Sep 30 12:22:15 2017 @@ -0,0 +1,63 @@ +/** + * 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.ContextEnricher; + +import static org.apache.aries.blueprint.plugin.handlers.blueprint.service.ReferenceParameters.needAvailability; +import static org.apache.aries.blueprint.plugin.handlers.blueprint.service.ReferenceParameters.needTimeout; + +class ReferenceId { + static 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 static 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); + } + } + } +} Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceParameters.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceParameters.java?rev=1810198&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceParameters.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ReferenceParameters.java Sat Sep 30 12:22:15 2017 @@ -0,0 +1,37 @@ +/** + * 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; + +class ReferenceParameters { + + static boolean needTimeout(Reference reference) { + return reference.timeout() >= 0; + } + + static 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()); + } +} Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ServiceHandler.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/ServiceHandler.java?rev=1810198&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ServiceHandler.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ServiceHandler.java Sat Sep 30 12:22:15 2017 @@ -0,0 +1,94 @@ +/** + * 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.AutoExport; +import org.apache.aries.blueprint.annotation.service.Service; +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; + +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamWriter; +import java.lang.reflect.AnnotatedElement; + +public class ServiceHandler implements BeanAnnotationHandler<Service> { + @Override + public Class<Service> getAnnotation() { + return Service.class; + } + + @Override + public void handleBeanAnnotation(final AnnotatedElement annotatedElement, final String id, ContextEnricher contextEnricher, BeanEnricher beanEnricher) { + final Service annotation = annotatedElement.getAnnotation(Service.class); + contextEnricher.addBlueprintContentWriter("service/" + id, new XmlWriter() { + @Override + public void write(XMLStreamWriter writer) throws XMLStreamException { + writer.writeStartElement("service"); + writer.writeAttribute("ref", id); + writeRanking(writer, annotation); + writeExportSpecification(writer, annotation); + new ServicePropertyWriter(annotation.properties(), annotation.ranking()).writeProperties(writer); + writer.writeEndElement(); + } + }); + } + + private void writeRanking(XMLStreamWriter writer, Service annotation) throws XMLStreamException { + if (annotation.ranking() != 0) { + writer.writeAttribute("ranking", String.valueOf(annotation.ranking())); + } + } + + private void writeExportSpecification(XMLStreamWriter writer, Service annotation) throws XMLStreamException { + if (annotation.classes().length == 0) { + if (annotation.autoExport() != AutoExport.DISABLED) { + writer.writeAttribute("auto-export", autoExport(annotation.autoExport())); + } + } else if (annotation.classes().length == 1) { + writer.writeAttribute("interface", annotation.classes()[0].getName()); + } else { + writeInterfaces(writer, annotation.classes()); + } + } + + private String autoExport(AutoExport autoExport) { + switch (autoExport) { + case INTERFACES: + return "interfaces"; + case ALL_CLASSES: + return "all-classes"; + case CLASS_HIERARCHY: + return "class-hierarchy"; + default: + throw new IllegalStateException("unkown " + autoExport); + } + } + + private void writeInterfaces(XMLStreamWriter writer, Class<?>[] classes) throws XMLStreamException { + writer.writeStartElement("interfaces"); + for (Class<?> singleClass : classes) { + writer.writeStartElement("value"); + writer.writeCharacters(singleClass.getName()); + writer.writeEndElement(); + } + writer.writeEndElement(); + } +} Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ServicePropertyWriter.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/ServicePropertyWriter.java?rev=1810198&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ServicePropertyWriter.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/blueprint/service/ServicePropertyWriter.java Sat Sep 30 12:22:15 2017 @@ -0,0 +1,101 @@ +/** + * 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.ServiceProperty; + +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamWriter; +import java.util.ArrayList; +import java.util.List; + +class ServicePropertyWriter { + private final List<ServiceProperty> serviceProperties; + + ServicePropertyWriter(ServiceProperty[] serviceProperties, int ranking) { + this.serviceProperties = filterProperties(serviceProperties, ranking != 0); + } + + private List<ServiceProperty> filterProperties(ServiceProperty[] properties, boolean rankingAlreadyProvided) { + List<ServiceProperty> filtered = new ArrayList<>(); + for (ServiceProperty sp : properties) { + if (rankingAlreadyProvided && sp.name().equals("service.ranking")) { + continue; + } + if (sp.values().length == 0) { + continue; + } + filtered.add(sp); + } + return filtered; + } + + void writeProperties(XMLStreamWriter writer) throws XMLStreamException { + if (!serviceProperties.isEmpty()) { + writer.writeStartElement("service-properties"); + for (ServiceProperty serviceProperty : serviceProperties) { + writeServiceProperty(writer, serviceProperty); + } + writer.writeEndElement(); + } + } + + private void writeServiceProperty(XMLStreamWriter writer, ServiceProperty serviceProperty) throws XMLStreamException { + writer.writeStartElement("entry"); + writer.writeAttribute("key", serviceProperty.name()); + if (isSingleValue(serviceProperty)) { + writeOneValueProperty(writer, serviceProperty); + } else { + writeMultiValueProperty(writer, serviceProperty); + } + writer.writeEndElement(); + } + + private boolean isSingleValue(ServiceProperty serviceProperty) { + return serviceProperty.values().length == 1; + } + + private boolean isStringProperty(ServiceProperty serviceProperty) { + return serviceProperty.type().equals(String.class); + } + + private void writeOneValueProperty(XMLStreamWriter writer, ServiceProperty serviceProperty) throws XMLStreamException { + if (isStringProperty(serviceProperty)) { + writer.writeAttribute("value", serviceProperty.values()[0]); + } else { + writer.writeStartElement("value"); + writer.writeAttribute("type", serviceProperty.type().getName()); + writer.writeCharacters(serviceProperty.values()[0]); + writer.writeEndElement(); + } + } + + private void writeMultiValueProperty(XMLStreamWriter writer, ServiceProperty serviceProperty) throws XMLStreamException { + writer.writeStartElement("array"); + if (!isStringProperty(serviceProperty)) { + writer.writeAttribute("value-type", serviceProperty.type().getName()); + } + for (String value : serviceProperty.values()) { + writer.writeStartElement("value"); + writer.writeCharacters(value); + writer.writeEndElement(); + } + writer.writeEndElement(); + } +} 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=1810198&r1=1810197&r2=1810198&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 Sat Sep 30 12:22:15 2017 @@ -19,4 +19,5 @@ org.apache.aries.blueprint.plugin.handle org.apache.aries.blueprint.plugin.handlers.javax.CdiTransactionFactory 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 +org.apache.aries.blueprint.plugin.handlers.blueprint.bean.BeanHandler +org.apache.aries.blueprint.plugin.handlers.blueprint.service.ServiceHandler \ No newline at end of file Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/BlueprintFileWriterTest.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/BlueprintFileWriterTest.java?rev=1810198&r1=1810197&r2=1810198&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/BlueprintFileWriterTest.java (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/BlueprintFileWriterTest.java Sat Sep 30 12:22:15 2017 @@ -36,6 +36,8 @@ import org.apache.aries.blueprint.plugin 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.aries.blueprint.plugin.test.service.Service1; +import org.apache.aries.blueprint.plugin.test.service.Service2; import org.apache.commons.io.output.ByteArrayOutputStream; import org.apache.xbean.finder.ClassFinder; import org.junit.BeforeClass; @@ -1055,6 +1057,166 @@ public class BlueprintFileWriterTest { assertXpathEquals(ref1ForCons, "@timeout", "1000"); } + @Test + public void shouldGenerateSimplestServiceFromBean() throws XPathExpressionException { + Node service = getServiceByRef("simplestService"); + assertXpathEquals(service, "@auto-export", "interfaces"); + assertXpathDoesNotExist(service, "service-properties"); + } + + @Test + public void shouldGenerateServiceWithAllClassesFromBean() throws XPathExpressionException { + Node service = getServiceByRef("serviceWithAllClasses"); + assertXpathEquals(service, "@auto-export", "all-classes"); + } + + @Test + public void shouldGenerateServiceWithClassHierarchyFromBean() throws XPathExpressionException { + Node service = getServiceByRef("serviceWithClassHierarchy"); + assertXpathEquals(service, "@auto-export", "class-hierarchy"); + } + + @Test + public void shouldGenerateServiceWithOneInterfaceFromBean() throws XPathExpressionException { + Node service = getServiceByRef("serviceWithOneInterface"); + assertXpathEquals(service, "count(@auto-export)", "0"); + assertXpathEquals(service, "count(interfaces)", "0"); + assertXpathEquals(service, "@interface", Service1.class.getName()); + } + + @Test + public void shouldGenerateServiceWithManyInterfacesFromBean() throws XPathExpressionException { + Node service = getServiceByRef("serviceWithManyInterfaces"); + assertXpathEquals(service, "count(@auto-export)", "0"); + assertXpathEquals(service, "count(@interface)", "0"); + assertXpathEquals(service, "count(interfaces/value)", "2"); + assertXpathEquals(service, "interfaces/value[1]", Service1.class.getName()); + assertXpathEquals(service, "interfaces/value[2]", Service2.class.getName()); + } + + @Test + public void shouldGenerateServiceWithRankingFromBean() throws XPathExpressionException { + Node service = getServiceByRef("serviceWithRankingParameter"); + assertXpathEquals(service, "@ranking", "1000"); + } + + @Test + public void shouldGenerateServiceWithRankingAndPropertyFromBean() throws XPathExpressionException { + Node service = getServiceByRef("serviceWithRankingAndProperty"); + assertXpathEquals(service, "@ranking", "2"); + assertXpathDoesNotExist(service, "service-properties"); + } + + @Test + public void shouldGenerateServiceWithPropertiesFromBean() throws XPathExpressionException { + Node service = getServiceByRef("serviceWithProperties"); + assertXpathEquals(service, "count(service-properties/entry)", "4"); + assertXpathEquals(service, "service-properties/entry[@key='oneValue']/@value", "test"); + assertXpathEquals(service, "count(service-properties/entry[@key='oneValue']/value)", "0"); + + assertXpathEquals(service, "count(service-properties/entry[@key='intValue']/@value)", "0"); + assertXpathEquals(service, "service-properties/entry[@key='intValue']/value/@type", Integer.class.getName()); + assertXpathEquals(service, "service-properties/entry[@key='intValue']/value/text()", "1"); + + assertXpathEquals(service, "count(service-properties/entry[@key='longArray']/@value)", "0"); + assertXpathEquals(service, "count(service-properties/entry[@key='longArray']/value)", "0"); + assertXpathEquals(service, "count(service-properties/entry[@key='longArray']/array/value)", "3"); + assertXpathEquals(service, "service-properties/entry[@key='longArray']/array/@value-type", Long.class.getName()); + assertXpathEquals(service, "service-properties/entry[@key='longArray']/array/value[1]", "1"); + assertXpathEquals(service, "service-properties/entry[@key='longArray']/array/value[2]", "2"); + assertXpathEquals(service, "service-properties/entry[@key='longArray']/array/value[3]", "3"); + + assertXpathEquals(service, "count(service-properties/entry[@key='stringArray']/@value)", "0"); + assertXpathEquals(service, "count(service-properties/entry[@key='stringArray']/value)", "0"); + assertXpathEquals(service, "count(service-properties/entry[@key='stringArray']/array/value)", "2"); + assertXpathEquals(service, "count(service-properties/entry[@key='stringArray']/array/@value-type)", "0"); + assertXpathEquals(service, "service-properties/entry[@key='stringArray']/array/value[1]", "a"); + assertXpathEquals(service, "service-properties/entry[@key='stringArray']/array/value[2]", "b"); + } + + @Test + public void shouldGenerateSimplestServiceFromFactory() throws XPathExpressionException { + Node service = getServiceByRef("producedSimplestService"); + assertXpathEquals(service, "@auto-export", "interfaces"); + assertXpathDoesNotExist(service, "service-properties"); + } + + @Test + public void shouldGenerateServiceWithAllClassesFromFactory() throws XPathExpressionException { + Node service = getServiceByRef("producedServiceWithAllClasses"); + assertXpathEquals(service, "@auto-export", "all-classes"); + } + + @Test + public void shouldGenerateServiceWithClassHierarchyFromFactory() throws XPathExpressionException { + Node service = getServiceByRef("producedServiceWithClassHierarchy"); + assertXpathEquals(service, "@auto-export", "class-hierarchy"); + } + + @Test + public void shouldGenerateServiceWithOneInterfaceFromFactory() throws XPathExpressionException { + Node service = getServiceByRef("producedServiceWithOneInterface"); + assertXpathEquals(service, "count(@auto-export)", "0"); + assertXpathEquals(service, "count(interfaces)", "0"); + assertXpathEquals(service, "@interface", Service2.class.getName()); + } + + @Test + public void shouldGenerateServiceWithManyInterfacesFromFactory() throws XPathExpressionException { + Node service = getServiceByRef("producedServiceWithManyInterfaces"); + assertXpathEquals(service, "count(@auto-export)", "0"); + assertXpathEquals(service, "count(@interface)", "0"); + assertXpathEquals(service, "count(interfaces/value)", "2"); + assertXpathEquals(service, "interfaces/value[1]", Service1.class.getName()); + assertXpathEquals(service, "interfaces/value[2]", Service2.class.getName()); + } + + @Test + public void shouldGenerateServiceWithRankingFromFactory() throws XPathExpressionException { + Node service = getServiceByRef("producedServiceWithRanking"); + assertXpathEquals(service, "@ranking", "200"); + } + + @Test + public void shouldGenerateServiceWithRankingAndPropertyFromFactory() throws XPathExpressionException { + Node service = getServiceByRef("producedServiceWithRankingAndProperies"); + assertXpathEquals(service, "@ranking", "-9"); + assertXpathEquals(service, "count(service-properties/entry)", "1"); + assertXpathEquals(service, "service-properties/entry[@key='a']/@value", "1"); + } + + @Test + public void shouldGenerateServiceWithPropertiesFromFactory() throws XPathExpressionException { + Node service = getServiceByRef("producedServiceWithProperies"); + assertXpathEquals(service, "count(service-properties/entry)", "5"); + assertXpathEquals(service, "service-properties/entry[@key='oneValue']/@value", "test"); + assertXpathEquals(service, "count(service-properties/entry[@key='oneValue']/value)", "0"); + + assertXpathEquals(service, "count(service-properties/entry[@key='intValue']/@value)", "0"); + assertXpathEquals(service, "service-properties/entry[@key='intValue']/value/@type", Integer.class.getName()); + assertXpathEquals(service, "service-properties/entry[@key='intValue']/value/text()", "1"); + + assertXpathEquals(service, "count(service-properties/entry[@key='longArray']/@value)", "0"); + assertXpathEquals(service, "count(service-properties/entry[@key='longArray']/value)", "0"); + assertXpathEquals(service, "count(service-properties/entry[@key='longArray']/array/value)", "3"); + assertXpathEquals(service, "service-properties/entry[@key='longArray']/array/@value-type", Long.class.getName()); + assertXpathEquals(service, "service-properties/entry[@key='longArray']/array/value[1]", "1"); + assertXpathEquals(service, "service-properties/entry[@key='longArray']/array/value[2]", "2"); + assertXpathEquals(service, "service-properties/entry[@key='longArray']/array/value[3]", "3"); + + assertXpathEquals(service, "count(service-properties/entry[@key='stringArray']/@value)", "0"); + assertXpathEquals(service, "count(service-properties/entry[@key='stringArray']/value)", "0"); + assertXpathEquals(service, "count(service-properties/entry[@key='stringArray']/array/value)", "2"); + assertXpathEquals(service, "count(service-properties/entry[@key='stringArray']/array/@value-type)", "0"); + assertXpathEquals(service, "service-properties/entry[@key='stringArray']/array/value[1]", "a"); + assertXpathEquals(service, "service-properties/entry[@key='stringArray']/array/value[2]", "b"); + + assertXpathEquals(service, "count(@ranking)", "0"); + assertXpathEquals(service, "count(service-properties/entry[@key='service.ranking']/@value)", "0"); + assertXpathEquals(service, "service-properties/entry[@key='service.ranking']/value/@type", Integer.class.getName()); + assertXpathEquals(service, "service-properties/entry[@key='service.ranking']/value/text()", "5"); + } + 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/service/Service1.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/Service1.java?rev=1810198&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/Service1.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/Service1.java Sat Sep 30 12:22:15 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.aries.blueprint.plugin.test.service; + +public interface Service1 { +} Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/Service2.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/Service2.java?rev=1810198&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/Service2.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/Service2.java Sat Sep 30 12:22:15 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.aries.blueprint.plugin.test.service; + +public interface Service2 { +} Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceProducer.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceProducer.java?rev=1810198&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceProducer.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceProducer.java Sat Sep 30 12:22:15 2017 @@ -0,0 +1,88 @@ +/** + * 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.service; + +import org.apache.aries.blueprint.annotation.bean.Bean; +import org.apache.aries.blueprint.annotation.service.AutoExport; +import org.apache.aries.blueprint.annotation.service.Service; +import org.apache.aries.blueprint.annotation.service.ServiceProperty; + +import javax.inject.Singleton; + +@Singleton +public class ServiceProducer implements Service1, Service2 { + + @Service + @Bean(id = "producedSimplestService") + public Service1 simplestServiceProduced() { + return null; + } + + @Service(ranking = 200) + @Bean(id = "producedServiceWithRanking") + public Service1 serviceWithRanking() { + return null; + } + + @Service(autoExport = AutoExport.ALL_CLASSES) + @Bean(id = "producedServiceWithAllClasses") + public Service1 serviceWithAllClasses() { + return null; + } + + @Service(autoExport = AutoExport.CLASS_HIERARCHY) + @Bean(id = "producedServiceWithClassHierarchy") + public Service1 serviceWithClassHierarchy() { + return null; + } + + @Service(classes = {Service1.class, Service2.class}) + @Bean(id = "producedServiceWithManyInterfaces") + public Service1 serviceWithManyInterfaces() { + return null; + } + + @Service(classes = Service2.class) + @Bean(id = "producedServiceWithOneInterface") + public Service2 serviceWithOneInterface() { + return null; + } + + @Service(ranking = -9, properties = { + @ServiceProperty(name = "service.ranking", values = "-2"), + @ServiceProperty(name = "a", values = "1") + }) + @Bean(id = "producedServiceWithRankingAndProperies") + public Service2 serviceWithRankingAndProperties() { + return null; + } + + @Service(properties = { + @ServiceProperty(name = "oneValue", values = "test"), + @ServiceProperty(name = "intValue", values = "1", type = Integer.class), + @ServiceProperty(name = "longArray", values = {"1", "2", "3"}, type = Long.class), + @ServiceProperty(name = "emptyArray", values = {}), + @ServiceProperty(name = "stringArray", values = {"a", "b"}), + @ServiceProperty(name = "service.ranking", values = "5", type = Integer.class), + }) + @Bean(id = "producedServiceWithProperies") + public Service2 serviceWithProperties() { + return null; + } +} Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithAllClasses.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithAllClasses.java?rev=1810198&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithAllClasses.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithAllClasses.java Sat Sep 30 12:22:15 2017 @@ -0,0 +1,29 @@ +/** + * 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.service; + +import org.apache.aries.blueprint.annotation.service.AutoExport; +import org.apache.aries.blueprint.annotation.service.Service; + +import javax.inject.Singleton; + +@Service(autoExport = AutoExport.ALL_CLASSES) +@Singleton +public class ServiceWithAllClasses implements Service1, Service2 { +} Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithClassHierarchy.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithClassHierarchy.java?rev=1810198&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithClassHierarchy.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithClassHierarchy.java Sat Sep 30 12:22:15 2017 @@ -0,0 +1,29 @@ +/** + * 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.service; + +import org.apache.aries.blueprint.annotation.service.AutoExport; +import org.apache.aries.blueprint.annotation.service.Service; + +import javax.inject.Singleton; + +@Service(autoExport = AutoExport.CLASS_HIERARCHY) +@Singleton +public class ServiceWithClassHierarchy implements Service1, Service2 { +} Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithManyInterfaces.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithManyInterfaces.java?rev=1810198&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithManyInterfaces.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithManyInterfaces.java Sat Sep 30 12:22:15 2017 @@ -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.test.service; + +import org.apache.aries.blueprint.annotation.service.Service; + +import javax.inject.Singleton; + +@Service(classes = {Service1.class, Service2.class}) +@Singleton +public class ServiceWithManyInterfaces implements Service1, Service2 { +} Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithOneInterface.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithOneInterface.java?rev=1810198&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithOneInterface.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithOneInterface.java Sat Sep 30 12:22:15 2017 @@ -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.test.service; + +import org.apache.aries.blueprint.annotation.service.Service; + +import javax.inject.Singleton; + +@Service(classes = Service1.class) +@Singleton +public class ServiceWithOneInterface implements Service1, Service2 { +} Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithProperties.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithProperties.java?rev=1810198&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithProperties.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithProperties.java Sat Sep 30 12:22:15 2017 @@ -0,0 +1,35 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * <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.service; + +import org.apache.aries.blueprint.annotation.service.Service; +import org.apache.aries.blueprint.annotation.service.ServiceProperty; + +import javax.inject.Singleton; + +@Service(properties = { + @ServiceProperty(name = "oneValue", values = "test"), + @ServiceProperty(name = "intValue", values = "1", type = Integer.class), + @ServiceProperty(name = "longArray", values = {"1", "2", "3"}, type = Long.class), + @ServiceProperty(name = "emptyArray", values = {}), + @ServiceProperty(name = "stringArray", values = {"a", "b"}), +}) +@Singleton +public class ServiceWithProperties implements Service1, Service2 { +} Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithRankingAndProperty.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithRankingAndProperty.java?rev=1810198&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithRankingAndProperty.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithRankingAndProperty.java Sat Sep 30 12:22:15 2017 @@ -0,0 +1,29 @@ +/** + * 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.service; + +import org.apache.aries.blueprint.annotation.service.Service; +import org.apache.aries.blueprint.annotation.service.ServiceProperty; + +import javax.inject.Singleton; + +@Service(ranking = 2, properties = @ServiceProperty(name = "service.ranking", values = "3")) +@Singleton +public class ServiceWithRankingAndProperty implements Service1, Service2 { +} Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithRankingParameter.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithRankingParameter.java?rev=1810198&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithRankingParameter.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/ServiceWithRankingParameter.java Sat Sep 30 12:22:15 2017 @@ -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.test.service; + +import org.apache.aries.blueprint.annotation.service.Service; + +import javax.inject.Singleton; + +@Service(ranking = 1000) +@Singleton +public class ServiceWithRankingParameter implements Service1, Service2 { +} Added: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/SimplestService.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/SimplestService.java?rev=1810198&view=auto ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/SimplestService.java (added) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/service/SimplestService.java Sat Sep 30 12:22:15 2017 @@ -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.test.service; + +import org.apache.aries.blueprint.annotation.service.Service; + +import javax.inject.Singleton; + +@Service +@Singleton +public class SimplestService implements Service1, Service2 { +}