You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by an...@apache.org on 2014/12/26 02:37:17 UTC
incubator-tamaya git commit: TAMAYA-34: Removed metainfo from
ConfiguredValue.
Repository: incubator-tamaya
Updated Branches:
refs/heads/master a60570e8e -> 644a7b1de
TAMAYA-34: Removed metainfo from ConfiguredValue.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/644a7b1d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/644a7b1d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/644a7b1d
Branch: refs/heads/master
Commit: 644a7b1de511cb575bd4f4c117dd289a52e6888c
Parents: a60570e
Author: anatole <an...@apache.org>
Authored: Fri Dec 26 02:37:09 2014 +0100
Committer: anatole <an...@apache.org>
Committed: Fri Dec 26 02:37:09 2014 +0100
----------------------------------------------------------------------
.../java/org/apache/tamaya/ConfiguredValue.java | 9 +-
.../core/config/DefaultConfiguredValue.java | 158 +++++++++++++++++++
2 files changed, 160 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/644a7b1d/api/src/main/java/org/apache/tamaya/ConfiguredValue.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/tamaya/ConfiguredValue.java b/api/src/main/java/org/apache/tamaya/ConfiguredValue.java
index 839e67e..e75cd51 100644
--- a/api/src/main/java/org/apache/tamaya/ConfiguredValue.java
+++ b/api/src/main/java/org/apache/tamaya/ConfiguredValue.java
@@ -28,7 +28,8 @@ import java.util.function.Predicate;
import java.util.function.Supplier;
/**
- * A accessor for a single configured value. This can be used to support values that may be reinjected, reconfigured.
+ * A accessor for a single configured value. This can be used to support values that may be reinjected, reconfigured or
+ * final.
* <h3>Implementation Requirements</h3>
* Instances of this class must be
* <ul>
@@ -84,12 +85,6 @@ public interface ConfiguredValue<T> {
void removeListener(Consumer<PropertyChangeEvent> l);
/**
- * Get some descriptive meta info on the current value.
- * @return the meta info, not null.
- */
- String getMetaInfo();
-
- /**
* Evaluate if the item value has been updated since the last access.
* @return true, if item value has been updated since the last access.
*/
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/644a7b1d/core/src/main/java/org/apache/tamaya/core/config/DefaultConfiguredValue.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/tamaya/core/config/DefaultConfiguredValue.java b/core/src/main/java/org/apache/tamaya/core/config/DefaultConfiguredValue.java
new file mode 100644
index 0000000..eae4057
--- /dev/null
+++ b/core/src/main/java/org/apache/tamaya/core/config/DefaultConfiguredValue.java
@@ -0,0 +1,158 @@
+package org.apache.tamaya.core.config;
+
+import org.apache.tamaya.ConfiguredValue;
+import org.apache.tamaya.annotation.LoadPolicy;
+
+import java.beans.PropertyChangeEvent;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.function.Supplier;
+
+/**
+ * Implementation of a configured value (in progress).
+ */
+public class DefaultConfiguredValue<T> implements ConfiguredValue<T>{
+
+ private LoadPolicy loadPolicy = LoadPolicy.INITIAL;
+ private AtomicLong lastUpdate;
+ private AtomicLong lastAccess;
+ private Optional<T> value;
+
+ public static final DefaultConfiguredValue EMPTY = new DefaultConfiguredValue(null);
+
+ /**
+ * Returns an empty {@code Optional} instance. No value is present for this
+ * Optional.
+ *
+ * @apiNote Though it may be tempting to do so, avoid testing if an object
+ * is empty by comparing with {@code ==} against instances returned by
+ * {@code Option.empty()}. There is no guarantee that it is a singleton.
+ * Instead, use {@link #isPresent()}.
+ *
+ * @param <T> Type of the non-existent value
+ * @return an empty {@code Optional}
+ */
+ public static <T> DefaultConfiguredValue<T> empty() {
+ DefaultConfiguredValue v = (DefaultConfiguredValue<T>) EMPTY;
+ return v;
+ }
+
+ private DefaultConfiguredValue(Optional<T> item){
+ this.value = item;
+ }
+
+ public static <T> ConfiguredValue<T> of(T instance){
+ return new DefaultConfiguredValue(Optional.of(instance));
+ }
+
+ public static <T> ConfiguredValue<T> ofNullable(T value){
+ return value == null ? empty() : of(value);
+ }
+
+ @Override
+ public LoadPolicy getLoadPolicy() {
+ return loadPolicy;
+ }
+
+ @Override
+ public long getLastAccess() {
+ return lastAccess.get();
+ }
+
+ @Override
+ public long getLastUpdate() {
+ return lastUpdate.get();
+ }
+
+ @Override
+ public boolean isUpdatedSince(long timestamp) {
+ return getLastUpdate()>timestamp;
+ }
+
+ @Override
+ public boolean isAccessedSince(long timestamp) {
+ return getLastAccess()>timestamp;
+ }
+
+ @Override
+ public void addListener(Consumer<PropertyChangeEvent> l) {
+// TODO
+ }
+
+ @Override
+ public void removeListener(Consumer<PropertyChangeEvent> l) {
+// TODO
+ }
+
+ @Override
+ public T get() {
+ return value.get();
+ }
+
+ @Override
+ public void update() {
+// TODO
+ }
+
+ @Override
+ public boolean isPresent() {
+ return value.isPresent();
+ }
+
+ @Override
+ public void ifPresent(Consumer<? super T> consumer) {
+ value.ifPresent(consumer);
+ }
+
+ @Override
+ public ConfiguredValue<T> filter(Predicate<? super T> predicate) {
+ Objects.requireNonNull(predicate);
+ if (!isPresent())
+ return this;
+ else
+ return predicate.test(value.get()) ? this : empty();
+ }
+
+ @Override
+ public <U> ConfiguredValue<U> map(Function<? super T, ? extends U> mapper) {
+ Objects.requireNonNull(mapper);
+ if (!isPresent())
+ return empty();
+ else {
+ return DefaultConfiguredValue.ofNullable(mapper.apply(value.get()));
+ }
+ }
+
+ @Override
+ public <U> ConfiguredValue<U> flatMap(Function<? super T, ConfiguredValue<U>> mapper) {
+ Objects.requireNonNull(mapper);
+ if (!isPresent())
+ return empty();
+ else {
+ return Objects.requireNonNull(mapper.apply(value.get()));
+ }
+ }
+
+ @Override
+ public T orElse(T other) {
+ return value.orElse(other);
+ }
+
+ @Override
+ public T orElseGet(Supplier<? extends T> other) {
+ return value.orElseGet(other);
+ }
+
+ @Override
+ public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
+ return value.orElseThrow(exceptionSupplier);
+ }
+
+ public Optional<T> toOptional(){
+ return value;
+ }
+}