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/06/03 20:52:55 UTC

svn commit: r1746761 - in /aries/trunk/blueprint/blueprint-maven-plugin: ./ src/main/java/org/apache/aries/blueprint/plugin/ src/main/java/org/apache/aries/blueprint/plugin/model/ src/main/java/org/apache/aries/blueprint/plugin/model/service/

Author: alien11689
Date: Fri Jun  3 20:52:55 2016
New Revision: 1746761

URL: http://svn.apache.org/viewvc?rev=1746761&view=rev
Log:
[ARIES-1561] Prepare ServiceProvider model and move service provider classes to separate package

Added:
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/service/
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/service/ServiceProvider.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/service/ServiceProviderWriter.java
Removed:
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/OsgiServiceProviderWriter.java
Modified:
    aries/trunk/blueprint/blueprint-maven-plugin/   (props changed)
    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

Propchange: aries/trunk/blueprint/blueprint-maven-plugin/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Fri Jun  3 20:52:55 2016
@@ -5,3 +5,4 @@ target
 .project
 velocity.log
 .externalToolBuilders
+.idea

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=1746761&r1=1746760&r2=1746761&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 Fri Jun  3 20:52:55 2016
@@ -26,6 +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 javax.persistence.PersistenceContext;
 import javax.persistence.PersistenceUnit;
@@ -89,7 +90,7 @@ public class Generator implements Proper
             }
 
             new OsgiServiceRefWriter(writer).write(context.getServiceRefs());
-            new OsgiServiceProviderWriter(writer).write(context.getBeans());
+            new ServiceProviderWriter(writer).write(context.getServiceProviders());
 
             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=1746761&r1=1746760&r2=1746761&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 Fri Jun  3 20:52:55 2016
