Author: alien11689
Date: Sun Aug  6 18:26:33 2017
New Revision: 1804251

URL: http://svn.apache.org/viewvc?rev=1804251&view=rev
Log:
[ARIES-1737] Generate custom type converters in blueprint xml

Added:
    
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/CustomTypeConverterWriter.java
    
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/converters/
    
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/converters/Converter1.java
      - copied, changed from r1804208, 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean1.java
    
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/converters/Converter2.java
Modified:
    
aries/trunk/blueprint/plugin/blueprint-maven-plugin-itest/src/it/simple-project/verify.groovy
    
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Blueprint.java
    
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/BlueprintFileWriterTest.java

Modified: 
aries/trunk/blueprint/plugin/blueprint-maven-plugin-itest/src/it/simple-project/verify.groovy
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin-itest/src/it/simple-project/verify.groovy?rev=1804251&r1=1804250&r2=1804251&view=diff
==============================================================================
--- 
aries/trunk/blueprint/plugin/blueprint-maven-plugin-itest/src/it/simple-project/verify.groovy
 (original)
+++ 
aries/trunk/blueprint/plugin/blueprint-maven-plugin-itest/src/it/simple-project/verify.groovy
 Sun Aug  6 18:26:33 2017
@@ -23,3 +23,4 @@ def xml = new groovy.util.XmlSlurper().p
 assert xml.name() == 'blueprint'
 assert xml.bean.find{ it.@class == 'p1.T1'}.@id == 't1'
 assert xml.bean.find{ it.@class == 'p1.T2'}.size() == 0
+assert xml.'type-converters'.size() == 0

Modified: 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Blueprint.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Blueprint.java?rev=1804251&r1=1804250&r2=1804251&view=diff
==============================================================================
--- 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Blueprint.java
 (original)
+++ 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Blueprint.java
 Sun Aug  6 18:26:33 2017
@@ -32,12 +32,9 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.SortedSet;
-import java.util.TreeSet;
 
 public class Blueprint implements BlueprintRegistry, ContextEnricher, 
