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