Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 120822009F8 for ; Fri, 3 Jun 2016 22:53:03 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 0A0C5160A49; Fri, 3 Jun 2016 20:53:03 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 0125E160A3B for ; Fri, 3 Jun 2016 22:53:01 +0200 (CEST) Received: (qmail 56027 invoked by uid 500); 3 Jun 2016 20:53:01 -0000 Mailing-List: contact commits-help@aries.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@aries.apache.org Delivered-To: mailing list commits@aries.apache.org Received: (qmail 56016 invoked by uid 99); 3 Jun 2016 20:53:01 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 03 Jun 2016 20:53:01 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id B9D6B1A0638 for ; Fri, 3 Jun 2016 20:53:00 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 0.374 X-Spam-Level: X-Spam-Status: No, score=0.374 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RP_MATCHES_RCVD=-1.426] autolearn=disabled Received: from mx2-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id jjo8AUMX16UM for ; Fri, 3 Jun 2016 20:52:58 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx2-lw-eu.apache.org (ASF Mail Server at mx2-lw-eu.apache.org) with ESMTP id 4BF995F19A for ; Fri, 3 Jun 2016 20:52:57 +0000 (UTC) Received: from svn01-us-west.apache.org (svn.apache.org [10.41.0.6]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id 13594E00A4 for ; Fri, 3 Jun 2016 20:52:55 +0000 (UTC) Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id B17C43A0217 for ; Fri, 3 Jun 2016 20:52:55 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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/ Date: Fri, 03 Jun 2016 20:52:55 -0000 To: commits@aries.apache.org From: alien11689@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20160603205255.B17C43A0217@svn01-us-west.apache.org> archived-at: Fri, 03 Jun 2016 20:53:03 -0000 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 persistenceFields; public Set transactionDefs = new HashSet<>(); public boolean isPrototype; + public List 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 reg; + SortedSet reg = new TreeSet(); + private final List serviceProviders = new ArrayList<>(); public Context(Class... beanClasses) { this(Arrays.asList(beanClasses)); } public Context(Collection> beanClasses) { - this.reg = new TreeSet(); 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 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 interfaces; + public final String beanRef; + public final Map serviceProperties; + + public ServiceProvider(List interfaces, String beanRef, Map 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 interfaceNames = Lists.newArrayList(); + for (Class serviceIf : serviceProvider.classes()) { + interfaceNames.add(serviceIf.getName()); + } + + Properties properties = bean.clazz.getAnnotation(Properties.class); + + Map 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 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 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 properties) throws XMLStreamException { + writer.writeCharacters(" "); + writer.writeStartElement("service-properties"); + writer.writeCharacters("\n"); + for (Map.Entry 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"); + } + + +}