XmlWriter {
     private static final String NS_BLUEPRINT = 
"http://www.osgi.org/xmlns/blueprint/v1.0.0";;
@@ -139,11 +136,16 @@ public class Blueprint implements Bluepr
 
     public void write(XMLStreamWriter writer) throws XMLStreamException {
         writeBlueprint(writer);
+        writeTypeConverters(writer);
         writeBeans(writer);
         writeCustomWriters(writer);
         writer.writeEndElement();
     }
 
+    private void writeTypeConverters(XMLStreamWriter writer) throws 
XMLStreamException {
+        new CustomTypeConverterWriter(beanRefStore).write(writer);
+    }
+
     private void writeCustomWriters(XMLStreamWriter writer) throws 
XMLStreamException {
         List<String> customWriterKeys = new 
ArrayList<>(customWriters.keySet());
         Collections.sort(customWriterKeys);

Added: 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/CustomTypeConverterWriter.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/CustomTypeConverterWriter.java?rev=1804251&view=auto
==============================================================================
--- 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/CustomTypeConverterWriter.java
 (added)
+++ 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/CustomTypeConverterWriter.java
 Sun Aug  6 18:26:33 2017
@@ -0,0 +1,57 @@
+/**
+ * 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.model;
+
+import org.apache.aries.blueprint.plugin.spi.XmlWriter;
+import org.osgi.service.blueprint.container.Converter;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+import java.lang.annotation.Annotation;
+import java.util.List;
+
+class CustomTypeConverterWriter implements XmlWriter {
+
+    private static final String defaultBlueprintConverter = 
"blueprintConverter";
+    private final BeanRefStore beanRefStore;
+
+    CustomTypeConverterWriter(BeanRefStore beanRefStore) {
+        this.beanRefStore = beanRefStore;
+    }
+
+    public void write(XMLStreamWriter writer) throws XMLStreamException {
+        List<BeanRef> typeConverters = beanRefStore.getAllMatching(new 
BeanTemplate(Converter.class, new Annotation[0]));
+        if (hasCustomTypeConverters(typeConverters)) {
+            return;
+        }
+        writer.writeStartElement("type-converters");
+        for (BeanRef typeConverter : typeConverters) {
+            if (defaultBlueprintConverter.equals(typeConverter.id)) {
+                continue;
+            }
+            writer.writeEmptyElement("ref");
+            writer.writeAttribute("component-id", typeConverter.id);
+        }
+        writer.writeEndElement();
+    }
+
+    private boolean hasCustomTypeConverters(List<BeanRef> typeConverters) {
+        return typeConverters.isEmpty() || typeConverters.size() == 1 && 
"blueprintConverter".equals(typeConverters.get(0).id);
+    }
+}

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=1804251&r1=1804250&r2=1804251&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
 Sun Aug  6 18:26:33 2017
@@ -912,6 +912,14 @@ public class BlueprintFileWriterTest {
         assertXpathEquals(bean, "count(argument[7]/array/ref)", "0");
     }
 
+    @Test
+    public void shouldFindTypeConverters() throws Exception {
+        Node typeConverters = getTypeConverters();
+        assertXpathEquals(typeConverters, "count(*)", "2");
+        assertXpathEquals(typeConverters, "ref[1]/@component-id", 
"converter1");
+        assertXpathEquals(typeConverters, "ref[2]/@component-id", 
"converter2");
+    }
+
     private void assertXpathDoesNotExist(Node node, String xpathExpression) 
throws XPathExpressionException {
         assertXpathEquals(node, "count(" + xpathExpression + ")", "0");
     }
@@ -934,6 +942,10 @@ public class BlueprintFileWriterTest {
         return (Node) xpath.evaluate("/blueprint/bean[@id='" + id + "']", 
document, XPathConstants.NODE);
     }
 
+    private static Node getTypeConverters() throws XPathExpressionException {
+        return (Node) xpath.evaluate("/blueprint/type-converters", document, 
XPathConstants.NODE);
+    }
+
     private static Node getCmPropertiesById(String id) throws 
XPathExpressionException {
         return (Node) xpath.evaluate("/blueprint/cm-properties[@id='" + id + 
"']", document, XPathConstants.NODE);
     }

Copied: 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/converters/Converter1.java
 (from r1804208, 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean1.java)
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/converters/Converter1.java?p2=aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/converters/Converter1.java&p1=aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean1.java&r1=1804208&r2=1804251&rev=1804251&view=diff
==============================================================================
--- 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean1.java
 (original)
+++ 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/converters/Converter1.java
 Sun Aug  6 18:26:33 2017
@@ -6,9 +6,9 @@
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -16,51 +16,22 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.aries.blueprint.plugin.test;
+package org.apache.aries.blueprint.plugin.test.converters;
 
-import org.springframework.context.annotation.Lazy;
+import org.osgi.service.blueprint.container.Converter;
+import org.osgi.service.blueprint.container.ReifiedType;
 
-import javax.annotation.PostConstruct;
 import javax.inject.Singleton;
-import javax.transaction.Transactional;
-import javax.transaction.Transactional.TxType;
 
 @Singleton
-@Transactional(value=TxType.REQUIRES_NEW)
-@Lazy
-public class MyBean1 extends ParentBean {
-
-    public void overridenInit() {
-        // By overriding the method and removing the annotation, this method 
has lost its
-        // @PostConstruct method because it isn't @Inherited
-    }
-
-    @PostConstruct
-    public void init() {
-
-    }
-
-    @Transactional(TxType.NOT_SUPPORTED)
-    public void txNotSupported() {
-    }
-
-    @Transactional(TxType.MANDATORY)
-    public void txMandatory() {
-    }
-
-    @Transactional(TxType.NEVER)
-    public void txNever() {
-    }
-
-    @Transactional(TxType.REQUIRED)
-    public void txRequired() {
-    }
-
+public class Converter1 implements Converter {
     @Override
-    public void txOverridenWithoutTransactional() {
+    public boolean canConvert(Object o, ReifiedType reifiedType) {
+        return false;
     }
 
-    @Transactional(TxType.REQUIRES_NEW)
-    public void txOverridenWithRequiresNew() {
+    @Override
+    public Object convert(Object o, ReifiedType reifiedType) throws Exception {
+        return null;
     }
 }

Added: 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/converters/Converter2.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/converters/Converter2.java?rev=1804251&view=auto
==============================================================================
--- 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/converters/Converter2.java
 (added)
+++ 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/converters/Converter2.java
 Sun Aug  6 18:26:33 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.test.converters;
+
+import org.osgi.service.blueprint.container.Converter;
+import org.osgi.service.blueprint.container.ReifiedType;
+
+import javax.inject.Singleton;
+
+@Singleton
+public class Converter2 implements Converter {
+    @Override
+    public boolean canConvert(Object o, ReifiedType reifiedType) {
+        return false;
+    }
+
+    @Override
+    public Object convert(Object o, ReifiedType reifiedType) throws Exception {
+        return null;
+    }
+}


Reply via email to