Author: gnodet
Date: Sun Jun 16 21:23:55 2013
New Revision: 1493587

URL: http://svn.apache.org/r1493587
Log:
[ARIES-1082] Add a way to use property placeholders to define filters on 
service references

Added:
    
aries/trunk/blueprint/blueprint-core/src/main/resources/org/apache/aries/blueprint/ext/impl/blueprint-ext-1.3.xsd
Modified:
    aries/trunk/blueprint/blueprint-core/pom.xml
    
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/AbstractServiceReferenceRecipe.java
    
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
    
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java
    
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ReferenceListRecipe.java
    
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ReferenceRecipe.java
    
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/AbstractPropertyPlaceholder.java
    
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/impl/ExtNamespaceHandler.java
    
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/packageinfo
    
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/packageinfo
    
aries/trunk/blueprint/blueprint-core/src/main/resources/OSGI-INF/blueprint/blueprint-ext.xml
    aries/trunk/blueprint/blueprint-parser/pom.xml
    
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/ExtendedServiceReferenceMetadata.java
    
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/mutable/MutableServiceReferenceMetadata.java
    
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/mutable/packageinfo
    
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/packageinfo
    
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/reflect/ServiceReferenceMetadataImpl.java
    
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/reflect/packageinfo

Modified: aries/trunk/blueprint/blueprint-core/pom.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/pom.xml?rev=1493587&r1=1493586&r2=1493587&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/pom.xml (original)
+++ aries/trunk/blueprint/blueprint-core/pom.xml Sun Jun 16 21:23:55 2013
@@ -29,7 +29,7 @@
     <artifactId>org.apache.aries.blueprint.core</artifactId>
     <packaging>bundle</packaging>
     <name>Apache Aries Blueprint Core</name>
-    <version>1.1.1-SNAPSHOT</version>
+    <version>1.2.0-SNAPSHOT</version>
     <description>
         This bundle contains the core implementation of Blueprint
         along with the "ext" namespace handler.
@@ -88,7 +88,7 @@
 
         
<blueprint.annotation.api.version>1.0.0</blueprint.annotation.api.version>
         <blueprint.api.version>1.0.0</blueprint.api.version>
-        <blueprint.parser.version>1.0.0</blueprint.parser.version>
+        <blueprint.parser.version>1.1.0-SNAPSHOT</blueprint.parser.version>
         <proxy.api.version>1.0.0</proxy.api.version>
         <proxy.impl.version>1.0.0</proxy.impl.version>
         <quiesce.api.version>1.0.0</quiesce.api.version>
@@ -101,7 +101,7 @@
             <properties>
                 
<blueprint.annotation.api.version>1.0.1-SNAPSHOT</blueprint.annotation.api.version>
                 <blueprint.api.version>1.0.1-SNAPSHOT</blueprint.api.version>
-                
<blueprint.parser.version>1.0.1-SNAPSHOT</blueprint.parser.version>
+                
<blueprint.parser.version>1.1.0-SNAPSHOT</blueprint.parser.version>
                 <proxy.api.version>1.0.1-SNAPSHOT</proxy.api.version>
                 <proxy.impl.version>1.0.1-SNAPSHOT</proxy.impl.version>
                 <quiesce.api.version>1.0.1-SNAPSHOT</quiesce.api.version>

Modified: 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/AbstractServiceReferenceRecipe.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/AbstractServiceReferenceRecipe.java?rev=1493587&r1=1493586&r2=1493587&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/AbstractServiceReferenceRecipe.java
 (original)
+++ 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/AbstractServiceReferenceRecipe.java
 Sun Jun 16 21:23:55 2013
@@ -41,7 +41,9 @@ import org.apache.aries.blueprint.Bluepr
 import org.apache.aries.blueprint.ExtendedServiceReferenceMetadata;
 import org.apache.aries.blueprint.di.AbstractRecipe;
 import org.apache.aries.blueprint.di.CollectionRecipe;
+import org.apache.aries.blueprint.di.ExecutionContext;
 import org.apache.aries.blueprint.di.Recipe;
+import org.apache.aries.blueprint.di.ValueRecipe;
 import org.apache.aries.blueprint.services.ExtendedBlueprintContainer;
 import org.apache.aries.blueprint.utils.ReflectionUtils;
 import org.osgi.framework.BundleContext;
