You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by gn...@apache.org on 2018/02/16 14:48:10 UTC
svn commit: r1824499 - in /aries/trunk/blueprint: blueprint-cm/
blueprint-cm/src/main/java/org/apache/aries/blueprint/compendium/cm/
blueprint-core/ blueprint-core/src/main/java/org/apache/aries/blueprint/di/
blueprint-core/src/main/java/org/apache/ari...
Author: gnodet
Date: Fri Feb 16 14:48:09 2018
New Revision: 1824499
URL: http://svn.apache.org/viewvc?rev=1824499&view=rev
Log:
[ARIES-1298] Support typed configurations in property placeholders
Added:
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/AbstractPropertyPlaceholderExt.java
- copied, changed from r1824428, 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/PropertyPlaceholderExt.java
- copied, changed from r1824428, aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/PropertyPlaceholder.java
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/evaluator/PropertyEvaluatorExt.java
- copied, changed from r1824428, aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/evaluator/PropertyEvaluator.java
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/ExtendedValueMetadata.java
- copied, changed from r1824428, aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/evaluator/PropertyEvaluator.java
Removed:
aries/trunk/blueprint/blueprint-jexl-evaluator/src/main/java/org/apache/aries/blueprint/jexl/evaluator/JexlExpressionParser.java
Modified:
aries/trunk/blueprint/blueprint-cm/pom.xml
aries/trunk/blueprint/blueprint-cm/src/main/java/org/apache/aries/blueprint/compendium/cm/CmPropertyPlaceholder.java
aries/trunk/blueprint/blueprint-core/pom.xml
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/di/ValueRecipe.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/PlaceholdersUtils.java
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/PropertyPlaceholder.java
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/evaluator/PropertyEvaluator.java
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/impl/ExtNamespaceHandler.java
aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/ext/PropertyPlaceholderTest.java
aries/trunk/blueprint/blueprint-jexl-evaluator/pom.xml
aries/trunk/blueprint/blueprint-jexl-evaluator/src/main/java/org/apache/aries/blueprint/jexl/evaluator/JexlPropertyEvaluator.java
aries/trunk/blueprint/blueprint-jexl-evaluator/src/main/resources/OSGI-INF/blueprint/jexl.xml
aries/trunk/blueprint/blueprint-noosgi/pom.xml
aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/AbstractPropertyPlaceholder.java
aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/PropertyPlaceholder.java
aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/impl/ExtNamespaceHandler.java
aries/trunk/blueprint/blueprint-noosgi/src/test/java/org/apache/aries/blueprint/ext/PropertyPlaceholderTest.java
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/mutable/MutableValueMetadata.java
aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/reflect/ValueMetadataImpl.java
aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/CmPropertyPlaceholderTest.java
aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/service/Foo.java
aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/service/FooInterface.java
aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/CmPropertyPlaceholderTest.xml
aries/trunk/blueprint/parent/pom.xml
Modified: aries/trunk/blueprint/blueprint-cm/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-cm/pom.xml?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-cm/pom.xml (original)
+++ aries/trunk/blueprint/blueprint-cm/pom.xml Fri Feb 16 14:48:09 2018
@@ -31,7 +31,7 @@
<groupId>org.apache.aries.blueprint</groupId>
<artifactId>org.apache.aries.blueprint.cm</artifactId>
<packaging>bundle</packaging>
- <version>1.2.1-SNAPSHOT</version>
+ <version>1.3.0-SNAPSHOT</version>
<name>Apache Aries Blueprint CM</name>
<description>
This bundle contains the ConfigAdmin namespace for blueprint.
@@ -56,8 +56,8 @@
</aries.osgi.private.pkg>
<blueprint.api.version>1.0.0</blueprint.api.version>
- <blueprint.core.version>1.7.0</blueprint.core.version>
- <blueprint.parser.version>1.4.0</blueprint.parser.version>
+ <blueprint.core.version>1.10.0-SNAPSHOT</blueprint.core.version>
+ <blueprint.parser.version>1.6.0-SNAPSHOT</blueprint.parser.version>
<lastReleaseVersion>1.1.0</lastReleaseVersion>
</properties>
Modified: aries/trunk/blueprint/blueprint-cm/src/main/java/org/apache/aries/blueprint/compendium/cm/CmPropertyPlaceholder.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-cm/src/main/java/org/apache/aries/blueprint/compendium/cm/CmPropertyPlaceholder.java?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-cm/src/main/java/org/apache/aries/blueprint/compendium/cm/CmPropertyPlaceholder.java (original)
+++ aries/trunk/blueprint/blueprint-cm/src/main/java/org/apache/aries/blueprint/compendium/cm/CmPropertyPlaceholder.java Fri Feb 16 14:48:09 2018
@@ -22,7 +22,7 @@ import java.util.Dictionary;
import java.util.Enumeration;
import java.util.Properties;
-import org.apache.aries.blueprint.ext.PropertyPlaceholder;
+import org.apache.aries.blueprint.ext.PropertyPlaceholderExt;
import org.apache.aries.blueprint.services.ExtendedBlueprintContainer;
import org.osgi.framework.Bundle;
import org.osgi.framework.Constants;
@@ -35,7 +35,7 @@ import org.slf4j.LoggerFactory;
*
* @version $Rev$, $Date$
*/
-public class CmPropertyPlaceholder extends PropertyPlaceholder implements ManagedObject {
+public class CmPropertyPlaceholder extends PropertyPlaceholderExt implements ManagedObject {
private static final Logger LOGGER = LoggerFactory.getLogger(CmPropertyPlaceholder.class);
@@ -102,7 +102,7 @@ public class CmPropertyPlaceholder exten
managedObjectManager.unregister(this);
}
- protected String getProperty(String val) {
+ protected Object getProperty(String val) {
LOGGER.debug("Retrieving property value {} from configuration with pid {}", val, persistentId);
Object v = null;
if (properties != null) {
@@ -116,7 +116,7 @@ public class CmPropertyPlaceholder exten
if (v == null) {
v = super.getProperty(val);
}
- return v != null ? v.toString() : null;
+ return v;
}
public Bundle getBundle() {
Modified: aries/trunk/blueprint/blueprint-core/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/pom.xml?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/pom.xml (original)
+++ aries/trunk/blueprint/blueprint-core/pom.xml Fri Feb 16 14:48:09 2018
@@ -32,7 +32,7 @@
<artifactId>org.apache.aries.blueprint.core</artifactId>
<packaging>bundle</packaging>
<name>Apache Aries Blueprint Core</name>
- <version>1.9.1-SNAPSHOT</version>
+ <version>1.10.0-SNAPSHOT</version>
<description>
This bundle contains the core implementation of Blueprint
along with the "ext" namespace handler.
@@ -82,7 +82,8 @@
org.apache.aries.blueprint.proxy,
org.apache.aries.blueprint.services,
org.apache.aries.blueprint.utils.*,
- org.apache.aries.util.tracker*
+ org.apache.aries.util.tracker*,
+ org.apache.felix.utils.properties
</aries.osgi.private.pkg>
<aries.osgi.export.service>
org.apache.aries.blueprint.services.ParserService
@@ -93,7 +94,7 @@
</aries.osgi.include.resource>
<blueprint.annotation.api.version>1.0.0</blueprint.annotation.api.version>
<blueprint.api.version>1.0.0</blueprint.api.version>
- <blueprint.parser.version>1.5.0</blueprint.parser.version>
+ <blueprint.parser.version>1.6.0-SNAPSHOT</blueprint.parser.version>
<proxy.api.version>1.1.0</proxy.api.version>
<proxy.impl.version>1.1.0</proxy.impl.version>
<quiesce.api.version>1.0.0</quiesce.api.version>
@@ -159,6 +160,12 @@
<scope>provided</scope>
</dependency>
<dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.utils</artifactId>
+ <version>1.10.4</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<scope>test</scope>
Modified: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/di/ValueRecipe.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/di/ValueRecipe.java?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/di/ValueRecipe.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/di/ValueRecipe.java Fri Feb 16 14:48:09 2018
@@ -22,6 +22,7 @@ import java.lang.reflect.Type;
import java.util.Collections;
import java.util.List;
+import org.apache.aries.blueprint.ExtendedValueMetadata;
import org.osgi.service.blueprint.container.ComponentDefinitionException;
import org.osgi.service.blueprint.reflect.ValueMetadata;
@@ -51,7 +52,14 @@ public class ValueRecipe extends Abstrac
protected Object internalCreate() throws ComponentDefinitionException {
try {
Type type = getValueType();
- return convert(value.getStringValue(), type);
+ Object v = null;
+ if (value instanceof ExtendedValueMetadata) {
+ v = ((ExtendedValueMetadata) value).getValue();
+ }
+ if (v == null) {
+ v = value.getStringValue();
+ }
+ return convert(v, type);
} catch (Exception e) {
throw new ComponentDefinitionException(e);
}
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=1824499&r1=1824498&r2=1824499&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 Fri Feb 16 14:48:09 2018
@@ -65,6 +65,7 @@ import org.slf4j.LoggerFactory;
*
* @version $Rev$, $Date$
*/
+@Deprecated
public abstract class AbstractPropertyPlaceholder implements ComponentDefinitionRegistryProcessor {
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractPropertyPlaceholder.class);
Copied: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/AbstractPropertyPlaceholderExt.java (from r1824428, 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/AbstractPropertyPlaceholderExt.java?p2=aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/AbstractPropertyPlaceholderExt.java&p1=aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/AbstractPropertyPlaceholder.java&r1=1824428&r2=1824499&rev=1824499&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/AbstractPropertyPlaceholderExt.java Fri Feb 16 14:48:09 2018
@@ -18,56 +18,31 @@
*/
package org.apache.aries.blueprint.ext;
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
import org.apache.aries.blueprint.ComponentDefinitionRegistry;
import org.apache.aries.blueprint.ComponentDefinitionRegistryProcessor;
+import org.apache.aries.blueprint.ExtendedValueMetadata;
import org.apache.aries.blueprint.PassThroughMetadata;
-import org.apache.aries.blueprint.mutable.MutableBeanArgument;
-import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
-import org.apache.aries.blueprint.mutable.MutableBeanProperty;
-import org.apache.aries.blueprint.mutable.MutableCollectionMetadata;
-import org.apache.aries.blueprint.mutable.MutableMapEntry;
-import org.apache.aries.blueprint.mutable.MutableMapMetadata;
-import org.apache.aries.blueprint.mutable.MutablePropsMetadata;
-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.apache.aries.blueprint.mutable.*;
import org.osgi.framework.Bundle;
import org.osgi.service.blueprint.container.ComponentDefinitionException;
-import org.osgi.service.blueprint.reflect.BeanArgument;
-import org.osgi.service.blueprint.reflect.BeanMetadata;
-import org.osgi.service.blueprint.reflect.BeanProperty;
-import org.osgi.service.blueprint.reflect.CollectionMetadata;
-import org.osgi.service.blueprint.reflect.MapEntry;
-import org.osgi.service.blueprint.reflect.MapMetadata;
-import org.osgi.service.blueprint.reflect.Metadata;
-import org.osgi.service.blueprint.reflect.NonNullMetadata;
-import org.osgi.service.blueprint.reflect.PropsMetadata;
-import org.osgi.service.blueprint.reflect.ReferenceListMetadata;
-import org.osgi.service.blueprint.reflect.ReferenceListener;
-import org.osgi.service.blueprint.reflect.ReferenceMetadata;
-import org.osgi.service.blueprint.reflect.RegistrationListener;
-import org.osgi.service.blueprint.reflect.ServiceMetadata;
-import org.osgi.service.blueprint.reflect.ServiceReferenceMetadata;
-import org.osgi.service.blueprint.reflect.Target;
-import org.osgi.service.blueprint.reflect.ValueMetadata;
+import org.osgi.service.blueprint.reflect.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
/**
* Abstract class for property placeholders.
*
* @version $Rev$, $Date$
*/
-public abstract class AbstractPropertyPlaceholder implements ComponentDefinitionRegistryProcessor {
+public abstract class AbstractPropertyPlaceholderExt implements ComponentDefinitionRegistryProcessor {
- private static final Logger LOGGER = LoggerFactory.getLogger(AbstractPropertyPlaceholder.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(AbstractPropertyPlaceholderExt.class);
private String placeholderPrefix = "${";
private String placeholderSuffix = "}";
@@ -435,11 +410,11 @@ public abstract class AbstractPropertyPl
LOGGER.info(sb.toString());
}
- protected String retrieveValue(String expression) {
+ protected Object retrieveValue(String expression) {
return getProperty(expression);
}
- protected String processString(String str) {
+ protected Object processString(String str) {
// TODO: we need to handle escapes on the prefix / suffix
Matcher matcher = getPattern().matcher(str);
while (matcher.find()) {
@@ -449,10 +424,14 @@ public abstract class AbstractPropertyPl
matcher.region(matcher.start(1) + idx, str.length());
continue;
}
- String rep = retrieveValue(matcher.group(1));
+ Object rep = retrieveValue(matcher.group(1));
if (rep != null) {
- str = str.replace(matcher.group(0), rep);
- matcher.reset(str);
+ if (rep instanceof String || !matcher.group(0).equals(str)) {
+ str = str.replace(matcher.group(0), rep.toString());
+ matcher.reset(str);
+ } else {
+ return rep;
+ }
}
}
if (nullValue != null && nullValue.equals(str)) {
@@ -461,7 +440,7 @@ public abstract class AbstractPropertyPl
return str;
}
- protected String getProperty(String val) {
+ protected Object getProperty(String val) {
return null;
}
@@ -472,30 +451,46 @@ public abstract class AbstractPropertyPl
return pattern;
}
- public class LateBindingValueMetadata implements ValueMetadata {
+ public class LateBindingValueMetadata implements ExtendedValueMetadata {
private final ValueMetadata metadata;
private boolean retrieved;
- private String retrievedValue;
+ private Object retrievedValue;
public LateBindingValueMetadata(ValueMetadata metadata) {
this.metadata = metadata;
}
public String getStringValue() {
- if (!retrieved) {
- String v = metadata.getStringValue();
- LOGGER.debug("Before process: {}", v);
- retrievedValue = processString(v);
- LOGGER.debug("After process: {}", retrievedValue);
-
- retrieved = true;
- }
- return retrievedValue;
+ retrieve();
+ return retrievedValue instanceof String ? (String) retrievedValue : null;
}
public String getType() {
return metadata.getType();
}
+
+ public Object getValue() {
+ retrieve();
+ return retrievedValue instanceof String ? null : retrievedValue;
+ }
+
+ private void retrieve() {
+ if (!retrieved) {
+ Object o = null;
+ if (metadata instanceof ExtendedValueMetadata) {
+ o = ((ExtendedValueMetadata) metadata).getValue();
+ }
+ if (o == null) {
+ String v = metadata.getStringValue();
+ LOGGER.debug("Before process: {}", v);
+ retrievedValue = processString(v);
+ LOGGER.debug("After process: {}", retrievedValue);
+ } else {
+ LOGGER.debug("Skipping non string value: {}", o);
+ }
+ retrieved = true;
+ }
+ }
}
}
Modified: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/PlaceholdersUtils.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/PlaceholdersUtils.java?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/PlaceholdersUtils.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/PlaceholdersUtils.java Fri Feb 16 14:48:09 2018
@@ -20,7 +20,6 @@ package org.apache.aries.blueprint.ext;
import org.apache.aries.blueprint.ComponentDefinitionRegistry;
import org.apache.aries.blueprint.ExtendedBeanMetadata;
-import org.apache.aries.blueprint.ext.AbstractPropertyPlaceholder;
import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
import org.osgi.service.blueprint.container.ComponentDefinitionException;
import org.osgi.service.blueprint.reflect.BeanMetadata;
@@ -42,7 +41,7 @@ public class PlaceholdersUtils {
ComponentMetadata component = registry.getComponentDefinition(id);
if (component instanceof ExtendedBeanMetadata) {
ExtendedBeanMetadata bean = (ExtendedBeanMetadata) component;
- if (bean.getRuntimeClass() != null && AbstractPropertyPlaceholder.class.isAssignableFrom(bean.getRuntimeClass())) {
+ if (bean.getRuntimeClass() != null && AbstractPropertyPlaceholderExt.class.isAssignableFrom(bean.getRuntimeClass())) {
String otherPrefix = getPlaceholderProperty(bean, "placeholderPrefix");
String otherSuffix = getPlaceholderProperty(bean, "placeholderSuffix");
if (prefix.equals(otherPrefix) && suffix.equals(otherSuffix)) {
Modified: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/PropertyPlaceholder.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/PropertyPlaceholder.java?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/PropertyPlaceholder.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/PropertyPlaceholder.java Fri Feb 16 14:48:09 2018
@@ -32,8 +32,6 @@ import org.apache.aries.blueprint.Compon
import org.apache.aries.blueprint.PassThroughMetadata;
import org.apache.aries.blueprint.ext.evaluator.PropertyEvaluator;
import org.apache.aries.blueprint.services.ExtendedBlueprintContainer;
-import org.osgi.framework.Bundle;
-import org.osgi.service.blueprint.container.BlueprintContainer;
import org.osgi.service.blueprint.container.ComponentDefinitionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -43,6 +41,7 @@ import org.slf4j.LoggerFactory;
*
* @version $Rev$, $Date$
*/
+@Deprecated
public class PropertyPlaceholder extends AbstractPropertyPlaceholder {
public enum SystemProperties {
Copied: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/PropertyPlaceholderExt.java (from r1824428, aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/PropertyPlaceholder.java)
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/PropertyPlaceholderExt.java?p2=aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/PropertyPlaceholderExt.java&p1=aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/PropertyPlaceholder.java&r1=1824428&r2=1824499&rev=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/PropertyPlaceholder.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/PropertyPlaceholderExt.java Fri Feb 16 14:48:09 2018
@@ -18,32 +18,31 @@
*/
package org.apache.aries.blueprint.ext;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Field;
-import java.net.URL;
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
import org.apache.aries.blueprint.ComponentDefinitionRegistry;
import org.apache.aries.blueprint.PassThroughMetadata;
import org.apache.aries.blueprint.ext.evaluator.PropertyEvaluator;
+import org.apache.aries.blueprint.ext.evaluator.PropertyEvaluatorExt;
import org.apache.aries.blueprint.services.ExtendedBlueprintContainer;
-import org.osgi.framework.Bundle;
-import org.osgi.service.blueprint.container.BlueprintContainer;
+import org.apache.felix.utils.properties.Properties;
import org.osgi.service.blueprint.container.ComponentDefinitionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.net.URL;
+import java.util.AbstractMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
/**
* Property placeholder that looks for properties in the System properties.
*
* @version $Rev$, $Date$
*/
-public class PropertyPlaceholder extends AbstractPropertyPlaceholder {
+public class PropertyPlaceholderExt extends AbstractPropertyPlaceholderExt {
public enum SystemProperties {
never,
@@ -51,21 +50,21 @@ public class PropertyPlaceholder extends
override
}
- private static final Logger LOGGER = LoggerFactory.getLogger(PropertyPlaceholder.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(PropertyPlaceholderExt.class);
- private Map defaultProperties;
+ private Map<String, Object> defaultProperties;
private Properties properties;
private List<URL> locations;
private boolean ignoreMissingLocations;
private SystemProperties systemProperties = SystemProperties.fallback;
- private PropertyEvaluator evaluator = null;
+ private PropertyEvaluatorExt evaluator = null;
private ExtendedBlueprintContainer container;
- public Map getDefaultProperties() {
+ public Map<String, Object> getDefaultProperties() {
return defaultProperties;
}
- public void setDefaultProperties(Map defaultProperties) {
+ public void setDefaultProperties(Map<String, Object> defaultProperties) {
this.defaultProperties = defaultProperties;
}
@@ -93,11 +92,11 @@ public class PropertyPlaceholder extends
this.systemProperties = systemProperties;
}
- public PropertyEvaluator getEvaluator() {
+ public PropertyEvaluatorExt getEvaluator() {
return evaluator;
}
- public void setEvaluator(PropertyEvaluator evaluator) {
+ public void setEvaluator(PropertyEvaluatorExt evaluator) {
this.evaluator = evaluator;
}
@@ -132,7 +131,7 @@ public class PropertyPlaceholder extends
super.process(registry);
}
- protected String getProperty(String val) {
+ protected Object getProperty(String val) {
LOGGER.debug("Retrieving property {}", val);
Object v = null;
if (v == null && systemProperties == SystemProperties.override) {
@@ -162,7 +161,7 @@ public class PropertyPlaceholder extends
if (v == null) {
LOGGER.debug("Property {} not found", val);
}
- return v != null ? v.toString() : null;
+ return v;
}
protected String getSystemProperty(String val) {
@@ -204,49 +203,21 @@ public class PropertyPlaceholder extends
}
@Override
- protected String retrieveValue(String expression) {
+ protected Object retrieveValue(String expression) {
LOGGER.debug("Retrieving Value from expression: {}", expression);
if (evaluator == null) {
return super.retrieveValue(expression);
} else {
- return evaluator.evaluate(expression, new Dictionary<String, String>() {
+ return evaluator.evaluate(expression, new AbstractMap<String, Object>() {
@Override
- public String get(Object key) {
+ public Object get(Object key) {
return getProperty((String) key);
}
-
- // following are not important
- @Override
- public String put(String key, String value) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Enumeration<String> elements() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean isEmpty() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Enumeration<String> keys() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public String remove(Object key) {
- throw new UnsupportedOperationException();
- }
-
@Override
- public int size() {
+ public Set<Entry<String, Object>> entrySet() {
throw new UnsupportedOperationException();
}
-
});
}
Modified: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/evaluator/PropertyEvaluator.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/evaluator/PropertyEvaluator.java?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/evaluator/PropertyEvaluator.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/evaluator/PropertyEvaluator.java Fri Feb 16 14:48:09 2018
@@ -18,7 +18,7 @@ package org.apache.aries.blueprint.ext.e
import java.util.Dictionary;
-
+@Deprecated
public interface PropertyEvaluator {
public String evaluate(String expression, Dictionary<String, String> properties);
}
Copied: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/evaluator/PropertyEvaluatorExt.java (from r1824428, aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/evaluator/PropertyEvaluator.java)
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/evaluator/PropertyEvaluatorExt.java?p2=aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/evaluator/PropertyEvaluatorExt.java&p1=aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/evaluator/PropertyEvaluator.java&r1=1824428&r2=1824499&rev=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/evaluator/PropertyEvaluator.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/evaluator/PropertyEvaluatorExt.java Fri Feb 16 14:48:09 2018
@@ -16,9 +16,11 @@
*/
package org.apache.aries.blueprint.ext.evaluator;
-import java.util.Dictionary;
+import java.util.Map;
-public interface PropertyEvaluator {
- public String evaluate(String expression, Dictionary<String, String> properties);
+public interface PropertyEvaluatorExt {
+
+ Object evaluate(String expression, Map<String, Object> properties);
+
}
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=1824499&r1=1824498&r2=1824499&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 Fri Feb 16 14:48:09 2018
@@ -26,8 +26,8 @@ import org.apache.aries.blueprint.Extend
import org.apache.aries.blueprint.ParserContext;
import org.apache.aries.blueprint.container.NullProxy;
import org.apache.aries.blueprint.ext.PlaceholdersUtils;
-import org.apache.aries.blueprint.ext.PropertyPlaceholder;
-import org.apache.aries.blueprint.ext.evaluator.PropertyEvaluator;
+import org.apache.aries.blueprint.ext.PropertyPlaceholderExt;
+import org.apache.aries.blueprint.ext.evaluator.PropertyEvaluatorExt;
import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
import org.apache.aries.blueprint.mutable.MutableCollectionMetadata;
import org.apache.aries.blueprint.mutable.MutableComponentMetadata;
@@ -157,7 +157,7 @@ public class ExtNamespaceHandler impleme
public Set<Class> getManagedClasses() {
return new HashSet<Class>(Arrays.asList(
- PropertyPlaceholder.class
+ PropertyPlaceholderExt.class
));
}
@@ -424,7 +424,7 @@ public class ExtNamespaceHandler impleme
metadata.setProcessor(true);
metadata.setId(getId(context, element));
metadata.setScope(BeanMetadata.SCOPE_SINGLETON);
- metadata.setRuntimeClass(PropertyPlaceholder.class);
+ metadata.setRuntimeClass(PropertyPlaceholderExt.class);
metadata.setInitMethod("init");
String prefix = element.hasAttribute(PLACEHOLDER_PREFIX_ATTRIBUTE)
? element.getAttribute(PLACEHOLDER_PREFIX_ATTRIBUTE)
@@ -547,11 +547,11 @@ public class ExtNamespaceHandler impleme
m.setComponentId(value);
return m;
}
-
+
private MutableReferenceMetadata createReference(ParserContext context, String value) {
MutableReferenceMetadata m = context.createMetadata(MutableReferenceMetadata.class);
// use the class instance directly rather than loading the class from the specified the interface name.
- m.setRuntimeInterface(PropertyEvaluator.class);
+ m.setRuntimeInterface(PropertyEvaluatorExt.class);
m.setFilter("(org.apache.aries.blueprint.ext.evaluator.name=" + value + ")");
m.setBundleContext(ctx);
return m;
Modified: aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/ext/PropertyPlaceholderTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/ext/PropertyPlaceholderTest.java?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/ext/PropertyPlaceholderTest.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/test/java/org/apache/aries/blueprint/ext/PropertyPlaceholderTest.java Fri Feb 16 14:48:09 2018
@@ -27,7 +27,7 @@ import org.junit.Before;
import org.junit.Test;
import org.osgi.service.blueprint.reflect.ValueMetadata;
-public class PropertyPlaceholderTest extends PropertyPlaceholder {
+public class PropertyPlaceholderTest extends PropertyPlaceholderExt {
private final Map<String,String> values = new HashMap<String,String>();
private LateBindingValueMetadata sut;
Modified: aries/trunk/blueprint/blueprint-jexl-evaluator/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-jexl-evaluator/pom.xml?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-jexl-evaluator/pom.xml (original)
+++ aries/trunk/blueprint/blueprint-jexl-evaluator/pom.xml Fri Feb 16 14:48:09 2018
@@ -32,7 +32,7 @@
<artifactId>org.apache.aries.blueprint.jexl.evaluator</artifactId>
<packaging>bundle</packaging>
<name>Apache Aries Blueprint JEXL evaluator</name>
- <version>1.0.1-SNAPSHOT</version>
+ <version>1.1.0-SNAPSHOT</version>
<description>
This bundle contains a plugin to the "ext" namespace handler for evaluating expressions using JEXL
</description>
@@ -55,7 +55,7 @@
<aries.osgi.private.pkg>
org.apache.aries.blueprint.jexl.evaluator
</aries.osgi.private.pkg>
- <blueprint.core.version>1.0.0</blueprint.core.version>
+ <blueprint.core.version>1.10.0-SNAPSHOT</blueprint.core.version>
<lastReleaseVersion>1.0.0</lastReleaseVersion>
</properties>
Modified: aries/trunk/blueprint/blueprint-jexl-evaluator/src/main/java/org/apache/aries/blueprint/jexl/evaluator/JexlPropertyEvaluator.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-jexl-evaluator/src/main/java/org/apache/aries/blueprint/jexl/evaluator/JexlPropertyEvaluator.java?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-jexl-evaluator/src/main/java/org/apache/aries/blueprint/jexl/evaluator/JexlPropertyEvaluator.java (original)
+++ aries/trunk/blueprint/blueprint-jexl-evaluator/src/main/java/org/apache/aries/blueprint/jexl/evaluator/JexlPropertyEvaluator.java Fri Feb 16 14:48:09 2018
@@ -16,97 +16,30 @@
*/
package org.apache.aries.blueprint.jexl.evaluator;
-import java.util.Collection;
-import java.util.Dictionary;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
-import org.apache.aries.blueprint.ext.evaluator.PropertyEvaluator;
+import org.apache.aries.blueprint.ext.evaluator.PropertyEvaluatorExt;
+import org.apache.commons.jexl2.Expression;
+import org.apache.commons.jexl2.JexlEngine;
+import org.apache.commons.jexl2.MapContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class JexlPropertyEvaluator implements PropertyEvaluator {
+public class JexlPropertyEvaluator implements PropertyEvaluatorExt {
private static final Logger LOGGER = LoggerFactory.getLogger(JexlPropertyEvaluator.class);
-
- private JexlExpressionParser jexlParser;
- private Dictionary<String, String> properties;
-
- public String evaluate(String expression, Dictionary<String, String> properties) {
- JexlExpressionParser parser = getJexlParser();
- this.properties = properties;
- Object obj;
+ public Object evaluate(String expression, Map<String, Object> properties) {
try {
- obj = parser.evaluate(expression);
- if (obj!=null) {
- return obj.toString();
- }
+ JexlEngine engine = new JexlEngine();
+ MapContext context = new MapContext(properties);
+ Expression exp = engine.createExpression(expression);
+ return exp.evaluate(context);
} catch (Exception e) {
LOGGER.info("Could not evaluate expression: {}", expression);
LOGGER.info("Exception:", e);
+ return null;
}
-
- return null;
- }
-
- private synchronized JexlExpressionParser getJexlParser() {
- if (jexlParser == null) {
- jexlParser = new JexlExpressionParser(toMap());
- }
- return jexlParser;
}
- private Map<String, Object> toMap() {
- return new Map<String, Object>() {
- public boolean containsKey(Object o) {
- return properties.get(o) != null;
- }
-
- public Object get(Object o) {
- return properties.get(o);
- }
-
- // following are not important
- public Object put(String s, Object o) {
- throw new UnsupportedOperationException();
- }
-
- public int size() {
- throw new UnsupportedOperationException();
- }
-
- public boolean isEmpty() {
- throw new UnsupportedOperationException();
- }
-
- public boolean containsValue(Object o) {
- throw new UnsupportedOperationException();
- }
-
- public Object remove(Object o) {
- throw new UnsupportedOperationException();
- }
-
- public void putAll(Map<? extends String, ? extends Object> map) {
- throw new UnsupportedOperationException();
- }
-
- public void clear() {
- throw new UnsupportedOperationException();
- }
-
- public Set<String> keySet() {
- throw new UnsupportedOperationException();
- }
-
- public Collection<Object> values() {
- throw new UnsupportedOperationException();
- }
-
- public Set<Entry<String, Object>> entrySet() {
- throw new UnsupportedOperationException();
- }
- };
- }
}
Modified: aries/trunk/blueprint/blueprint-jexl-evaluator/src/main/resources/OSGI-INF/blueprint/jexl.xml
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-jexl-evaluator/src/main/resources/OSGI-INF/blueprint/jexl.xml?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-jexl-evaluator/src/main/resources/OSGI-INF/blueprint/jexl.xml (original)
+++ aries/trunk/blueprint/blueprint-jexl-evaluator/src/main/resources/OSGI-INF/blueprint/jexl.xml Fri Feb 16 14:48:09 2018
@@ -19,7 +19,7 @@
-->
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
- <service interface="org.apache.aries.blueprint.ext.evaluator.PropertyEvaluator">
+ <service interface="org.apache.aries.blueprint.ext.evaluator.PropertyEvaluatorExt">
<service-properties>
<entry key="org.apache.aries.blueprint.ext.evaluator.name" value="jexl" />
</service-properties>
Modified: aries/trunk/blueprint/blueprint-noosgi/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-noosgi/pom.xml?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-noosgi/pom.xml (original)
+++ aries/trunk/blueprint/blueprint-noosgi/pom.xml Fri Feb 16 14:48:09 2018
@@ -45,8 +45,8 @@
<properties>
<blueprint.api.version>1.0.1</blueprint.api.version>
- <blueprint.core.version>1.9.0</blueprint.core.version>
- <blueprint.parser.version>1.5.0</blueprint.parser.version>
+ <blueprint.core.version>1.10.0-SNAPSHOT</blueprint.core.version>
+ <blueprint.parser.version>1.6.0-SNAPSHOT</blueprint.parser.version>
<proxy.impl.version>1.0.3</proxy.impl.version>
</properties>
@@ -109,6 +109,12 @@
</dependency>
-->
<dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.utils</artifactId>
+ <version>1.10.4</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<scope>provided</scope>
Modified: aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/AbstractPropertyPlaceholder.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/AbstractPropertyPlaceholder.java?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/AbstractPropertyPlaceholder.java (original)
+++ aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/AbstractPropertyPlaceholder.java Fri Feb 16 14:48:09 2018
@@ -26,6 +26,7 @@ import java.util.regex.Pattern;
import org.apache.aries.blueprint.ComponentDefinitionRegistry;
import org.apache.aries.blueprint.ComponentDefinitionRegistryProcessor;
+import org.apache.aries.blueprint.ExtendedValueMetadata;
import org.apache.aries.blueprint.PassThroughMetadata;
import org.apache.aries.blueprint.mutable.MutableBeanArgument;
import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
@@ -62,6 +63,7 @@ public abstract class AbstractPropertyPl
private ExtendedBlueprintContainer blueprintContainer;
private String placeholderPrefix = "${";
private String placeholderSuffix = "}";
+ private String nullValue = null;
private Pattern pattern;
private LinkedList<String> processingStack = new LinkedList<String>();
@@ -82,6 +84,14 @@ public abstract class AbstractPropertyPl
this.placeholderSuffix = placeholderSuffix;
}
+ public String getNullValue() {
+ return nullValue;
+ }
+
+ public void setNullValue(String nullValue) {
+ this.nullValue = nullValue;
+ }
+
public ExtendedBlueprintContainer getBlueprintContainer() {
return blueprintContainer;
}
@@ -310,11 +320,11 @@ public abstract class AbstractPropertyPl
LOGGER.info(sb.toString());
}
- protected String retrieveValue(String expression) {
+ protected Object retrieveValue(String expression) {
return getProperty(expression);
}
- protected String processString(String str) {
+ protected Object processString(String str) {
// TODO: we need to handle escapes on the prefix / suffix
Matcher matcher = getPattern().matcher(str);
while (matcher.find()) {
@@ -324,16 +334,23 @@ public abstract class AbstractPropertyPl
matcher.region(matcher.start(1) + idx, str.length());
continue;
}
- String rep = retrieveValue(matcher.group(1));
+ Object rep = retrieveValue(matcher.group(1));
if (rep != null) {
- str = str.replace(matcher.group(0), rep);
- matcher.reset(str);
+ if (rep instanceof String || !matcher.group(0).equals(str)) {
+ str = str.replace(matcher.group(0), rep.toString());
+ matcher.reset(str);
+ } else {
+ return rep;
+ }
}
}
+ if (nullValue != null && nullValue.equals(str)) {
+ return null;
+ }
return str;
}
- protected String getProperty(String val) {
+ protected Object getProperty(String val) {
return null;
}
@@ -344,30 +361,46 @@ public abstract class AbstractPropertyPl
return pattern;
}
- public class LateBindingValueMetadata implements ValueMetadata {
+ public class LateBindingValueMetadata implements ExtendedValueMetadata {
private final ValueMetadata metadata;
private boolean retrieved;
- private String retrievedValue;
+ private Object retrievedValue;
public LateBindingValueMetadata(ValueMetadata metadata) {
this.metadata = metadata;
}
public String getStringValue() {
- if (!retrieved) {
- String v = metadata.getStringValue();
- LOGGER.debug("Before process: {}", v);
- retrievedValue = processString(v);
- LOGGER.debug("After process: {}", retrievedValue);
-
- retrieved = true;
- }
- return retrievedValue;
+ retrieve();
+ return retrievedValue instanceof String ? (String) retrievedValue : null;
}
public String getType() {
return metadata.getType();
}
+
+ public Object getValue() {
+ retrieve();
+ return retrievedValue instanceof String ? null : retrievedValue;
+ }
+
+ private void retrieve() {
+ if (!retrieved) {
+ Object o = null;
+ if (metadata instanceof ExtendedValueMetadata) {
+ o = ((ExtendedValueMetadata) metadata).getValue();
+ }
+ if (o == null) {
+ String v = metadata.getStringValue();
+ LOGGER.debug("Before process: {}", v);
+ retrievedValue = processString(v);
+ LOGGER.debug("After process: {}", retrievedValue);
+ } else {
+ LOGGER.debug("Skipping non string value: {}", o);
+ }
+ retrieved = true;
+ }
+ }
}
}
Modified: aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/PropertyPlaceholder.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/PropertyPlaceholder.java?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/PropertyPlaceholder.java (original)
+++ aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/PropertyPlaceholder.java Fri Feb 16 14:48:09 2018
@@ -21,13 +21,14 @@ package org.apache.aries.blueprint.ext;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
-import java.util.Dictionary;
-import java.util.Enumeration;
+import java.util.AbstractMap;
import java.util.List;
import java.util.Map;
-import java.util.Properties;
+import java.util.Set;
import org.apache.aries.blueprint.ext.evaluator.PropertyEvaluator;
+import org.apache.aries.blueprint.ext.evaluator.PropertyEvaluatorExt;
+import org.apache.felix.utils.properties.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -46,12 +47,12 @@ public class PropertyPlaceholder extends
private static final Logger LOGGER = LoggerFactory.getLogger(PropertyPlaceholder.class);
- private Map defaultProperties;
+ private Map<String, Object> defaultProperties;
private Properties properties;
private List<String> locations;
private boolean ignoreMissingLocations;
private SystemProperties systemProperties = SystemProperties.override;
- private PropertyEvaluator evaluator = null;
+ private PropertyEvaluatorExt evaluator = null;
public Map getDefaultProperties() {
return defaultProperties;
@@ -85,11 +86,11 @@ public class PropertyPlaceholder extends
this.systemProperties = systemProperties;
}
- public PropertyEvaluator getEvaluator() {
+ public PropertyEvaluatorExt getEvaluator() {
return evaluator;
}
- public void setEvaluator(PropertyEvaluator evaluator) {
+ public void setEvaluator(PropertyEvaluatorExt evaluator) {
this.evaluator = evaluator;
}
@@ -122,7 +123,7 @@ public class PropertyPlaceholder extends
}
}
- protected String getProperty(String val) {
+ protected Object getProperty(String val) {
LOGGER.debug("Retrieving property {}", val);
Object v = null;
if (v == null && systemProperties == SystemProperties.override) {
@@ -152,53 +153,25 @@ public class PropertyPlaceholder extends
if (v == null) {
LOGGER.debug("Property {} not found", val);
}
- return v != null ? v.toString() : null;
+ return v;
}
@Override
- protected String retrieveValue(String expression) {
+ protected Object retrieveValue(String expression) {
LOGGER.debug("Retrieving Value from expression: {}", expression);
if (evaluator == null) {
return super.retrieveValue(expression);
} else {
- return evaluator.evaluate(expression, new Dictionary<String, String>(){
+ return evaluator.evaluate(expression, new AbstractMap<String, Object>() {
@Override
- public String get(Object key) {
+ public Object get(Object key) {
return getProperty((String) key);
}
-
- // following are not important
- @Override
- public String put(String key, String value) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Enumeration<String> elements() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean isEmpty() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Enumeration<String> keys() {
- throw new UnsupportedOperationException();
- }
-
@Override
- public String remove(Object key) {
+ public Set<Entry<String, Object>> entrySet() {
throw new UnsupportedOperationException();
}
-
- @Override
- public int size() {
- throw new UnsupportedOperationException();
- }
-
});
}
Modified: aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/impl/ExtNamespaceHandler.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/impl/ExtNamespaceHandler.java?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/impl/ExtNamespaceHandler.java (original)
+++ aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/impl/ExtNamespaceHandler.java Fri Feb 16 14:48:09 2018
@@ -24,7 +24,6 @@ import java.util.*;
import org.apache.aries.blueprint.*;
import org.apache.aries.blueprint.container.NullProxy;
import org.apache.aries.blueprint.ext.AbstractPropertyPlaceholder;
-import org.apache.aries.blueprint.ext.PlaceholdersUtils;
import org.apache.aries.blueprint.ext.PropertyPlaceholder;
import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
import org.apache.aries.blueprint.mutable.MutableCollectionMetadata;
Modified: aries/trunk/blueprint/blueprint-noosgi/src/test/java/org/apache/aries/blueprint/ext/PropertyPlaceholderTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-noosgi/src/test/java/org/apache/aries/blueprint/ext/PropertyPlaceholderTest.java?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-noosgi/src/test/java/org/apache/aries/blueprint/ext/PropertyPlaceholderTest.java (original)
+++ aries/trunk/blueprint/blueprint-noosgi/src/test/java/org/apache/aries/blueprint/ext/PropertyPlaceholderTest.java Fri Feb 16 14:48:09 2018
@@ -28,7 +28,7 @@ import org.junit.Test;
import org.osgi.service.blueprint.reflect.ValueMetadata;
public class PropertyPlaceholderTest extends PropertyPlaceholder {
- private final Map<String,String> values = new HashMap<String,String>();
+ private final Map<String,Object> values = new HashMap<String,Object>();
private LateBindingValueMetadata sut;
@Before
@@ -113,7 +113,7 @@ public class PropertyPlaceholderTest ext
*/
// Override to simulate actual property retrieval
- protected String getProperty(String prop) {
+ protected Object getProperty(String prop) {
return values.get(prop);
}
Copied: aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/ExtendedValueMetadata.java (from r1824428, aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/evaluator/PropertyEvaluator.java)
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/ExtendedValueMetadata.java?p2=aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/ExtendedValueMetadata.java&p1=aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/evaluator/PropertyEvaluator.java&r1=1824428&r2=1824499&rev=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/evaluator/PropertyEvaluator.java (original)
+++ aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/ExtendedValueMetadata.java Fri Feb 16 14:48:09 2018
@@ -14,11 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.aries.blueprint.ext.evaluator;
+package org.apache.aries.blueprint;
-import java.util.Dictionary;
+import org.osgi.service.blueprint.reflect.ValueMetadata;
+public interface ExtendedValueMetadata extends ValueMetadata {
+
+ Object getValue();
-public interface PropertyEvaluator {
- public String evaluate(String expression, Dictionary<String, String> properties);
}
Modified: aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/mutable/MutableValueMetadata.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/mutable/MutableValueMetadata.java?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/mutable/MutableValueMetadata.java (original)
+++ aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/mutable/MutableValueMetadata.java Fri Feb 16 14:48:09 2018
@@ -18,6 +18,7 @@
*/
package org.apache.aries.blueprint.mutable;
+import org.apache.aries.blueprint.ExtendedValueMetadata;
import org.osgi.service.blueprint.reflect.ValueMetadata;
/**
@@ -25,10 +26,12 @@ import org.osgi.service.blueprint.reflec
*
* @version $Rev$, $Date$
*/
-public interface MutableValueMetadata extends ValueMetadata {
+public interface MutableValueMetadata extends ExtendedValueMetadata {
void setStringValue(String stringValue);
void setType(String type);
+ void setValue(Object value);
+
}
Modified: aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/reflect/ValueMetadataImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/reflect/ValueMetadataImpl.java?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/reflect/ValueMetadataImpl.java (original)
+++ aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/reflect/ValueMetadataImpl.java Fri Feb 16 14:48:09 2018
@@ -18,6 +18,7 @@
*/
package org.apache.aries.blueprint.reflect;
+import org.apache.aries.blueprint.ExtendedValueMetadata;
import org.apache.aries.blueprint.mutable.MutableValueMetadata;
import org.osgi.service.blueprint.reflect.ValueMetadata;
@@ -30,6 +31,7 @@ public class ValueMetadataImpl implement
private String stringValue;
private String type;
+ private Object value;
public ValueMetadataImpl() {
}
@@ -43,9 +45,16 @@ public class ValueMetadataImpl implement
this.type = type;
}
+ public ValueMetadataImpl(Object value) {
+ this.value = value;
+ }
+
public ValueMetadataImpl(ValueMetadata source) {
this.stringValue = source.getStringValue();
this.type = source.getType();
+ if (source instanceof ExtendedValueMetadata) {
+ this.value = ((ExtendedValueMetadata) source).getValue();
+ }
}
public String getStringValue() {
@@ -64,11 +73,20 @@ public class ValueMetadataImpl implement
this.type = typeName;
}
+ public Object getValue() {
+ return value;
+ }
+
+ public void setValue(Object value) {
+ this.value = value;
+ }
+
@Override
public String toString() {
return "ValueMetadata[" +
"stringValue='" + stringValue + '\'' +
", type='" + type + '\'' +
+ ", value='" + value + '\'' +
']';
}
}
Modified: aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/CmPropertyPlaceholderTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/CmPropertyPlaceholderTest.java?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/CmPropertyPlaceholderTest.java (original)
+++ aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/CmPropertyPlaceholderTest.java Fri Feb 16 14:48:09 2018
@@ -90,7 +90,7 @@ public class CmPropertyPlaceholderTest e
assertThat(foo.getC(), nullValue());
Configuration cf = ca.getConfiguration("blueprint-sample-properties.pid", null);
- Hashtable<String,String> props = new Hashtable<String,String>();
+ Hashtable<String,Object> props = new Hashtable<String,Object>();
props.put("pb", "43");
cf.update(props);
Thread.sleep(500);
@@ -98,6 +98,16 @@ public class CmPropertyPlaceholderTest e
foo = (FooInterface)context().getService(sr);
assertEquals("43", foo.getB());
+ props.clear();
+ props.put("pc", 7);
+ props.put("pd", new int[] { 3, 4 });
+ cf.update(props);
+ Thread.sleep(500);
+ sr = getServiceRef(FooInterface.class, "(key=foo5)");
+ foo = (FooInterface)context().getService(sr);
+ assertEquals(7L, (long) foo.getC());
+ assertArrayEquals(new int[] { 3, 4 }, (int[]) foo.getD());
+
cf.delete();
Thread.sleep(500);
sr = getServiceRef(FooInterface.class, "(key=foo5)");
Modified: aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/service/Foo.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/service/Foo.java?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/service/Foo.java (original)
+++ aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/service/Foo.java Fri Feb 16 14:48:09 2018
@@ -29,6 +29,7 @@ public class Foo implements FooInterface
private int a;
private String b;
private Long c;
+ private Object d;
private Properties props;
public int getA() {
@@ -56,6 +57,14 @@ public class Foo implements FooInterface
this.c = c;
}
+ public Object getD() {
+ return d;
+ }
+
+ public void setD(Object d) {
+ this.d = d;
+ }
+
public Properties getProps() {
return props;
}
Modified: aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/service/FooInterface.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/service/FooInterface.java?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/service/FooInterface.java (original)
+++ aries/trunk/blueprint/itests/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/cm/service/FooInterface.java Fri Feb 16 14:48:09 2018
@@ -26,6 +26,8 @@ public interface FooInterface {
Long getC();
+ Object getD();
+
Properties getProps();
}
Modified: aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/CmPropertyPlaceholderTest.xml
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/CmPropertyPlaceholderTest.xml?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/CmPropertyPlaceholderTest.xml (original)
+++ aries/trunk/blueprint/itests/blueprint-itests/src/test/resources/CmPropertyPlaceholderTest.xml Fri Feb 16 14:48:09 2018
@@ -28,6 +28,7 @@
<bean id="foo" class="org.apache.aries.blueprint.itests.cm.service.Foo">
<property name="b" value="${pb}"/>
<property name="c" value="${pc}"/>
+ <property name="d" value="${pd}"/>
</bean>
<service id="myService" interface="org.apache.aries.blueprint.itests.cm.service.FooInterface" ref="foo">
<service-properties>
Modified: aries/trunk/blueprint/parent/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/parent/pom.xml?rev=1824499&r1=1824498&r2=1824499&view=diff
==============================================================================
--- aries/trunk/blueprint/parent/pom.xml (original)
+++ aries/trunk/blueprint/parent/pom.xml Fri Feb 16 14:48:09 2018
@@ -45,13 +45,13 @@
<properties>
<blueprint.api.dev.version>1.0.2-SNAPSHOT</blueprint.api.dev.version>
- <blueprint.core.dev.version>1.9.1-SNAPSHOT</blueprint.core.dev.version>
- <blueprint.cm.dev.version>1.2.1-SNAPSHOT</blueprint.cm.dev.version>
+ <blueprint.core.dev.version>1.10.0-SNAPSHOT</blueprint.core.dev.version>
+ <blueprint.cm.dev.version>1.3.0-SNAPSHOT</blueprint.cm.dev.version>
<blueprint.parser.dev.version>1.6.0-SNAPSHOT</blueprint.parser.dev.version>
<blueprint.authz.dev.version>1.0.1-SNAPSHOT</blueprint.authz.dev.version>
<blueprint.spring.dev.version>1.0.0-SNAPSHOT</blueprint.spring.dev.version>
<blueprint.spring.extender.dev.version>1.0.0-SNAPSHOT</blueprint.spring.extender.dev.version>
- <blueprint.jexl.evaluator.dev.version>1.0.1-SNAPSHOT</blueprint.jexl.evaluator.dev.version>
+ <blueprint.jexl.evaluator.dev.version>1.1.0-SNAPSHOT</blueprint.jexl.evaluator.dev.version>
<blueprint.sample.dev.version>1.0.1-SNAPSHOT</blueprint.sample.dev.version>
<blueprint.sample.fragment.dev.version>1.0.1-SNAPSHOT</blueprint.sample.fragment.dev.version>
<blueprint.noosgi.dev.version>1.2.0-SNAPSHOT</blueprint.noosgi.dev.version>