@@ -18,6 +18,7 @@
  */
 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.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -50,6 +51,7 @@ public class Bean extends BeanRef {
     public List<Field> persistenceFields;
     public Set<TransactionalDef> transactionDefs = new HashSet<>();
     public boolean isPrototype;
+    public List<ServiceProvider> serviceProviders = new ArrayList<>();
 
     public Bean(Class<?> clazz) {
         super(clazz, BeanRef.getBeanName(clazz));
@@ -73,6 +75,11 @@ public class Bean extends BeanRef {
         this.isPrototype = isPrototype(clazz);
         this.persistenceFields = introspector.fieldsWith(PersistenceContext.class, PersistenceUnit.class);
         setQualifiersFromAnnotations(clazz.getAnnotations());
+
+        ServiceProvider serviceProvider = ServiceProvider.fromBean(this);
+        if(serviceProvider != null){
+            serviceProviders.add(serviceProvider);
+        }
     }
 
     private boolean isPrototype(Class<?> clazz) {

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=1746761&r1=1746760&r2=1746761&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 Fri Jun  3 20:52:55 2016
@@ -18,6 +18,7 @@
  */
 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.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
@@ -29,21 +30,23 @@ import javax.inject.Named;
 import javax.inject.Singleton;
 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.SortedSet;
 import java.util.TreeSet;
 
 public class Context implements Matcher {
 
-    SortedSet<BeanRef> reg;
+    SortedSet<BeanRef> reg = new TreeSet<BeanRef>();
+    private final List<ServiceProvider> serviceProviders = new ArrayList<>();
 
     public Context(Class<?>... beanClasses) {
         this(Arrays.asList(beanClasses));
     }
 
     public Context(Collection<Class<?>> beanClasses) {
-        this.reg = new TreeSet<BeanRef>();
         addBlueprintRefs();
         addBeans(beanClasses);
     }
@@ -65,11 +68,16 @@ public class Context implements Matcher
         Bean bean = new Bean(clazz);
         reg.add(bean);
         addServiceRefs(clazz);
-        addProducedBeans(clazz, bean);
+        addProducedBeans(bean);
+        addServiceProviders(bean);
     }
 
-    private void addProducedBeans(Class<?> clazz, BeanRef factoryBean) {
-        for (Method method : clazz.getMethods()) {
+    private void addServiceProviders(Bean bean) {
+        serviceProviders.addAll(bean.serviceProviders);
+    }
+
+    private void addProducedBeans(BeanRef factoryBean) {
+        for (Method method : factoryBean.clazz.getMethods()) {
             Produces produces = method.getAnnotation(Produces.class);
             Named named = method.getAnnotation(Named.class);
             Singleton singleton = method.getAnnotation(Singleton.class);
@@ -135,4 +143,7 @@ public class Context implements Matcher
         return serviceRefs;
     }
 
+    public List<ServiceProvider> getServiceProviders() {
+        return serviceProviders;
+    }
 }

Added: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/service/ServiceProvider.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/service/ServiceProvider.java?rev=1746761&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/service/ServiceProvider.java (added)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/service/ServiceProvider.java Fri Jun  3 20:52:55 2016
@@ -0,0 +1,46 @@
+package org.apache.aries.blueprint.plugin.model.service;
+
+import com.google.common.collect.Lists;
+import org.apache.aries.blueprint.plugin.model.Bean;
+import org.ops4j.pax.cdi.api.OsgiServiceProvider;
+import org.ops4j.pax.cdi.api.Properties;
+import org.ops4j.pax.cdi.api.Property;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class ServiceProvider {
+    public final List<String> interfaces;
+    public final String beanRef;
+    public final Map<String, String> serviceProperties;
+
+    public ServiceProvider(List<String> interfaces, String beanRef, Map<String, String> serviceProperties) {
+        this.interfaces = interfaces;
+        this.beanRef = beanRef;
+        this.serviceProperties = serviceProperties;
+    }
+
+    public static ServiceProvider fromBean(Bean bean) {
+        OsgiServiceProvider serviceProvider = bean.clazz.getAnnotation(OsgiServiceProvider.class);
+        if (serviceProvider == null) {
+            return null;
+        }
+
+        List<String> interfaceNames = Lists.newArrayList();
+        for (Class<?> serviceIf : serviceProvider.classes()) {
+            interfaceNames.add(serviceIf.getName());
+        }
+
+        Properties properties = bean.clazz.getAnnotation(Properties.class);
+
+        Map<String, String> propertiesAsMap = new HashMap<>();
+        if (properties != null) {
+            for (Property property : properties.value()) {
+                propertiesAsMap.put(property.name(), property.value());
+            }
+        }
+
+        return new ServiceProvider(interfaceNames, bean.id, propertiesAsMap);
+    }
+}

Added: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/service/ServiceProviderWriter.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/service/ServiceProviderWriter.java?rev=1746761&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/service/ServiceProviderWriter.java (added)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/service/ServiceProviderWriter.java Fri Jun  3 20:52:55 2016
@@ -0,0 +1,108 @@
+/**
+ * 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.model.service;
+
+import com.google.common.collect.Iterables;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+import java.util.Collection;
+import java.util.Map;
+
+public class ServiceProviderWriter {
+    private final XMLStreamWriter writer;
+
+    public ServiceProviderWriter(XMLStreamWriter writer) {
+        this.writer = writer;
+    }
+
+    public void write(Collection<ServiceProvider> serviceProviders) throws XMLStreamException {
+        for (ServiceProvider serviceProvider : serviceProviders) {
+            write(serviceProvider);
+        }
+    }
+
+    private void write(ServiceProvider serviceProvider) 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 = serviceProvider.serviceProperties.isEmpty() && serviceProvider.interfaces.size() < 2;
+        if (writeEmptyElement) {
+            writer.writeEmptyElement("service");
+        } else {
+            writer.writeStartElement("service");
+        }
+        writer.writeAttribute("ref", serviceProvider.beanRef);
+
+        if (serviceProvider.interfaces.size() == 0) {
+            writer.writeAttribute("auto-export", "interfaces");
+        } else if (serviceProvider.interfaces.size() == 1) {
+            writer.writeAttribute("interface", Iterables.getOnlyElement(serviceProvider.interfaces));
+        } else {
+            writeInterfacesElement(serviceProvider.interfaces);
+        }
+
+        writer.writeCharacters("\n");
+
+        if (!serviceProvider.serviceProperties.isEmpty()) {
+            writeProperties(serviceProvider.serviceProperties);
+        }
+
+        if (!writeEmptyElement) {
+            writer.writeEndElement();
+            writer.writeCharacters("\n");
+        }
+    }
+
+    private void writeInterfacesElement(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(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");
+    }
+
+
+}