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; + } +}