Author: alien11689 Date: Tue Dec 20 12:41:01 2016 New Revision: 1775285 URL: http://svn.apache.org/viewvc?rev=1775285&view=rev Log: [ARIES-1641] Read service.ranking property as ranking attribute in service element, This closes #60
Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceProviderHandler.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/GeneratorTest.java aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyFactoryBeanAsService.java Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceProviderHandler.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceProviderHandler.java?rev=1775285&r1=1775284&r2=1775285&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceProviderHandler.java (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceProviderHandler.java Tue Dec 20 12:41:01 2016 @@ -31,11 +31,15 @@ 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.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; public class OsgiServiceProviderHandler implements BeanAnnotationHandler<OsgiServiceProvider> { + + private static final List<String> SPECIAL_PROPERTIES = Collections.singletonList("service.ranking"); + @Override public Class<OsgiServiceProvider> getAnnotation() { return OsgiServiceProvider.class; @@ -83,6 +87,7 @@ public class OsgiServiceProviderHandler } if (!propertiesAsMap.isEmpty()) { + writeRanking(writer, propertiesAsMap); writeProperties(writer, propertiesAsMap); } @@ -126,16 +131,29 @@ public class OsgiServiceProviderHandler writer.writeCharacters("\n"); } + private void writeRanking(XMLStreamWriter writer, Map<String, String> propertiesAsMap) throws XMLStreamException { + if (propertiesAsMap.containsKey("service.ranking")) { + try { + Integer ranking = Integer.parseInt(propertiesAsMap.get("service.ranking")); + writer.writeAttribute("ranking", ranking.toString()); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("service.ranking property must be an integer!"); + } + } + } + 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"); + if (!SPECIAL_PROPERTIES.contains(property.getKey())) { + writer.writeCharacters(" "); + writer.writeEmptyElement("entry"); + writer.writeAttribute("key", property.getKey()); + writer.writeAttribute("value", property.getValue()); + writer.writeCharacters("\n"); + } } writer.writeCharacters(" "); writer.writeEndElement(); Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/GeneratorTest.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/GeneratorTest.java?rev=1775285&r1=1775284&r2=1775285&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/GeneratorTest.java (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/GeneratorTest.java Tue Dec 20 12:41:01 2016 @@ -191,6 +191,18 @@ public class GeneratorTest { } @Test + public void testGenerateServiceWithRanking() throws Exception { + Node serviceWithRanking = getServiceByRef("serviceWithRanking"); + + assertXpathDoesNotExist(serviceWithRanking, "@interface"); + assertXpathEquals(serviceWithRanking, "@auto-export", "interfaces"); + assertXpathDoesNotExist(serviceWithRanking, "interfaces"); + assertXpathEquals(serviceWithRanking, "@ranking", "100"); + assertXpathEquals(serviceWithRanking, "count(service-properties/entry)", "0"); + assertXpathDoesNotExist(serviceWithRanking, "service-properties/entry[@key='service.ranking']"); + } + + @Test public void testGenerateBeanWithConstructorInjection() throws Exception { // Bean with constructor injection Node myBean5 = getBeanById("myBean5"); @@ -289,9 +301,11 @@ public class GeneratorTest { assertXpathEquals(service, "@auto-export", "interfaces"); assertXpathDoesNotExist(service, "@interface"); assertXpathDoesNotExist(service, "interfaces"); + assertXpathEquals(service, "@ranking", "100"); assertXpathEquals(service, "count(service-properties/entry)", "2"); assertXpathEquals(service, "service-properties/entry[@key='n1']/@value", "v1"); assertXpathEquals(service, "service-properties/entry[@key='n2']/@value", "v2"); + assertXpathDoesNotExist(service, "service-properties/entry[@key='service.ranking']"); } @Test Modified: aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyFactoryBeanAsService.java URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyFactoryBeanAsService.java?rev=1775285&r1=1775284&r2=1775285&view=diff ============================================================================== --- aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyFactoryBeanAsService.java (original) +++ aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyFactoryBeanAsService.java Tue Dec 20 12:41:01 2016 @@ -54,7 +54,8 @@ public class MyFactoryBeanAsService { @OsgiServiceProvider @Properties({ @Property(name = "n1", value = "v1"), - @Property(name = "n2", value = "v2") + @Property(name = "n2", value = "v2"), + @Property(name = "service.ranking", value = "100") }) public MyProduced createBeanWithServiceExpose4() { return new MyProduced("My message");