@@ -74,6 +76,7 @@ public abstract class AbstractServiceRef
 
     protected final ExtendedBlueprintContainer blueprintContainer;
     protected final ServiceReferenceMetadata metadata;
+    protected final ValueRecipe filterRecipe;
     protected final CollectionRecipe listenersRecipe;
     protected final List<Recipe> explicitDependencies;
     protected final boolean optional;
@@ -93,18 +96,20 @@ public abstract class AbstractServiceRef
     protected AbstractServiceReferenceRecipe(String name,
                                              ExtendedBlueprintContainer 
blueprintContainer,
                                              ServiceReferenceMetadata metadata,
+                                             ValueRecipe filterRecipe,
                                              CollectionRecipe listenersRecipe,
                                              List<Recipe> 
explicitDependencies) {
         super(name);
         this.prototype = false;
         this.blueprintContainer = blueprintContainer;
         this.metadata = metadata;
+        this.filterRecipe = filterRecipe;
         this.listenersRecipe = listenersRecipe;
         this.explicitDependencies = explicitDependencies;
         
         
         this.optional = (metadata.getAvailability() == 
ReferenceMetadata.AVAILABILITY_OPTIONAL);
-        this.filter = createOsgiFilter(metadata);
+        this.filter = createOsgiFilter(metadata, null);
         
         if (System.getSecurityManager() != null) {
             accessControlContext = createAccessControlContext();
@@ -197,9 +202,43 @@ public abstract class AbstractServiceRef
     }
 
     public String getOsgiFilter() {
+        if (filterRecipe != null && blueprintContainer instanceof 
BlueprintContainerImpl) {
+            BlueprintContainerImpl.State state = ((BlueprintContainerImpl) 
blueprintContainer).getState();
+            switch (state) {
+                case InitialReferencesSatisfied:
+                case WaitForInitialReferences2:
+                case Create:
+                case Created:
+                    return createOsgiFilter(metadata, getExtendedOsgiFilter());
+            }
+        }
         return filter;
     }
 
+    private String getExtendedOsgiFilter() {
+        if (filterRecipe != null) {
+            Object object;
+            BlueprintRepository repository = ((BlueprintContainerImpl) 
blueprintContainer).getRepository();
+            ExecutionContext oldContext = null;
+            try {
+                oldContext = ExecutionContext.Holder.setContext(repository);
+                object = filterRecipe.create();
+            } finally {
+                ExecutionContext.Holder.setContext(oldContext);
+            }
+            if (object != null) {
+                String flt = object.toString();
+                if (flt != null && flt.length() > 0) {
+                    if (!flt.startsWith("(")) {
+                        flt = "(" + flt + ")";
+                    }
+                    return flt;
+                }
+            }
+        }
+        return null;
+    }
+
        protected Object getServiceSecurely(final ServiceReference 
serviceReference) {
                if (accessControlContext == null) {
                        return getBundleContextForServiceLookup().getService(
@@ -571,7 +610,7 @@ public abstract class AbstractServiceRef
      * @param metadata the service reference metadata
      * @return the OSGi filter
      */
-    private static String createOsgiFilter(ServiceReferenceMetadata metadata) {
+    private static String createOsgiFilter(ServiceReferenceMetadata metadata, 
String extendedFilter) {
         List<String> members = new ArrayList<String>();
         // Handle filter
         String flt = metadata.getFilter();
@@ -581,6 +620,13 @@ public abstract class AbstractServiceRef
             }
             members.add(flt);
         }
+        // Handle extended filter
+        if (extendedFilter != null && extendedFilter.length() > 0) {
+            if (!extendedFilter.startsWith("(")) {
+                extendedFilter = "(" + extendedFilter + ")";
+            }
+            members.add(extendedFilter);
+        }
         // Handle interfaces
         String interfaceName = metadata.getInterface();
         Class runtimeClass = getRuntimeClass(metadata);

Modified: 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java?rev=1493587&r1=1493586&r2=1493587&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
 (original)
+++ 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
 Sun Jun 16 21:23:55 2013
@@ -113,7 +113,7 @@ public class BlueprintContainerImpl 
             BlueprintProtectionDomain.class,
     };
     
-    private enum State {
+    public enum State {
         Unknown,
         WaitForNamespaceHandlers,
         Populated,
@@ -262,6 +262,10 @@ public class BlueprintContainerImpl 
         }
     }
 
+    public State getState() {
+        return state;
+    }
+
     /**
      * This method must be called inside a synchronized block to ensure this 
method is not run concurrently
      */

Modified: 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java?rev=1493587&r1=1493586&r2=1493587&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java
 (original)
+++ 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java
 Sun Jun 16 21:23:55 2013
@@ -28,6 +28,8 @@ import java.util.Set;
 
 import org.apache.aries.blueprint.ComponentDefinitionRegistry;
 import org.apache.aries.blueprint.ExtendedBeanMetadata;
+import org.apache.aries.blueprint.ExtendedReferenceMetadata;
+import org.apache.aries.blueprint.ExtendedServiceReferenceMetadata;
 import org.apache.aries.blueprint.services.ExtendedBlueprintContainer;
 import org.apache.aries.blueprint.utils.ServiceListener;
 import org.apache.aries.blueprint.PassThroughMetadata;
@@ -143,6 +145,13 @@ public class RecipeBuilder {
     }
 
     private Recipe createReferenceListRecipe(ReferenceListMetadata metadata) {
+        ValueRecipe filterRecipe = null;
+        if (metadata instanceof ExtendedReferenceMetadata) {
+            ValueMetadata filterMetadata = ((ExtendedServiceReferenceMetadata) 
metadata).getExtendedFilter();
+            if (filterMetadata != null) {
+                filterRecipe = (ValueRecipe) getValue(filterMetadata, null);
+            }
+        }
         CollectionRecipe listenersRecipe = null;
         if (metadata.getReferenceListeners() != null) {
             listenersRecipe = new CollectionRecipe(getName(null), 
ArrayList.class, Object.class.getName());
@@ -153,12 +162,20 @@ public class RecipeBuilder {
         ReferenceListRecipe recipe = new 
ReferenceListRecipe(getName(metadata.getId()),
                                                  blueprintContainer,
                                                  metadata,
+                                                 filterRecipe,
                                                  listenersRecipe,
                                                  getDependencies(metadata));
         return recipe;
     }
 
     private ReferenceRecipe createReferenceRecipe(ReferenceMetadata metadata) {
+        ValueRecipe filterRecipe = null;
+        if (metadata instanceof ExtendedReferenceMetadata) {
+            ValueMetadata filterMetadata = ((ExtendedServiceReferenceMetadata) 
metadata).getExtendedFilter();
+            if (filterMetadata != null) {
+                filterRecipe = (ValueRecipe) getValue(filterMetadata, null);
+            }
+        }
         CollectionRecipe listenersRecipe = null;
         if (metadata.getReferenceListeners() != null) {
             listenersRecipe = new CollectionRecipe(getName(null), 
ArrayList.class, Object.class.getName());
@@ -169,6 +186,7 @@ public class RecipeBuilder {
         ReferenceRecipe recipe = new ReferenceRecipe(getName(metadata.getId()),
                                                      blueprintContainer,
                                                      metadata,
+                                                     filterRecipe,
                                                      listenersRecipe,
                                                      
getDependencies(metadata));
         return recipe;

Modified: 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ReferenceListRecipe.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ReferenceListRecipe.java?rev=1493587&r1=1493586&r2=1493587&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ReferenceListRecipe.java
 (original)
+++ 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ReferenceListRecipe.java
 Sun Jun 16 21:23:55 2013
@@ -21,6 +21,7 @@ package org.apache.aries.blueprint.conta
 import java.util.*;
 import java.util.concurrent.Callable;
 
+import org.apache.aries.blueprint.di.ValueRecipe;
 import org.apache.aries.blueprint.services.ExtendedBlueprintContainer;
 import org.apache.aries.blueprint.ExtendedReferenceListMetadata;
 import org.apache.aries.blueprint.di.Recipe;
@@ -54,9 +55,10 @@ public class ReferenceListRecipe extends
     public ReferenceListRecipe(String name,
                          ExtendedBlueprintContainer blueprintContainer,
                          ReferenceListMetadata metadata,
+                         ValueRecipe filterRecipe,
                          CollectionRecipe listenersRecipe,
                          List<Recipe> explicitDependencies) {
-        super(name, blueprintContainer, metadata, listenersRecipe, 
explicitDependencies);
+        super(name, blueprintContainer, metadata, filterRecipe, 
listenersRecipe, explicitDependencies);
         this.metadata = metadata;
     }
 

Modified: 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ReferenceRecipe.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ReferenceRecipe.java?rev=1493587&r1=1493586&r2=1493587&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ReferenceRecipe.java
 (original)
+++ 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ReferenceRecipe.java
 Sun Jun 16 21:23:55 2013
@@ -30,6 +30,7 @@ import java.util.concurrent.Callable;
 import org.apache.aries.blueprint.ExtendedReferenceMetadata;
 import org.apache.aries.blueprint.di.CollectionRecipe;
 import org.apache.aries.blueprint.di.Recipe;
+import org.apache.aries.blueprint.di.ValueRecipe;
 import org.apache.aries.blueprint.services.ExtendedBlueprintContainer;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.blueprint.container.BlueprintEvent;
@@ -68,9 +69,10 @@ public class ReferenceRecipe extends Abs
     public ReferenceRecipe(String name,
                            ExtendedBlueprintContainer blueprintContainer,
                            ReferenceMetadata metadata,
+                           ValueRecipe filterRecipe,
                            CollectionRecipe listenersRecipe,
                            List<Recipe> explicitDependencies) {
-        super(name, blueprintContainer, metadata, listenersRecipe, 
explicitDependencies);
+        super(name, blueprintContainer, metadata, filterRecipe, 
listenersRecipe, explicitDependencies);
         this.metadata = metadata;
         if(metadata instanceof ExtendedReferenceMetadata) 
             proxyChildBeanClasses = ((ExtendedReferenceMetadata) 
metadata).getProxyChildBeanClasses();

Modified: 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/AbstractPropertyPlaceholder.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/AbstractPropertyPlaceholder.java?rev=1493587&r1=1493586&r2=1493587&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/AbstractPropertyPlaceholder.java
 (original)
+++ 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/AbstractPropertyPlaceholder.java
 Sun Jun 16 21:23:55 2013
@@ -37,6 +37,7 @@ import org.apache.aries.blueprint.mutabl
 import org.apache.aries.blueprint.mutable.MutableReferenceListener;
 import org.apache.aries.blueprint.mutable.MutableRegistrationListener;
 import org.apache.aries.blueprint.mutable.MutableServiceMetadata;
+import org.apache.aries.blueprint.mutable.MutableServiceReferenceMetadata;
 import org.osgi.framework.Bundle;
 import org.osgi.service.blueprint.container.ComponentDefinitionException;
 import org.osgi.service.blueprint.reflect.BeanArgument;
@@ -270,6 +271,13 @@ public abstract class AbstractPropertyPl
     }
 
     private Metadata processServiceReferenceMetadata(ServiceReferenceMetadata 
component) {
+        if (component instanceof MutableServiceReferenceMetadata) {
+            ValueMetadata valueMetadata = ((MutableServiceReferenceMetadata) 
component).getExtendedFilter();
+            if (valueMetadata != null) {
+                ((MutableServiceReferenceMetadata) 
component).setExtendedFilter(
+                        doProcessValueMetadata(valueMetadata));
+            }
+        }
         for (ReferenceListener listener : component.getReferenceListeners()) {
             Target listenerComponent = listener.getListenerComponent();
             try {
@@ -395,7 +403,10 @@ public abstract class AbstractPropertyPl
     }
 
     protected Metadata processValueMetadata(ValueMetadata metadata) {
-      
+        return doProcessValueMetadata(metadata);
+    }
+
+    protected ValueMetadata doProcessValueMetadata(ValueMetadata metadata) {
         return new LateBindingValueMetadata(metadata);
     }
 

Modified: 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/impl/ExtNamespaceHandler.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/impl/ExtNamespaceHandler.java?rev=1493587&r1=1493586&r2=1493587&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/impl/ExtNamespaceHandler.java
 (original)
+++ 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/impl/ExtNamespaceHandler.java
 Sun Jun 16 21:23:55 2013
@@ -73,7 +73,8 @@ public class ExtNamespaceHandler impleme
     public static final String BLUEPRINT_EXT_NAMESPACE_V1_0 = 
"http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0";;
     public static final String BLUEPRINT_EXT_NAMESPACE_V1_1 = 
"http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.1.0";;
     public static final String BLUEPRINT_EXT_NAMESPACE_V1_2 = 
"http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.2.0";;
-    
+    public static final String BLUEPRINT_EXT_NAMESPACE_V1_3 = 
"http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.3.0";;
+
     public static final String PROPERTY_PLACEHOLDER_ELEMENT = 
"property-placeholder";
     public static final String DEFAULT_PROPERTIES_ELEMENT = 
"default-properties";
     public static final String PROPERTY_ELEMENT = "property";
@@ -104,6 +105,8 @@ public class ExtNamespaceHandler impleme
     
     public static final String DEFAULT_REFERENCE_BEAN = "default";
 
+    public static final String FILTER_ATTRIBUTE = "filter";
+
     private static final Logger LOGGER = 
LoggerFactory.getLogger(ExtNamespaceHandler.class);
 
     private int idCounter;
@@ -121,6 +124,8 @@ public class ExtNamespaceHandler impleme
           return getClass().getResource("blueprint-ext-1.1.xsd");
         } else if (BLUEPRINT_EXT_NAMESPACE_V1_2.equals(namespace)) {
           return getClass().getResource("blueprint-ext-1.2.xsd");
+        } else if (BLUEPRINT_EXT_NAMESPACE_V1_3.equals(namespace)) {
+            return getClass().getResource("blueprint-ext-1.3.xsd");
         } else {
           return null;
         }
@@ -150,6 +155,8 @@ public class ExtNamespaceHandler impleme
             return decorateFieldInjection(node, component, context);
         } else if (node instanceof Attr && nodeNameEquals(node, 
DEFAULT_REFERENCE_BEAN)) {
             return decorateDefaultBean(node, component, context);
+        } else if (node instanceof Attr && nodeNameEquals(node, 
FILTER_ATTRIBUTE)) {
+            return decorateFilter(node, component, context);
         } else {
             throw new ComponentDefinitionException("Unsupported node: " + 
node.getNodeName());
         }
@@ -234,6 +241,22 @@ public class ExtNamespaceHandler impleme
         return component;
     }
 
+    private ComponentMetadata decorateFilter(Node node,
+                                             ComponentMetadata component, 
ParserContext context)
+    {
+        if (!(component instanceof ServiceReferenceMetadata)) {
+            throw new ComponentDefinitionException("Attribute " + 
node.getNodeName() + " can only be used on a <reference> or <reference-list> 
element");
+        }
+
+        if (!(component instanceof MutableServiceReferenceMetadata)) {
+            throw new ComponentDefinitionException("Expected an instanceof 
MutableServiceReferenceMetadata");
+        }
+
+        String value = ((Attr) node).getValue();
+        ((MutableServiceReferenceMetadata) 
component).setExtendedFilter(createValue(context, value));
+        return component;
+    }
+
     private Metadata parsePropertyPlaceholder(ParserContext context, Element 
element) {
         MutableBeanMetadata metadata = 
context.createMetadata(MutableBeanMetadata.class);
         metadata.setProcessor(true);
@@ -274,7 +297,8 @@ public class ExtNamespaceHandler impleme
                 Element e = (Element) node;
                 if (BLUEPRINT_EXT_NAMESPACE_V1_0.equals(e.getNamespaceURI())
                         || 
BLUEPRINT_EXT_NAMESPACE_V1_1.equals(e.getNamespaceURI())
-                        || 
BLUEPRINT_EXT_NAMESPACE_V1_2.equals(e.getNamespaceURI())) {
+                        || 
BLUEPRINT_EXT_NAMESPACE_V1_2.equals(e.getNamespaceURI())
+                        || 
BLUEPRINT_EXT_NAMESPACE_V1_3.equals(e.getNamespaceURI())) {
                     if (nodeNameEquals(e, DEFAULT_PROPERTIES_ELEMENT)) {
                         if (defaultsRef != null) {
                             throw new ComponentDefinitionException("Only one 
of " + DEFAULTS_REF_ATTRIBUTE + " attribute or " + DEFAULT_PROPERTIES_ELEMENT + 
" element is allowed");
@@ -305,7 +329,8 @@ public class ExtNamespaceHandler impleme
                 Element e = (Element) node;
                 if (BLUEPRINT_EXT_NAMESPACE_V1_0.equals(e.getNamespaceURI())
                         || 
BLUEPRINT_EXT_NAMESPACE_V1_1.equals(e.getNamespaceURI())
-                        || 
BLUEPRINT_EXT_NAMESPACE_V1_2.equals(e.getNamespaceURI())) {
+                        || 
BLUEPRINT_EXT_NAMESPACE_V1_2.equals(e.getNamespaceURI())
+                        || 
BLUEPRINT_EXT_NAMESPACE_V1_3.equals(e.getNamespaceURI())) {
                     if (nodeNameEquals(e, PROPERTY_ELEMENT)) {
                         BeanProperty prop = 
context.parseElement(BeanProperty.class, enclosingComponent, e);
                         props.addEntry(createValue(context, prop.getName(), 
String.class.getName()), prop.getValue());

Modified: 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/packageinfo
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/packageinfo?rev=1493587&r1=1493586&r2=1493587&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/packageinfo
 (original)
+++ 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/packageinfo
 Sun Jun 16 21:23:55 2013
@@ -16,4 +16,4 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-version 1.0.0
+version 1.1.0

Modified: 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/packageinfo
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/packageinfo?rev=1493587&r1=1493586&r2=1493587&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/packageinfo
 (original)
+++ 
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/packageinfo
 Sun Jun 16 21:23:55 2013
@@ -16,4 +16,4 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-version 1.1.0
+version 1.2.0

Modified: 
aries/trunk/blueprint/blueprint-core/src/main/resources/OSGI-INF/blueprint/blueprint-ext.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/resources/OSGI-INF/blueprint/blueprint-ext.xml?rev=1493587&r1=1493586&r2=1493587&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-core/src/main/resources/OSGI-INF/blueprint/blueprint-ext.xml
 (original)
+++ 
aries/trunk/blueprint/blueprint-core/src/main/resources/OSGI-INF/blueprint/blueprint-ext.xml
 Sun Jun 16 21:23:55 2013
@@ -37,4 +37,9 @@
             <entry key="osgi.service.blueprint.namespace" 
value="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.2.0"/>
         </service-properties>
     </service>
+    <service ref="ExtNamespaceHandler" 
interface="org.apache.aries.blueprint.NamespaceHandler">
+        <service-properties>
+            <entry key="osgi.service.blueprint.namespace" 
value="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.3.0"/>
+        </service-properties>
+    </service>
 </blueprint>

Added: 
aries/trunk/blueprint/blueprint-core/src/main/resources/org/apache/aries/blueprint/ext/impl/blueprint-ext-1.3.xsd
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/resources/org/apache/aries/blueprint/ext/impl/blueprint-ext-1.3.xsd?rev=1493587&view=auto
==============================================================================
--- 
aries/trunk/blueprint/blueprint-core/src/main/resources/org/apache/aries/blueprint/ext/impl/blueprint-ext-1.3.xsd
 (added)
+++ 
aries/trunk/blueprint/blueprint-core/src/main/resources/org/apache/aries/blueprint/ext/impl/blueprint-ext-1.3.xsd
 Sun Jun 16 21:23:55 2013
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+
+    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.
+
+-->
+<xsd:schema 
xmlns="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.3.0"; 
xmlns:bp="http://www.osgi.org/xmlns/blueprint/v1.0.0"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; attributeFormDefault="unqualified" 
elementFormDefault="qualified" 
targetNamespace="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.3.0"; 
version="1.0.0">
+
+    <xsd:import namespace="http://www.osgi.org/xmlns/blueprint/v1.0.0"/>
+
+    <!-- property placeholder -->
+
+    <xsd:element name="property-placeholder" type="TpropertyPlaceholder"/>
+
+    <xsd:complexType name="TpropertyPlaceholder">
+        <xsd:complexContent>
+            <xsd:extension base="bp:Tcomponent">
+                <xsd:sequence>
+                    <!-- nested properties declaration -->
+                    <xsd:element maxOccurs="1" minOccurs="0" 
name="default-properties" type="TdefaultProperties"/>
+                    <xsd:element maxOccurs="unbounded" minOccurs="0" 
name="location" type="xsd:string"/>
+                </xsd:sequence>
+                <xsd:attribute default="${" name="placeholder-prefix" 
type="xsd:string" use="optional"/>
+                <xsd:attribute default="}" name="placeholder-suffix" 
type="xsd:string" use="optional"/>
+                <xsd:attribute name="defaults-ref" type="bp:Tidref" 
use="optional"/>
+                <xsd:attribute default="false" name="ignore-missing-locations" 
type="xsd:boolean" use="optional"/>
+                <xsd:attribute default="fallback" name="system-properties" 
use="optional">
+                    <xsd:simpleType>
+                        <xsd:restriction base="xsd:NMTOKEN">
+                            <xsd:enumeration value="never"/>
+                            <xsd:enumeration value="fallback"/>
+                            <xsd:enumeration value="override"/>
+                        </xsd:restriction>
+                    </xsd:simpleType>
+                </xsd:attribute>
+                <xsd:attribute name="evaluator" type="xsd:string" 
use="optional"/>
+            </xsd:extension>
+        </xsd:complexContent>
+    </xsd:complexType>
+
+    <xsd:complexType name="TdefaultProperties">
+        <xsd:sequence maxOccurs="unbounded" minOccurs="0">
+            <xsd:element name="property" type="bp:Tproperty"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <!-- proxy method -->
+
+    <xsd:attribute default="default" name="proxy-method">
+        <xsd:simpleType>
+            <xsd:restriction>
+                <xsd:simpleType>
+                    <xsd:list>
+                        <xsd:simpleType>
+                            <xsd:restriction base="xsd:NMTOKEN">
+                                <xsd:enumeration value="default"/>
+                                <xsd:enumeration value="classes"/>
+                                <xsd:enumeration value="greedy"/>
+                            </xsd:restriction>
+                        </xsd:simpleType>
+                    </xsd:list>
+                </xsd:simpleType>
+                <xsd:minLength value="1"/>
+            </xsd:restriction>
+        </xsd:simpleType>
+    </xsd:attribute>
+
+    <!-- role -->
+
+    <xsd:attribute name="role">
+        <xsd:simpleType>
+            <xsd:restriction>
+                <xsd:simpleType>
+                    <xsd:list>
+                        <xsd:simpleType>
+                            <xsd:restriction base="xsd:NMTOKEN">
+                                <xsd:enumeration value="processor"/>
+                            </xsd:restriction>
+                        </xsd:simpleType>
+                    </xsd:list>
+                </xsd:simpleType>
+            </xsd:restriction>
+        </xsd:simpleType>
+    </xsd:attribute>
+
+    <!-- CM property placeholder extenstion -->
+
+    <xsd:element name="location" type="xsd:string"/>
+    <xsd:attribute default="false" name="ignore-missing-locations" 
type="xsd:boolean"/>
+    <xsd:attribute default="fallback" name="system-properties">
+        <xsd:simpleType>
+            <xsd:restriction base="xsd:NMTOKEN">
+                <xsd:enumeration value="never"/>
+                <xsd:enumeration value="fallback"/>
+                <xsd:enumeration value="override"/>
+            </xsd:restriction>
+        </xsd:simpleType>
+    </xsd:attribute>
+    
+    <xsd:attribute default="false" name="field-injection" type="xsd:boolean"/>
+
+    <!-- Default reference bean -->
+    <xsd:attribute name="default" type="bp:Tidref"/>
+
+    <!-- Filter attribute -->
+    <xsd:attribute name="filter" type="xsd:normalizedString"/>
+
+</xsd:schema>

Modified: aries/trunk/blueprint/blueprint-parser/pom.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-parser/pom.xml?rev=1493587&r1=1493586&r2=1493587&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-parser/pom.xml (original)
+++ aries/trunk/blueprint/blueprint-parser/pom.xml Sun Jun 16 21:23:55 2013
@@ -29,7 +29,7 @@
     <artifactId>blueprint-parser</artifactId>
     <packaging>jar</packaging>
     <name>Apache Aries Blueprint Parser</name>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.1.0-SNAPSHOT</version>
     <description>
         This bundle contains the blueprint parser in a plain jar.
     </description>

Modified: 
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/ExtendedServiceReferenceMetadata.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/ExtendedServiceReferenceMetadata.java?rev=1493587&r1=1493586&r2=1493587&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/ExtendedServiceReferenceMetadata.java
 (original)
+++ 
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/ExtendedServiceReferenceMetadata.java
 Sun Jun 16 21:23:55 2013
@@ -18,6 +18,7 @@ package org.apache.aries.blueprint;
 
 import org.osgi.framework.BundleContext;
 import org.osgi.service.blueprint.reflect.ServiceReferenceMetadata;
+import org.osgi.service.blueprint.reflect.ValueMetadata;
 
 /**
  * TODO: javadoc
@@ -36,4 +37,6 @@ public interface ExtendedServiceReferenc
     
     BundleContext getBundleContext();
 
+    ValueMetadata getExtendedFilter();
+
 }

Modified: 
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/mutable/MutableServiceReferenceMetadata.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/mutable/MutableServiceReferenceMetadata.java?rev=1493587&r1=1493586&r2=1493587&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/mutable/MutableServiceReferenceMetadata.java
 (original)
+++ 
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/mutable/MutableServiceReferenceMetadata.java
 Sun Jun 16 21:23:55 2013
@@ -22,6 +22,7 @@ import org.apache.aries.blueprint.Extend
 import org.osgi.service.blueprint.reflect.ReferenceListener;
 import org.osgi.service.blueprint.reflect.Target;
 import org.osgi.framework.BundleContext;
+import org.osgi.service.blueprint.reflect.ValueMetadata;
 
 /**
  * A mutable version of the <code>ServiceReferenceMetadata</code> that allows 
modifications.
@@ -57,4 +58,6 @@ public interface MutableServiceReference
      * @param bc
      */
     void setBundleContext(BundleContext bc);
+
+    void setExtendedFilter(ValueMetadata filter);
 }

Modified: 
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/mutable/packageinfo
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/mutable/packageinfo?rev=1493587&r1=1493586&r2=1493587&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/mutable/packageinfo
 (original)
+++ 
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/mutable/packageinfo
 Sun Jun 16 21:23:55 2013
@@ -16,4 +16,4 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-version 1.0.0
+version 1.1.0

Modified: 
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/packageinfo
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/packageinfo?rev=1493587&r1=1493586&r2=1493587&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/packageinfo
 (original)
+++ 
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/packageinfo
 Sun Jun 16 21:23:55 2013
@@ -16,4 +16,4 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-version 1.0.0
+version 1.1.0

Modified: 
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/reflect/ServiceReferenceMetadataImpl.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/reflect/ServiceReferenceMetadataImpl.java?rev=1493587&r1=1493586&r2=1493587&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/reflect/ServiceReferenceMetadataImpl.java
 (original)
+++ 
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/reflect/ServiceReferenceMetadataImpl.java
 Sun Jun 16 21:23:55 2013
@@ -27,6 +27,7 @@ import org.osgi.framework.BundleContext;
 import org.osgi.service.blueprint.reflect.ReferenceListener;
 import org.osgi.service.blueprint.reflect.ServiceReferenceMetadata;
 import org.osgi.service.blueprint.reflect.Target;
+import org.osgi.service.blueprint.reflect.ValueMetadata;
 
 /**
  * Implementation of ServiceReferenceMetadata 
@@ -43,6 +44,7 @@ public abstract class ServiceReferenceMe
     protected int proxyMethod;
     protected Class runtimeInterface;
     protected BundleContext bundleContext;
+    protected ValueMetadata extendedFilter;
 
     public ServiceReferenceMetadataImpl() {
     }
@@ -144,4 +146,12 @@ public abstract class ServiceReferenceMe
     public void setBundleContext(BundleContext ctx) {
       this.bundleContext = ctx;
     }
+
+    public ValueMetadata getExtendedFilter() {
+        return extendedFilter;
+    }
+
+    public void setExtendedFilter(ValueMetadata extendedFilter) {
+        this.extendedFilter = extendedFilter;
+    }
 }

Modified: 
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/reflect/packageinfo
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/reflect/packageinfo?rev=1493587&r1=1493586&r2=1493587&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/reflect/packageinfo
 (original)
+++ 
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/reflect/packageinfo
 Sun Jun 16 21:23:55 2013
@@ -16,4 +16,4 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-version 1.0.0
+version 1.1.0


Reply via email to