geronimo-scm mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gno...@apache.org
Subject svn commit: r768730 [2/2] - in /geronimo/sandbox/blueprint: ./ blueprint-api/src/main/java/org/osgi/service/blueprint/context/ blueprint-bundle/ blueprint-compendium/ blueprint-compendium/src/ blueprint-compendium/src/main/ blueprint-compendium/src/mai...
Date Sun, 26 Apr 2009 17:53:49 GMT
Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/ValueRecipe.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/ValueRecipe.java?rev=768730&r1=768729&r2=768730&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/ValueRecipe.java
(original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/ValueRecipe.java
Sun Apr 26 17:53:47 2009
@@ -24,6 +24,7 @@
 import org.apache.xbean.recipe.ConstructionException;
 import org.apache.xbean.recipe.RecipeHelper;
 import org.osgi.service.blueprint.convert.ConversionService;
+import org.osgi.service.blueprint.reflect.ValueMetadata;
 
 /**
  * TODO: javadoc
@@ -34,11 +35,11 @@
 public class ValueRecipe extends AbstractRecipe {
 
     private ConversionService conversionService;
-    private String value;
+    private ValueMetadata value;
     private Class type;
     private Class groupingType;
 
-    public ValueRecipe(ConversionService conversionService, String value, Class type, Class
groupingType) {
+    public ValueRecipe(ConversionService conversionService, ValueMetadata value, Class type,
Class groupingType) {
         this.conversionService = conversionService;
         this.value = value;
         this.type = type;
@@ -64,7 +65,7 @@
         Class myType = determineType(type, groupingType, RecipeHelper.toClass(expectedType));
 
         try {
-            return conversionService.convert(value, myType);
+            return conversionService.convert(value.getStringValue(), myType);
         } catch (Exception e) {
             throw new ConstructionException(e);
         }

Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/namespace/ComponentDefinitionRegistryImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/namespace/ComponentDefinitionRegistryImpl.java?rev=768730&r1=768729&r2=768730&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/namespace/ComponentDefinitionRegistryImpl.java
(original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/namespace/ComponentDefinitionRegistryImpl.java
Sun Apr 26 17:53:47 2009
@@ -34,6 +34,8 @@
 import org.osgi.service.blueprint.reflect.Metadata;
 import org.osgi.service.blueprint.reflect.BeanMetadata;
 import org.osgi.service.blueprint.reflect.Target;
+import org.apache.geronimo.blueprint.ExtendedComponentDefinitionRegistry;
+import org.apache.geronimo.blueprint.ComponentDefinitionRegistryProcessor;
 
 /**
  * ComponentDefinitionRegistry implementation.
@@ -44,16 +46,14 @@
  * @author <a href="mailto:dev@geronimo.apache.org">Apache Geronimo Project</a>
  * @version $Rev: 760378 $, $Date: 2009-03-31 11:31:38 +0200 (Tue, 31 Mar 2009) $
  */
-public class ComponentDefinitionRegistryImpl implements ComponentDefinitionRegistry {
+public class ComponentDefinitionRegistryImpl implements ExtendedComponentDefinitionRegistry
{
 
     private final Map<String, ComponentMetadata> components;
-    private final List<Target> typeConverters;
     private String defaultInitMethod;
     private String defaultDestroyMethod;
 
     public ComponentDefinitionRegistryImpl() {
         components = new ConcurrentHashMap<String, ComponentMetadata>();
-        typeConverters = new CopyOnWriteArrayList<Target>();
     }
 
     public boolean containsComponentDefinition(String name) {
@@ -80,30 +80,6 @@
         components.remove(name);
     }
 
-    public void registerTypeConverter(Target typeConverter) {
-        typeConverters.add(typeConverter);
-    }
-    
-    public List<Target> getTypeConverters() {
-        return Collections.unmodifiableList(typeConverters);
-    }
-    
-    public List<String> getTypeConverterNames() {
-        List<String> ids = new ArrayList<String>();
-        for (Target value : typeConverters) {
-            if (value instanceof ComponentMetadata) {
-                ComponentMetadata beanMetadata = (ComponentMetadata) value;
-                ids.add(beanMetadata.getId());
-            } else if (value instanceof RefMetadata) {
-                RefMetadata referenceValue = (RefMetadata) value;
-                ids.add(referenceValue.getComponentId());
-            } else {
-                throw new RuntimeException("Unexpected converter type: " + value);
-            }
-        }
-        return ids;
-    }
-
     public void setDefaultInitMethod(String method) {
         defaultInitMethod = method;
     }

Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/namespace/NamespaceHandlerRegistryImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/namespace/NamespaceHandlerRegistryImpl.java?rev=768730&r1=768729&r2=768730&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/namespace/NamespaceHandlerRegistryImpl.java
(original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/namespace/NamespaceHandlerRegistryImpl.java
Sun Apr 26 17:53:47 2009
@@ -60,6 +60,7 @@
         this.bundleContext = bundleContext;
         handlers = new HashMap<URI, NamespaceHandler>();
         tracker = new ServiceTracker(bundleContext, NamespaceHandler.class.getName(), this);
+        tracker.open();
         listeners = new HashMap<Listener, Boolean>();
     }
 
@@ -140,6 +141,8 @@
             return Arrays.asList((URI[]) ns);
         } else if (ns instanceof URI) {
             return Collections.singletonList((URI) ns);
+        } else if (ns instanceof String) {
+            return Collections.singletonList(URI.create((String) ns));
         } else if (ns instanceof String[]) {
             String[] strings = (String[]) ns;
             List<URI> namespaces = new ArrayList<URI>(strings.length);

Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/namespace/ParserContextImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/namespace/ParserContextImpl.java?rev=768730&r1=768729&r2=768730&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/namespace/ParserContextImpl.java
(original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/namespace/ParserContextImpl.java
Sun Apr 26 17:53:47 2009
@@ -23,6 +23,9 @@
 import org.osgi.service.blueprint.namespace.ComponentDefinitionRegistry;
 import org.osgi.service.blueprint.namespace.ParserContext;
 import org.osgi.service.blueprint.reflect.ComponentMetadata;
+import org.osgi.service.blueprint.reflect.Metadata;
+import org.apache.geronimo.blueprint.ExtendedParserContext;
+import org.apache.geronimo.blueprint.reflect.MetadataUtil;
 
 /**
  * A simple ParserContext implementation.
@@ -32,7 +35,7 @@
  * @author <a href="mailto:dev@geronimo.apache.org">Apache Geronimo Project</a>
  * @version $Rev: 760378 $, $Date: 2009-03-31 11:31:38 +0200 (Tue, 31 Mar 2009) $
  */
-public class ParserContextImpl implements ParserContext {
+public class ParserContextImpl implements ExtendedParserContext {
 
     private final ComponentDefinitionRegistry componentDefinitionRegistry;
     private final ComponentMetadata enclosingComponent;
@@ -57,4 +60,8 @@
     public Node getSourceNode() {
         return sourceNode;
     }
+
+    public <T extends Metadata> T createMetadata(Class<T> type) {
+        return MetadataUtil.createMetadata(type);
+    }
 }

Modified: geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/AbstractBlueprintTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/AbstractBlueprintTest.java?rev=768730&r1=768729&r2=768730&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/AbstractBlueprintTest.java
(original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/AbstractBlueprintTest.java
Sun Apr 26 17:53:47 2009
@@ -50,7 +50,7 @@
         ComponentDefinitionRegistryImpl registry = new ComponentDefinitionRegistryImpl();
         Parser parser = new Parser();
         parser.parse(Collections.singletonList(getClass().getResource(name)));
-        parser.populate(handlers, registry);
+        parser.populateMainSection(handlers, registry);
         return registry;
     }
 

Modified: geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/WiringTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/WiringTest.java?rev=768730&r1=768729&r2=768730&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/WiringTest.java
(original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/test/java/org/apache/geronimo/blueprint/WiringTest.java
Sun Apr 26 17:53:47 2009
@@ -39,8 +39,8 @@
 
     public void testWiring() throws Exception {
         ComponentDefinitionRegistryImpl registry = parse("/test-wiring.xml");
-        Instanciator i = new TestInstanciator(registry);
-        Repository repository = i.createRepository();
+        Instanciator i = new TestInstanciator();
+        Repository repository = i.createRepository(registry);
         ObjectGraph graph = new ObjectGraph(repository);
         
         Object obj1 = graph.create("pojoA");
@@ -134,16 +134,16 @@
         };
 
         ComponentDefinitionRegistryImpl registry = parse("/test-depends-on.xml");
-        Instanciator i = new TestInstanciator(registry);
-        Repository repository = i.createRepository();
+        Instanciator i = new TestInstanciator();
+        Repository repository = i.createRepository(registry);
         ObjectGraph graph = new ObjectGraph(repository);
         graph.createAll("c", "d");
     }
 
     public void testConstructor() throws Exception {
         ComponentDefinitionRegistryImpl registry = parse("/test-constructor.xml");
-        Instanciator i = new TestInstanciator(registry);
-        Repository repository = i.createRepository();
+        Instanciator i = new TestInstanciator();
+        Repository repository = i.createRepository(registry);
         ObjectGraph graph = new ObjectGraph(repository);
         
         Object obj1 = graph.create("pojoA");
@@ -190,11 +190,9 @@
     
     private static class TestInstanciator extends Instanciator {
         ConversionServiceImpl conversionService = new ConversionServiceImpl();
-        ComponentDefinitionRegistryImpl registry;
-        
-        public TestInstanciator(ComponentDefinitionRegistryImpl registry) {
+
+        public TestInstanciator() {
             super(null);
-            this.registry = registry;
         }
         
         @Override
@@ -202,10 +200,5 @@
             return conversionService;
         }
         
-        @Override
-        public ComponentDefinitionRegistryImpl getComponentDefinitionRegistry() {
-            return registry;
-        }
-        
     }
 }

Modified: geronimo/sandbox/blueprint/blueprint-itests/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-itests/pom.xml?rev=768730&r1=768729&r2=768730&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-itests/pom.xml (original)
+++ geronimo/sandbox/blueprint/blueprint-itests/pom.xml Sun Apr 26 17:53:47 2009
@@ -60,6 +60,13 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <forkMode>pertest</forkMode>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 

Modified: geronimo/sandbox/blueprint/blueprint-itests/src/test/java/org/apache/geronimo/blueprint/itests/TestBlueprintContext.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-itests/src/test/java/org/apache/geronimo/blueprint/itests/TestBlueprintContext.java?rev=768730&r1=768729&r2=768730&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-itests/src/test/java/org/apache/geronimo/blueprint/itests/TestBlueprintContext.java
(original)
+++ geronimo/sandbox/blueprint/blueprint-itests/src/test/java/org/apache/geronimo/blueprint/itests/TestBlueprintContext.java
Sun Apr 26 17:53:47 2009
@@ -22,9 +22,12 @@
 import java.util.Properties;
 import java.util.Hashtable;
 import java.util.Currency;
+import java.util.List;
+import java.util.ArrayList;
 import java.text.SimpleDateFormat;
 
 import org.apache.servicemix.kernel.testing.support.AbstractIntegrationTest;
+import org.apache.servicemix.kernel.testing.support.Counter;
 import org.apache.geronimo.blueprint.sample.Foo;
 import org.apache.geronimo.blueprint.sample.Bar;
 import org.apache.geronimo.blueprint.sample.InterfaceA;
@@ -32,21 +35,35 @@
 import org.osgi.framework.Bundle;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceListener;
+import org.osgi.framework.ServiceEvent;
 import org.osgi.service.blueprint.context.BlueprintContext;
 import org.osgi.service.blueprint.context.ServiceUnavailableException;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.cm.Configuration;
+import org.osgi.util.tracker.ServiceTracker;
 import org.springframework.core.io.Resource;
 import org.springframework.util.Assert;
+import org.springframework.osgi.util.OsgiFilterUtils;
+import org.springframework.osgi.util.OsgiListenerUtils;
 
 public class TestBlueprintContext extends AbstractIntegrationTest {
 
     public void test() throws Exception {
+        // Create a config to check the property placeholder
+        ConfigurationAdmin ca = getOsgiService(ConfigurationAdmin.class);
+        Configuration cf = ca.getConfiguration("blueprint-sample");
+        Hashtable props = new Hashtable();
+        props.put("key.b", "10");
+        cf.update(props);
+
         Resource res = locateBundle(getBundle("org.apache.geronimo", "blueprint-sample"));
         Bundle bundle = installBundle(res);
         assertNotNull(bundle);
 
         bundle.start();
 
-        BlueprintContext blueprintContext = getOsgiService(BlueprintContext.class, 5000);
+        BlueprintContext blueprintContext = getBlueprintContextForBundle("blueprint-sample",
5000);
         assertNotNull(blueprintContext);
 
         Object obj = blueprintContext.getComponent("bar");
@@ -77,8 +94,11 @@
         assertSame(foo, obj);
 
         bundle.stop();
+
+        Thread.sleep(1000);
+
         try {
-            blueprintContext = getOsgiService(BlueprintContext.class, 1);
+            blueprintContext = getBlueprintContextForBundle("blueprint-sample", 1);
             fail("ModuleContext should have been unregistered");
         } catch (Exception e) {
             // Expected, as the module context should have been unregistered
@@ -88,8 +108,50 @@
         assertTrue(foo.isDestroyed());
     }
 
-    public void testUnaryReference() throws Exception {
+    protected BlueprintContext getBlueprintContextForBundle(String symbolicName, long timeout)
throws Exception {
+        return getOsgiService(BlueprintContext.class, "(osgi.blueprint.context.symbolicname="
+ symbolicName + ")", timeout);
+    }
+
+    public <T> T getOsgiService(Class<T> type, String filter, long timeout) {
+        // translate from seconds to miliseconds
+        long time = timeout * 1000;
+
+        // use the counter to make sure the threads block
+        final Counter counter = new Counter("waitForOsgiService on bnd=" + type.getName());
+
+        counter.increment();
+
+        final List<T> services = new ArrayList<T>();
+
+        ServiceListener listener = new ServiceListener() {
+            public void serviceChanged(ServiceEvent event) {
+                if (event.getType() == ServiceEvent.REGISTERED) {
+                    services.add((T) bundleContext.getService(event.getServiceReference()));
+                    counter.decrement();
+                }
+            }
+        };
+
+        String flt = OsgiFilterUtils.unifyFilter(type.getName(), filter);
+        OsgiListenerUtils.addServiceListener(bundleContext, listener, flt);
 
+        if (logger.isDebugEnabled())
+            logger.debug("start waiting for OSGi service=" + type.getName());
+
+        try {
+            if (counter.waitForZero(time)) {
+                logger.warn("waiting for OSGi service=" + type.getName() + " timed out");
+                throw new RuntimeException("Gave up waiting for OSGi service '" + type.getName()
+ "' to be created");
+            }
+            else if (logger.isDebugEnabled()) {
+                logger.debug("found OSGi service=" + type.getName());
+            }
+            return services.get(0);
+        }
+        finally {
+            // inform waiting thread
+            bundleContext.removeServiceListener(listener);
+        }
     }
 
     /**

Modified: geronimo/sandbox/blueprint/blueprint-itests/src/test/java/org/apache/geronimo/blueprint/itests/TestReferences.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-itests/src/test/java/org/apache/geronimo/blueprint/itests/TestReferences.java?rev=768730&r1=768729&r2=768730&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-itests/src/test/java/org/apache/geronimo/blueprint/itests/TestReferences.java
(original)
+++ geronimo/sandbox/blueprint/blueprint-itests/src/test/java/org/apache/geronimo/blueprint/itests/TestReferences.java
Sun Apr 26 17:53:47 2009
@@ -30,13 +30,14 @@
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.blueprint.context.BlueprintContext;
 import org.osgi.service.blueprint.context.ServiceUnavailableException;
+import org.osgi.util.tracker.ServiceTracker;
 import org.springframework.core.io.Resource;
 import org.springframework.util.Assert;
 
 public class TestReferences extends AbstractIntegrationTest {
 
     public void testUnaryReference() throws Exception {
-        BlueprintContext blueprintContext = getOsgiService(BlueprintContext.class, 5000);
+        BlueprintContext blueprintContext = getBlueprintContextForBundle("blueprint-sample");
         assertNotNull(blueprintContext);
 
         BindingListener listener = (BindingListener) blueprintContext.getComponent("bindingListener");
@@ -88,7 +89,7 @@
     }
 
     public void testListReferences() throws Exception {
-        BlueprintContext blueprintContext = getOsgiService(BlueprintContext.class, 5000);
+        BlueprintContext blueprintContext = getBlueprintContextForBundle("blueprint-sample");
         assertNotNull(blueprintContext);
 
         BindingListener listener = (BindingListener) blueprintContext.getComponent("listBindingListener");
@@ -113,6 +114,13 @@
 
     }
 
+    protected BlueprintContext getBlueprintContextForBundle(String symbolicName) throws Exception
{
+        String filter = "(&(" + Constants.OBJECTCLASS + "=" + BlueprintContext.class.getName()
+ ")(osgi.blueprint.context.symbolicname=" + symbolicName + "))";
+        ServiceTracker tracker = new ServiceTracker(bundleContext, org.osgi.framework.FrameworkUtil.createFilter(filter),
null);
+        tracker.open();
+        return (BlueprintContext) tracker.waitForService(5000);
+    }
+
     /**
 	 * The manifest to use for the "virtual bundle" created
 	 * out of the test classes and resources in this project

Modified: geronimo/sandbox/blueprint/blueprint-sample/src/main/resources/OSGI-INF/blueprint/config.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-sample/src/main/resources/OSGI-INF/blueprint/config.xml?rev=768730&r1=768729&r2=768730&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-sample/src/main/resources/OSGI-INF/blueprint/config.xml
(original)
+++ geronimo/sandbox/blueprint/blueprint-sample/src/main/resources/OSGI-INF/blueprint/config.xml
Sun Apr 26 17:53:47 2009
@@ -1,17 +1,24 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-        default-availability="optional">
+           xmlns:osgix="http://www.osgi.org/xmlns/blueprint-compendium/v1.0.0"
+           default-availability="optional">
 
     <type-converters>
-            <bean id="converter1" class="org.apache.geronimo.blueprint.sample.DateTypeConverter">
-                <property name="format" value="yyyy.MM.dd"/>
-            </bean>
-            <ref component="converter2"/>
+        <bean id="converter1" class="org.apache.geronimo.blueprint.sample.DateTypeConverter">
+            <property name="format" value="yyyy.MM.dd"/>
+        </bean>
+        <bean id="converter2" class="org.apache.geronimo.blueprint.sample.CurrencyTypeConverter"/>
+
+        <osgix:property-placeholder id="property-placeholder" persistent-id="blueprint-sample">
+            <osgix:default-properties>
+                <entry key="key.b" value="-1"/>
+            </osgix:default-properties>
+        </osgix:property-placeholder>
     </type-converters>
 
     <bean id="foo" class="org.apache.geronimo.blueprint.sample.Foo" init-method="init"
destroy-method="destroy">
         <property name="a" value="5" />
-        <property name="b" value="10" />
+        <property name="b" value="${key.b}" />
         <property name="bar" ref="bar" />
         <property name="currency">
               <value>PLN</value>
@@ -32,8 +39,6 @@
         </property>
     </bean>
 
-    <bean id="converter2" class="org.apache.geronimo.blueprint.sample.CurrencyTypeConverter"/>
-
     <service ref="foo" auto-export="all-classes">
         <service-properties>
             <entry key="key" value="value"/>

Modified: geronimo/sandbox/blueprint/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/pom.xml?rev=768730&r1=768729&r2=768730&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/pom.xml (original)
+++ geronimo/sandbox/blueprint/pom.xml Sun Apr 26 17:53:47 2009
@@ -45,6 +45,11 @@
             </dependency>
             <dependency>
                 <groupId>org.apache.geronimo</groupId>
+                <artifactId>blueprint-compendium</artifactId>
+                <version>${version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.geronimo</groupId>
                 <artifactId>blueprint-bundle</artifactId>
                 <version>${version}</version>
             </dependency>
@@ -158,6 +163,7 @@
     <modules>
         <module>blueprint-api</module>
         <module>blueprint-core</module>
+        <module>blueprint-compendium</module>
         <module>blueprint-bundle</module>
         <module>blueprint-sample</module>
         <module>blueprint-itests</module>



Mime
View raw message