Update ConfigurationHolder and add static initializers
diff --git a/component-dsl/src/main/java/org/apache/aries/component/dsl/configuration/ConfigurationHolder.java b/component-dsl/src/main/java/org/apache/aries/component/dsl/configuration/ConfigurationHolder.java
index f114fb1..6c7c721 100644
--- a/component-dsl/src/main/java/org/apache/aries/component/dsl/configuration/ConfigurationHolder.java
+++ b/component-dsl/src/main/java/org/apache/aries/component/dsl/configuration/ConfigurationHolder.java
@@ -18,20 +18,43 @@
package org.apache.aries.component.dsl.configuration;
import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.Map;
public interface ConfigurationHolder {
- String getPid();
-
Dictionary<String, ?> getProperties();
- String getFactoryPid();
-
long getChangeCount();
- void refresh();
-
long getUpdatedChangeCount();
Dictionary<String, ?> getUpdatedProperties();
+
+ public static ConfigurationHolder fromMap(Map<String, ?> map) {
+ return new ConfigurationHolder() {
+
+ final Hashtable<String, ?> properties = new Hashtable<>(map);
+
+ @Override
+ public Dictionary<String, ?> getProperties() {
+ return new Hashtable<>(properties);
+ }
+
+ @Override
+ public long getChangeCount() {
+ return 0;
+ }
+
+ @Override
+ public long getUpdatedChangeCount() {
+ return getChangeCount();
+ }
+
+ @Override
+ public Dictionary<String, ?> getUpdatedProperties() {
+ return getProperties();
+ }
+ };
+ }
}
diff --git a/component-dsl/src/main/java/org/apache/aries/component/dsl/internal/ConfigurationHolderImpl.java b/component-dsl/src/main/java/org/apache/aries/component/dsl/internal/ConfigurationHolderImpl.java
index 891c27d..c9bf04a 100644
--- a/component-dsl/src/main/java/org/apache/aries/component/dsl/internal/ConfigurationHolderImpl.java
+++ b/component-dsl/src/main/java/org/apache/aries/component/dsl/internal/ConfigurationHolderImpl.java
@@ -27,7 +27,7 @@
public class ConfigurationHolderImpl implements ConfigurationHolder {
private Configuration configuration;
- private AtomicReference<Dictionary<String, ?>> properties;
+ private AtomicReference<Dictionary<String, ?>> properties = new AtomicReference<>();
private AtomicLong changeCount = new AtomicLong(-1);
public ConfigurationHolderImpl(Configuration configuration) {
@@ -35,11 +35,6 @@
}
@Override
- public String getPid() {
- return configuration.getPid();
- }
-
- @Override
public Dictionary<String, ?> getProperties() {
properties.compareAndSet(null, configuration.getProperties());
@@ -47,11 +42,6 @@
}
@Override
- public String getFactoryPid() {
- return configuration.getFactoryPid();
- }
-
- @Override
public long getChangeCount() {
changeCount.compareAndSet(-1, configuration.getChangeCount());
@@ -59,13 +49,6 @@
}
@Override
- public void refresh() {
- changeCount.set(-1);
-
- properties.set(null);
- }
-
- @Override
public long getUpdatedChangeCount() {
return configuration.getChangeCount();
}
diff --git a/component-dsl/src/main/java/org/apache/aries/component/dsl/update/UpdateSelector.java b/component-dsl/src/main/java/org/apache/aries/component/dsl/update/UpdateSelector.java
index 2478759..397e349 100644
--- a/component-dsl/src/main/java/org/apache/aries/component/dsl/update/UpdateSelector.java
+++ b/component-dsl/src/main/java/org/apache/aries/component/dsl/update/UpdateSelector.java
@@ -20,4 +20,6 @@
public interface UpdateSelector {
public static final UpdateSelector ALL = new UpdateSelector() {};
+
+ public static final UpdateSelector STATIC = new UpdateSelector() {};
}
diff --git a/component-dsl/src/main/java/org/apache/aries/component/dsl/update/UpdateTuple.java b/component-dsl/src/main/java/org/apache/aries/component/dsl/update/UpdateTuple.java
index 0b7b2e3..5622638 100644
--- a/component-dsl/src/main/java/org/apache/aries/component/dsl/update/UpdateTuple.java
+++ b/component-dsl/src/main/java/org/apache/aries/component/dsl/update/UpdateTuple.java
@@ -17,6 +17,10 @@
package org.apache.aries.component.dsl.update;
+import org.apache.aries.component.dsl.OSGi;
+
+import java.util.function.BiFunction;
+
public final class UpdateTuple<T> {
public final UpdateSelector updateSelector;
@@ -30,4 +34,15 @@
public T getT() {
return t;
}
+
+ public static <S, R> OSGi<R> flatMap(
+ OSGi<UpdateTuple<S>> tuple, BiFunction<UpdateSelector, S, OSGi<R>> biFunction) {
+
+ return tuple.flatMap(updateTuple -> biFunction.apply(updateTuple.updateSelector, updateTuple.t));
+ }
+
+ public static <T> UpdateTuple<T> fromStatic(T t) {
+ return new UpdateTuple<>(UpdateSelector.STATIC, t);
+ }
+
}