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 2016/11/07 00:45:13 UTC
[2/3] incubator-tamaya-extensions git commit: TAMAYA-190: Simplified
event component, updated docs.
TAMAYA-190: Simplified event component, updated docs.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/commit/7505b007
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/tree/7505b007
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/diff/7505b007
Branch: refs/heads/master
Commit: 7505b0078e61801ba3f2cc965e2d69141b0cc547
Parents: 9f3e3cf
Author: anatole <an...@apache.org>
Authored: Mon Nov 7 01:44:54 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Mon Nov 7 01:45:08 2016 +0100
----------------------------------------------------------------------
.../org/apache/tamaya/events/ChangeType.java | 31 ---
.../tamaya/events/ConfigurationChange.java | 18 +-
.../events/ConfigurationContextChange.java | 210 -------------------
.../ConfigurationContextChangeBuilder.java | 174 ---------------
.../tamaya/events/FrozenConfiguration.java | 10 +-
.../tamaya/events/PropertySourceChange.java | 30 ---
.../events/PropertySourceChangeBuilder.java | 17 +-
.../tamaya/events/delta/package-info.java | 23 --
.../folderobserver/FileChangeListener.java | 144 -------------
.../folderobserver/FileChangeObserver.java | 33 ---
.../ObservingPropertySourceProvider.java | 209 ------------------
.../events/folderobserver/package-info.java | 24 ---
.../internal/DefaultConfigChangeObserver.java | 9 +-
...faultConfigurationContextChangeListener.java | 71 -------
...org.apache.tamaya.events.ConfigEventListener | 19 --
.../events/ChangeableGlobalPropertySource.java | 1 -
.../tamaya/events/ConfigurationChangeTest.java | 161 ++++++++++++++
.../tamaya/events/ObservedConfigTest.java | 52 +++--
.../tamaya/events/PropertySourceChangeTest.java | 180 ++++++++++++++++
.../tamaya/events/TestObservingProvider.java | 92 --------
.../events/delta/ConfigurationChangeTest.java | 163 --------------
.../delta/ConfigurationContextChangeTest.java | 138 ------------
.../events/delta/PropertySourceChangeTest.java | 209 ------------------
.../folderobserver/FileChangeListener.java | 144 +++++++++++++
.../folderobserver/FileChangeObserver.java | 33 +++
.../ObservingPropertySourceProvider.java | 190 +++++++++++++++++
.../folderobserver/TestObservingProvider.java | 91 ++++++++
.../events/folderobserver/package-info.java | 24 +++
...org.apache.tamaya.events.ConfigEventListener | 2 +-
...org.apache.tamaya.spi.PropertySourceProvider | 2 +-
30 files changed, 882 insertions(+), 1622 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/main/java/org/apache/tamaya/events/ChangeType.java
----------------------------------------------------------------------
diff --git a/modules/events/src/main/java/org/apache/tamaya/events/ChangeType.java b/modules/events/src/main/java/org/apache/tamaya/events/ChangeType.java
deleted file mode 100644
index 2059017..0000000
--- a/modules/events/src/main/java/org/apache/tamaya/events/ChangeType.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.
- */
-package org.apache.tamaya.events;
-
-/**
- * Enum describing the type of configuration change.
- */
-public enum ChangeType {
- /** Configuration hase been added. */
- NEW,
- /** Configuration hase been removed. */
- DELETED,
- /** Configuration hase been changed. */
- UPDATED,
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/main/java/org/apache/tamaya/events/ConfigurationChange.java
----------------------------------------------------------------------
diff --git a/modules/events/src/main/java/org/apache/tamaya/events/ConfigurationChange.java b/modules/events/src/main/java/org/apache/tamaya/events/ConfigurationChange.java
index c31cda2..9cdd4fc 100644
--- a/modules/events/src/main/java/org/apache/tamaya/events/ConfigurationChange.java
+++ b/modules/events/src/main/java/org/apache/tamaya/events/ConfigurationChange.java
@@ -121,6 +121,9 @@ public final class ConfigurationChange implements ConfigEvent<Configuration>, Se
public int getRemovedSize() {
int removedCount = 0;
for(PropertyChangeEvent ev:this.changes.values()){
+ if(ev.getPropertyName().startsWith("_")){
+ continue;
+ }
if(ev.getNewValue() == null){
removedCount++;
}
@@ -135,6 +138,9 @@ public final class ConfigurationChange implements ConfigEvent<Configuration>, Se
public int getAddedSize() {
int addedCount = 0;
for(PropertyChangeEvent ev:this.changes.values()){
+ if(ev.getPropertyName().startsWith("_")){
+ continue;
+ }
if(ev.getOldValue() == null &&
ev.getNewValue() != null){
addedCount++;
@@ -150,6 +156,9 @@ public final class ConfigurationChange implements ConfigEvent<Configuration>, Se
public int getUpdatedSize() {
int updatedCount = 0;
for(PropertyChangeEvent ev:this.changes.values()){
+ if(ev.getPropertyName().startsWith("_")){
+ continue;
+ }
if( ev.getOldValue()!=null && ev.getNewValue()!=null){
updatedCount++;
}
@@ -210,9 +219,12 @@ public final class ConfigurationChange implements ConfigEvent<Configuration>, Se
@Override
public String toString() {
return "ConfigurationChange{" +
- "configuration=" + configuration +
- ", version='" + version + '\'' +
- ", timestamp=" + timestamp +
+ "\n configuration-id = " + configuration.getOrDefault("_id", "-") +
+ "\n change-id = " + version +
+ "\n timestamp = " + timestamp +
+ "\n added = " + this.getAddedSize() +
+ "\n updated = " + this.getUpdatedSize() +
+ "\n removed = " + this.getRemovedSize() + '\n' +
'}';
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/main/java/org/apache/tamaya/events/ConfigurationContextChange.java
----------------------------------------------------------------------
diff --git a/modules/events/src/main/java/org/apache/tamaya/events/ConfigurationContextChange.java b/modules/events/src/main/java/org/apache/tamaya/events/ConfigurationContextChange.java
deleted file mode 100644
index 4e12d42..0000000
--- a/modules/events/src/main/java/org/apache/tamaya/events/ConfigurationContextChange.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * 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.
- */
-package org.apache.tamaya.events;
-
-import org.apache.tamaya.spi.ConfigurationContext;
-import org.apache.tamaya.spi.PropertySource;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.UUID;
-
-/**
- * Event that contains a set of current changes that were applied or can be applied.
- * This class is immutable and thread-safe. To create instances use
- * {@link PropertySourceChangeBuilder}.
- *
- * Created by Anatole on 22.10.2014.
- */
-public final class ConfigurationContextChange implements ConfigEvent<ConfigurationContext>, Serializable{
-
- private static final long serialVersionUID = 1L;
- /** The base property provider/configuration. */
- private final List<PropertySourceChange> changedPropertySources = new ArrayList<>();
- /** The base version, usable for optimistic locking. */
- private String version = UUID.randomUUID().toString();
- /** The timestamp of the change set in millis from the epoch. */
- private long timestamp = System.currentTimeMillis();
- /** The configuration context. */
- private final ConfigurationContext configurationContext;
-
- /**
- * Get an empty change set for the given provider.
- *
- * @param configurationContext context to use for creating changesets.
- * @return an empty ConfigurationContextChange instance.
- */
- public static ConfigurationContextChange emptyChangeSet(ConfigurationContext configurationContext){
- return ConfigurationContextChangeBuilder.of(configurationContext).build();
- }
-
- /**
- * Constructor used by {@link PropertySourceChangeBuilder}.
- * @param builder The builder used, not null.
- */
- ConfigurationContextChange(ConfigurationContextChangeBuilder builder) {
- this.changedPropertySources.addAll(builder.changedPropertySources);
- if(builder.version!=null){
- this.version = builder.version;
- }
- if(builder.timestamp!=null){
- this.timestamp = builder.timestamp;
- }
- this.configurationContext = builder.configurationContext;
- }
-
- @Override
- public Class<ConfigurationContext> getResourceType() {
- return ConfigurationContext.class;
- }
-
- @Override
- public ConfigurationContext getResource() {
- return configurationContext;
- }
-
- /**
- * Get the base version, usable for optimistic locking.
- * @return the base version.
- */
- @Override
- public String getVersion(){
- return version;
- }
-
- /**
- * Get the timestamp in millis from the current epoch. it is expected that the timestamp and the version are unique to
- * identify a changeset.
- * @return the timestamp, when this changeset was created.
- */
- @Override
- public long getTimestamp(){
- return timestamp;
- }
-
- /**
- * Get the changes recorded.
- * @return the recorded changes, never null.
- */
- public Collection<PropertySourceChange> getPropertySourceChanges(){
- return Collections.unmodifiableCollection(this.changedPropertySources);
- }
-
- /**
- * Get the property source updates.
- * @return the recorded changes, never null.
- */
- public Collection<PropertySourceChange> getPropertySourceUpdates(){
- List<PropertySourceChange> result = new ArrayList<>();
- for (PropertySourceChange pc : this.changedPropertySources) {
- if (pc.getChangeType() == ChangeType.UPDATED) {
- result.add(pc);
- }
- }
- return result;
-// return Collections.unmodifiableCollection(this.changedPropertySources).stream()
-// .filter(pc -> pc.getChangeType()==ChangeType.UPDATED).collect(Collectors.toList());
- }
-
- /**
- * Get the property sources to be removed.
- * @return the recorded changes, never null.
- */
- public Collection<PropertySource> getRemovedPropertySources(){
- List<PropertySource> result = new ArrayList<>();
- for (PropertySourceChange pc : this.changedPropertySources) {
- if (pc.getChangeType() == ChangeType.DELETED) {
- result.add(pc.getResource());
- }
- }
- return result;
-// return getPropertySourceChanges().stream().filter(pc -> pc.getChangeType()==ChangeType.DELETED).
-// map(ps -> ps.getPropertySource()).collect(Collectors.toList());
- }
-
- /**
- * Get the property sources to be added.
- * @return the recorded changes, never null.
- */
- public Collection<PropertySource> getAddedPropertySources(){
- List<PropertySource> result = new ArrayList<>();
- for (PropertySourceChange pc : this.changedPropertySources) {
- if (pc.getChangeType() == ChangeType.NEW) {
- result.add(pc.getResource());
- }
- }
- return result;
-// return getPropertySourceChanges().stream().filter(pc -> pc.getChangeType()==ChangeType.NEW).
-// map(ps -> ps.getPropertySource()).collect(Collectors.toList());
- }
-
- /**
- * Get the property sources to be updated.
- * @return the recorded changes, never null.
- */
- public Collection<PropertySource> getUpdatedPropertySources(){
- List<PropertySource> result = new ArrayList<>();
- for (PropertySourceChange pc : this.changedPropertySources) {
- if (pc.getChangeType() == ChangeType.UPDATED) {
- result.add(pc.getResource());
- }
- }
- return result;
-// return getPropertySourceChanges().stream().filter(pc -> pc.getChangeType()==ChangeType.UPDATED).
-// map(ps -> ps.getPropertySource()).collect(Collectors.toList());
- }
-
- /**
- * Checks if the given propertySource is affected (added, changed or removed).
- * @param propertySource the propertySource, not null.
- * @return true, if the given propertySource ia affected.
- */
- public boolean isAffected(PropertySource propertySource) {
- for (PropertySourceChange ps : this.changedPropertySources) {
- if (ps.getResource() == propertySource ||
- ps.getResource().getName().equals(propertySource.getName())) {
- return true;
- }
- }
- return false;
-// return this.changedPropertySources.stream().filter(ps -> ps.getPropertySource()==propertySource ||
-// ps.getPropertySource().getName().equals(propertySource.getName())).findAny().isPresent();
- }
-
- /**
- * CHecks if the current change set does not contain any changes.
- * @return tru, if the change set is empty.
- */
- public boolean isEmpty(){
- return this.changedPropertySources.isEmpty();
- }
-
-
- @Override
- public String toString() {
- return "ConfigurationContextChange{" +
- "changedPropertySources=" + changedPropertySources +
- ", version='" + version + '\'' +
- ", timestamp=" + timestamp +
- '}';
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/main/java/org/apache/tamaya/events/ConfigurationContextChangeBuilder.java
----------------------------------------------------------------------
diff --git a/modules/events/src/main/java/org/apache/tamaya/events/ConfigurationContextChangeBuilder.java b/modules/events/src/main/java/org/apache/tamaya/events/ConfigurationContextChangeBuilder.java
deleted file mode 100644
index b586428..0000000
--- a/modules/events/src/main/java/org/apache/tamaya/events/ConfigurationContextChangeBuilder.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * 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.
- */
-package org.apache.tamaya.events;
-
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.spi.ConfigurationContext;
-import org.apache.tamaya.spi.PropertySource;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-/**
- * Models a set of current changes applied to a {@link org.apache.tamaya.spi.PropertySource}. Consumers of these events
- * can observe changes to property sources and
- * <ol>
- * <li>check if their current configuration instance ({@link org.apache.tamaya.spi.ConfigurationContext}
- * contains the changed {@link org.apache.tamaya.spi.PropertySource} (Note: the reference to a property source is never affected by a
- * change, it is the data of the property source only).</li>
- * <li>if so, a corresponding action may be taken, such as reevaluating the configuration values (depending on
- * the update policy) or reevaluating the complete {@link org.apache.tamaya.Configuration} to create a change
- * event on configuration level.
- * </ol>
- */
-public final class ConfigurationContextChangeBuilder {
- /**
- * The recorded changes.
- */
- final List<PropertySourceChange> changedPropertySources = new ArrayList<>();
- /**
- * The version configured, or null, for generating a default.
- */
- String version;
- /**
- * The optional timestamp in millis of this epoch.
- */
- Long timestamp;
-
- final ConfigurationContext configurationContext;
-
- /**
- * Constructor.
- */
- private ConfigurationContextChangeBuilder(ConfigurationContext configurationContext) {
- this.configurationContext = Objects.requireNonNull(configurationContext);
- }
-
- /**
- * Just creates a new ConfigurationContextBuilder using the current COnfigurationContext has root resource.
- * @return a new ConfigurationContextBuilder, never null.
- */
- public static ConfigurationContextChangeBuilder of() {
- return of(ConfigurationProvider.getConfigurationContext());
- }
-
- /**
- * Creates a new instance current this builder.
- *
- * @param context context to use for creating changesets.
- * @return the builder for chaining.
- */
- public static ConfigurationContextChangeBuilder of(ConfigurationContext context) {
- return new ConfigurationContextChangeBuilder(context);
- }
-
- /**
- * Apply a version/UUID to the set being built.
- * @param version the version to apply, or null, to let the system generate a version for you.
- * @return the builder for chaining.
- */
- public ConfigurationContextChangeBuilder setVersion(String version) {
- this.version = version;
- return this;
- }
-
- /**
- * Apply given timestamp to the set being built.
- * @param timestamp timestamp to set.
- * @return the builder for chaining.
- */
- public ConfigurationContextChangeBuilder setTimestamp(long timestamp) {
- this.timestamp = timestamp;
- return this;
- }
-
- /**
- * This method records all changes to be applied to the base property provider/configuration to
- * achieve the given target state.
- *
- * @param propertySource the new target state, not null.
- * @return the builder for chaining.
- */
- public ConfigurationContextChangeBuilder newPropertySource(PropertySource propertySource) {
- this.changedPropertySources.add(PropertySourceChange.ofAdded(propertySource));
- return this;
- }
-
- /**
- * This method records all changes to be applied to the base property provider/configuration to
- * achieve the given target state.
- *
- * @param propertySource the new target state, not null.
- * @return the builder for chaining.
- */
- public ConfigurationContextChangeBuilder removedPropertySource(PropertySource propertySource) {
- this.changedPropertySources.add(PropertySourceChange.ofDeleted(propertySource));
- return this;
- }
-
- /**
- * This method records all changes to be applied to the base property provider/configuration to
- * achieve the given target state.
- *
- * @param propertySourceChange the change state, not null.
- * @return the builder for chaining.
- */
- public ConfigurationContextChangeBuilder changedPropertySource(PropertySourceChange propertySourceChange) {
- this.changedPropertySources.add(Objects.requireNonNull(propertySourceChange));
- return this;
- }
-
- /**
- * Checks if the change set is empty, i.e. does not contain any changes.
- *
- * @return true, if the set is empty.
- */
- public boolean isEmpty() {
- return this.changedPropertySources.isEmpty();
- }
-
- /**
- * Resets this change set instance. This will clear all changes done to this builder, so the
- * set will be empty.
- */
- public void reset() {
- this.changedPropertySources.clear();
- }
-
- /**
- * Builds the corresponding change set.
- *
- * @return the new change set, never null.
- */
- public ConfigurationContextChange build() {
- return new ConfigurationContextChange(this);
- }
-
- /*
- * (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- @Override
- public String toString() {
- return "ConfigurationContextChangeBuilder [propertySources=" + changedPropertySources + "]";
- }
-
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/main/java/org/apache/tamaya/events/FrozenConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/events/src/main/java/org/apache/tamaya/events/FrozenConfiguration.java b/modules/events/src/main/java/org/apache/tamaya/events/FrozenConfiguration.java
index 304ddba..2a4540c 100644
--- a/modules/events/src/main/java/org/apache/tamaya/events/FrozenConfiguration.java
+++ b/modules/events/src/main/java/org/apache/tamaya/events/FrozenConfiguration.java
@@ -30,10 +30,7 @@ import org.apache.tamaya.spi.ConversionContext;
import org.apache.tamaya.spi.PropertyConverter;
import java.io.Serializable;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -56,7 +53,10 @@ public final class FrozenConfiguration implements Configuration, Serializable {
*/
private FrozenConfiguration(Configuration config) {
this.properties.putAll(config.getProperties());
- this.properties.put("[meta]frozenAt", String.valueOf(System.currentTimeMillis()));
+ this.properties.put("_frozenAt", String.valueOf(System.currentTimeMillis()));
+ if(!this.properties.containsKey("_id")) {
+ this.properties.put("_id", UUID.randomUUID().toString());
+ }
this.properties = Collections.unmodifiableMap(this.properties);
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/main/java/org/apache/tamaya/events/PropertySourceChange.java
----------------------------------------------------------------------
diff --git a/modules/events/src/main/java/org/apache/tamaya/events/PropertySourceChange.java b/modules/events/src/main/java/org/apache/tamaya/events/PropertySourceChange.java
index 063612c..e7782a0 100644
--- a/modules/events/src/main/java/org/apache/tamaya/events/PropertySourceChange.java
+++ b/modules/events/src/main/java/org/apache/tamaya/events/PropertySourceChange.java
@@ -46,8 +46,6 @@ public final class PropertySourceChange implements ConfigEvent<PropertySource>,
private long timestamp = System.currentTimeMillis();
/** The recorded changes. */
private final Map<String,PropertyChangeEvent> changes = new HashMap<>();
- /** The overall type of change. */
- private final ChangeType changeType;
/**
* Constructor used by {@link PropertySourceChangeBuilder}.
@@ -64,15 +62,6 @@ public final class PropertySourceChange implements ConfigEvent<PropertySource>,
if(builder.timestamp!=null){
this.timestamp = builder.timestamp;
}
- this.changeType = builder.changeType;
- }
-
- /**
- * Gets the type of change for this PropertySource.
- * @return the type of change for this PropertySource, never null.
- */
- public ChangeType getChangeType(){
- return this.changeType;
}
@Override
@@ -212,28 +201,9 @@ public final class PropertySourceChange implements ConfigEvent<PropertySource>,
}
- /**
- * Create a change event for a new PropertySource that was added.
- * @param propertySource the new property source, not null.
- * @return a new PropertySourceChange, representing a PropertySource that was added.
- */
- public static PropertySourceChange ofAdded(PropertySource propertySource) {
- return PropertySourceChangeBuilder.of(propertySource, ChangeType.NEW).build();
- }
-
- /**
- * Create a change event for a deleted PropertySource.
- * @param propertySource the deleted property source, not null.
- * @return a new PropertySourceChange, representing a PropertySource that was deleted.
- */
- public static PropertySourceChange ofDeleted(PropertySource propertySource) {
- return PropertySourceChangeBuilder.of(propertySource, ChangeType.DELETED).build();
- }
-
@Override
public String toString() {
return "PropertySourceChange{" +
- "changeType=" + changeType +
", propertySource=" + propertySource +
", version='" + version + '\'' +
", timestamp=" + timestamp +
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/main/java/org/apache/tamaya/events/PropertySourceChangeBuilder.java
----------------------------------------------------------------------
diff --git a/modules/events/src/main/java/org/apache/tamaya/events/PropertySourceChangeBuilder.java b/modules/events/src/main/java/org/apache/tamaya/events/PropertySourceChangeBuilder.java
index fa2cf5e..4c873bd 100644
--- a/modules/events/src/main/java/org/apache/tamaya/events/PropertySourceChangeBuilder.java
+++ b/modules/events/src/main/java/org/apache/tamaya/events/PropertySourceChangeBuilder.java
@@ -60,29 +60,23 @@ public final class PropertySourceChangeBuilder {
*/
Long timestamp;
- /** The type of change. */
- ChangeType changeType;
-
/**
* Constructor.
*
* @param source the underlying configuration/provider, not null.
- * @param changeType kind of change.
*/
- private PropertySourceChangeBuilder(PropertySource source, ChangeType changeType) {
+ private PropertySourceChangeBuilder(PropertySource source) {
this.source = Objects.requireNonNull(source);
- this.changeType = Objects.requireNonNull(changeType);
}
/**
* Creates a new instance of this builder.
*
* @param source the underlying property provider/configuration, not null.
- * @param changeType kind of change.
* @return the builder for chaining.
*/
- public static PropertySourceChangeBuilder of(PropertySource source, ChangeType changeType) {
- return new PropertySourceChangeBuilder(source, changeType);
+ public static PropertySourceChangeBuilder of(PropertySource source) {
+ return new PropertySourceChangeBuilder(source);
}
/**
@@ -235,10 +229,6 @@ public final class PropertySourceChangeBuilder {
this.delta.clear();
}
- public PropertySourceChangeBuilder setChangeType(ChangeType changeType) {
- this.changeType = changeType;
- return this;
- }
/**
* Builds the corresponding change set.
@@ -259,5 +249,4 @@ public final class PropertySourceChangeBuilder {
", delta=" + delta + "]";
}
-
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/main/java/org/apache/tamaya/events/delta/package-info.java
----------------------------------------------------------------------
diff --git a/modules/events/src/main/java/org/apache/tamaya/events/delta/package-info.java b/modules/events/src/main/java/org/apache/tamaya/events/delta/package-info.java
deleted file mode 100644
index 2006717..0000000
--- a/modules/events/src/main/java/org/apache/tamaya/events/delta/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * 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.
- */
-/**
- * This package contains artifacts to describe the changes (delta) of a
- * Configuration or a PropertySource.
- */
-package org.apache.tamaya.events.delta;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/main/java/org/apache/tamaya/events/folderobserver/FileChangeListener.java
----------------------------------------------------------------------
diff --git a/modules/events/src/main/java/org/apache/tamaya/events/folderobserver/FileChangeListener.java b/modules/events/src/main/java/org/apache/tamaya/events/folderobserver/FileChangeListener.java
deleted file mode 100644
index 283719e..0000000
--- a/modules/events/src/main/java/org/apache/tamaya/events/folderobserver/FileChangeListener.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * 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.
- */
-package org.apache.tamaya.events.folderobserver;
-
-import org.apache.tamaya.ConfigException;
-
-import java.io.IOException;
-import java.nio.file.FileSystem;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.nio.file.StandardWatchEventKinds;
-import java.nio.file.WatchEvent;
-import java.nio.file.WatchKey;
-import java.nio.file.WatchService;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-
-/**
- * Class that has the responsibility to watch the folder and then publish the changes to a
- * {@link org.apache.tamaya.events.PropertySourceChange}.
- * @see ObservingPropertySourceProvider
- * This listener will wait to events and wait to one second to watch again.
- * <p>If new file was created or modified will commit from this file.</p>
- * <p>If a file was removed then the listener will load using all files left.</p>
- * @author otaviojava
- */
-class FileChangeListener implements Runnable {
-
- private static final Logger LOGGER = Logger.getLogger(FileChangeListener.class.getName());
-
- private final WatchService watchService;
-
- private final FileChangeObserver observer;
-
- private final Path directory;
-
- private volatile boolean running = true;
-
- public FileChangeListener(Path directory, FileChangeObserver observer) {
- this.observer = observer;
- this.directory = directory;
- this.watchService = getWatchService();
-
- if (watchService!=null && directory!=null) {
- try {
- directory.register(watchService,
- StandardWatchEventKinds.ENTRY_DELETE,
- StandardWatchEventKinds.ENTRY_MODIFY,
- StandardWatchEventKinds.ENTRY_CREATE);
- } catch (IOException e) {
- throw new FileChangeListenerException("An error happened when does try to registry to watch the folder", e);
- }
- }
- }
-
- /**
- * Stops the listener service from observing the target directory.
- */
- public void stopListener(){
- running = false;
- }
-
- @Override
- public void run() {
- if (watchService!=null || directory!=null) {
- return;
- }
- while (running) {
- watchFolder();
- }
- }
-
- /**
- * Start watching the current folder.
- */
- private void watchFolder() {
- try {
- WatchKey watckKey = watchService.take();
- for (WatchEvent<?> event : watckKey.pollEvents()) {
- Path filePath = (Path) watckKey.watchable();
- if(event.kind().equals(StandardWatchEventKinds.ENTRY_CREATE)||
- event.kind().equals(StandardWatchEventKinds.ENTRY_MODIFY) ||
- event.kind().equals(StandardWatchEventKinds.ENTRY_DELETE)){
- LOGGER.info("File change detected in: " + filePath.getFileName());
- observer.directoryChanged(filePath);
- }
- }
- watckKey.reset();
- Thread.sleep(1_000L);
- } catch (Exception e) {
- throw new FileChangeListenerException("An error happened when does try to watch the folder", e);
- }
- }
-
- /**
- * Get the watch service.
- * @return the watch service, or null, if the watch service is not supported.
- */
- private WatchService getWatchService() {
- try {
- FileSystem fileSystem = Paths.get(".").getFileSystem();
- return fileSystem.newWatchService();
- } catch (IOException e) {
- LOGGER.log(Level.WARNING, "The file System does not supports WatchService", e);
- return null;
- }
-
- }
-
- /**
- * Exception if file listening fails.
- */
- static class FileChangeListenerException extends ConfigException {
- /** Serialversion UID. */
- private static final long serialVersionUID = -8965486770881001513L;
-
- /**
- * Constructor.
- * @param message a message
- * @param cause an (optional) root cause.
- */
- public FileChangeListenerException(String message, Throwable cause) {
- super(message, cause);
- }
-
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/main/java/org/apache/tamaya/events/folderobserver/FileChangeObserver.java
----------------------------------------------------------------------
diff --git a/modules/events/src/main/java/org/apache/tamaya/events/folderobserver/FileChangeObserver.java b/modules/events/src/main/java/org/apache/tamaya/events/folderobserver/FileChangeObserver.java
deleted file mode 100644
index 63d25cd..0000000
--- a/modules/events/src/main/java/org/apache/tamaya/events/folderobserver/FileChangeObserver.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.
- */
-package org.apache.tamaya.events.folderobserver;
-
-import java.nio.file.Path;
-
-/**
- * Observer to be used in {@link FileChangeListener} to commit all configurations and provider.
- */
-interface FileChangeObserver {
- /**
- * Called when a file has been modified.
- * @param path the file path, not null.
- */
- void directoryChanged(Path path);
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/main/java/org/apache/tamaya/events/folderobserver/ObservingPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/modules/events/src/main/java/org/apache/tamaya/events/folderobserver/ObservingPropertySourceProvider.java b/modules/events/src/main/java/org/apache/tamaya/events/folderobserver/ObservingPropertySourceProvider.java
deleted file mode 100644
index feddd70..0000000
--- a/modules/events/src/main/java/org/apache/tamaya/events/folderobserver/ObservingPropertySourceProvider.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * 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.
- */
-package org.apache.tamaya.events.folderobserver;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.events.ConfigEventManager;
-import org.apache.tamaya.events.ConfigurationContextChange;
-import org.apache.tamaya.events.ConfigurationContextChangeBuilder;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertySourceProvider;
-import org.apache.tamaya.spisupport.BasePropertySource;
-
-/**
- * This implementation runs in a folder taking up all files compatible with the given
- * ConfigurationFormats. When a file is added, deleted or modified the PropertySourceProvider
- * will adapt the changes automatically and trigger according
- * {@link org.apache.tamaya.events.PropertySourceChange} events.
- * The default folder is META-INF/config, but you can change it via an absolute path in the
- * "-Dtamaya.configdir" parameter.
- */
-public class ObservingPropertySourceProvider implements PropertySourceProvider, FileChangeObserver {
- /**
- * The logger.
- */
- private static final Logger LOG = Logger.getLogger(ObservingPropertySourceProvider.class.getName());
- /**
- * The current active property sources of this provider.
- */
- private final List<PropertySource> propertySources = Collections.synchronizedList(new LinkedList<PropertySource>());
- /**
- * The thread pool used.
- */
- private final ExecutorService executor = Executors.newSingleThreadExecutor();
-
- /**
- * Constructorm using an explicit directory, ignoring all kind of configuration, if set.
- *
- * @param directory the target directory. If null, the default configuration and system property are used.
- */
- public ObservingPropertySourceProvider(Path directory) {
- if (directory == null) {
- directory = getDirectory();
- }
- if (directory!=null){
- synchronized (this.propertySources) {
- this.propertySources.addAll(readConfiguration(directory));
- }
- final Runnable runnable = new FileChangeListener(directory, this);
- executor.execute(runnable);
- } else {
- executor.shutdown();
- }
- }
-
- /**
- * Read the initial configuration.
- *
- * @param directory the target directory, not null.
- */
- private List<PropertySource> readConfiguration(Path directory) {
- final List<PropertySource> result = new ArrayList<>();
- try {
- synchronized (propertySources) {
- for (final Path path : Files.newDirectoryStream(directory, "*")) {
- result.addAll(getPropertySources(path));
- }
- return result;
- }
- } catch (final IOException e) {
- LOG.log(Level.WARNING, "Failed to read configuration from dir: " + directory, e);
- }
- return result;
- }
-
- /**
- * Read property sources from the given file.
- *
- * @param file source of the property sources.
- * @return property sources from the given file.
- */
- protected Collection<PropertySource> getPropertySources(final Path file) {
- return Arrays.asList(new PropertySource[]{new BasePropertySource() {
- private final Map<String,String> props = readProperties(file);
-
- @Override
- public Map<String, String> getProperties() {
- return props;
- }
- }});
- }
-
- /**
- * Load a single file.
- *
- * @param file the file, not null.
- * @return properties as read from the given file.
- */
- protected static Map<String,String> readProperties(Path file) {
- try (InputStream is = file.toUri().toURL().openStream()){
- final Properties props = new Properties();
- props.load(is);
- final Map<String,String> result = new HashMap<>();
- for(final Map.Entry<Object,Object> en:props.entrySet()){
- result.put(String.valueOf(en.getKey()), String.valueOf(en.getValue()));
- }
- return result;
- } catch (final Exception e) {
- LOG.log(Level.INFO, "Error reading file: " + file.toString() +
- ", using format: properties", e);
- }
- return Collections.emptyMap();
- }
-
-
- /**
- * Evaluates the target directory from system property (tamaya.configdir) or classpath.
- *
- * @return the directory to be read, or null.
- */
- private Path getDirectory() {
- final String absolutePath = System.getProperty("tamaya.configdir");
- if (null!=absolutePath) {
- final Path path = Paths.get(absolutePath);
- if (Files.isDirectory(path)) {
- return path;
- }
- }
- final URL resource = ObservingPropertySourceProvider.class.getResource("/META-INF/config/");
- if (null!=resource) {
- try {
- return Paths.get(resource.toURI());
- } catch (final URISyntaxException e) {
- throw new ConfigException("An error to find the directory to watch", e);
- }
- }
- return null;
- }
-
-
- @Override
- public void directoryChanged(Path directory) {
- synchronized (this.propertySources) {
- final List<PropertySource> existingPropertySources = new ArrayList<>(propertySources);
- propertySources.clear();
- final Collection<PropertySource> sourcesRead = readConfiguration(directory);
- this.propertySources.addAll(sourcesRead);
- triggerConfigChange(existingPropertySources, propertySources);
- }
- }
-
-
- private void triggerConfigChange(List<PropertySource> originalPropertySources,
- List<PropertySource> newPropertySources) {
- final ConfigurationContextChangeBuilder b = ConfigurationContextChangeBuilder.of();
- for (final PropertySource ps : originalPropertySources) {
- b.removedPropertySource(ps);
- }
- for (final PropertySource ps : newPropertySources) {
- b.newPropertySource(ps);
- }
- final ConfigurationContextChange changeEvent = b.build();
- LOG.fine("Trigger Config Context Change: " + changeEvent);
- ConfigEventManager.fireEvent(changeEvent);
- }
-
- @Override
- public Collection<PropertySource> getPropertySources() {
- synchronized (propertySources) {
- return new ArrayList<>(this.propertySources);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/main/java/org/apache/tamaya/events/folderobserver/package-info.java
----------------------------------------------------------------------
diff --git a/modules/events/src/main/java/org/apache/tamaya/events/folderobserver/package-info.java b/modules/events/src/main/java/org/apache/tamaya/events/folderobserver/package-info.java
deleted file mode 100644
index 347f2d8..0000000
--- a/modules/events/src/main/java/org/apache/tamaya/events/folderobserver/package-info.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * 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.
- */
-/**
- * This package contains code to observe a folder for file changes and to trigger
- * corresponding events, that are handled by an according {@link org.apache.tamaya.events.folderobserver.ObservingPropertySourceProvider}
- * instance.
- */
-package org.apache.tamaya.events.folderobserver;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/main/java/org/apache/tamaya/events/internal/DefaultConfigChangeObserver.java
----------------------------------------------------------------------
diff --git a/modules/events/src/main/java/org/apache/tamaya/events/internal/DefaultConfigChangeObserver.java b/modules/events/src/main/java/org/apache/tamaya/events/internal/DefaultConfigChangeObserver.java
index f4457b2..34bf5eb 100644
--- a/modules/events/src/main/java/org/apache/tamaya/events/internal/DefaultConfigChangeObserver.java
+++ b/modules/events/src/main/java/org/apache/tamaya/events/internal/DefaultConfigChangeObserver.java
@@ -62,17 +62,18 @@ public class DefaultConfigChangeObserver {
public void checkConfigurationUpdate() {
LOG.finest("Checking configuration for changes...");
- FrozenConfiguration newConfig = FrozenConfiguration.of(ConfigurationProvider.getConfiguration());
+ FrozenConfiguration frozenConfig = FrozenConfiguration.of(ConfigurationProvider.getConfiguration());
ConfigurationChange changes;
if(lastConfig==null){
- changes = ConfigurationChangeBuilder.of(newConfig).putAll(newConfig.getProperties())
+ lastConfig = frozenConfig;
+ changes = ConfigurationChangeBuilder.of().putAll(frozenConfig.getProperties())
.build();
}else{
- changes = ConfigurationChangeBuilder.of(lastConfig).addChanges(newConfig)
+ changes = ConfigurationChangeBuilder.of(lastConfig).addChanges(frozenConfig)
.build();
}
if(!changes.isEmpty()) {
- LOG.info("Identified configuration changes, publishing change event...");
+ LOG.info("Identified configuration changes, publishing changes:\n" + changes);
ConfigEventManager.fireEvent(changes);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/main/java/org/apache/tamaya/events/internal/DefaultConfigurationContextChangeListener.java
----------------------------------------------------------------------
diff --git a/modules/events/src/main/java/org/apache/tamaya/events/internal/DefaultConfigurationContextChangeListener.java b/modules/events/src/main/java/org/apache/tamaya/events/internal/DefaultConfigurationContextChangeListener.java
deleted file mode 100644
index 8a9ff64..0000000
--- a/modules/events/src/main/java/org/apache/tamaya/events/internal/DefaultConfigurationContextChangeListener.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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.
- */
-package org.apache.tamaya.events.internal;
-
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.events.ConfigEvent;
-import org.apache.tamaya.events.ConfigEventListener;
-import org.apache.tamaya.events.ConfigurationContextChange;
-import org.apache.tamaya.spi.ConfigurationContext;
-import org.apache.tamaya.spi.ConfigurationContextBuilder;
-import org.apache.tamaya.spi.PropertySource;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Default ConfigEventListener for ConfigurationContextChange events that updates the current context, if resources were
- * affected.
- */
-public class DefaultConfigurationContextChangeListener implements ConfigEventListener {
-
- private static final Logger LOG = Logger.getLogger(DefaultConfigurationContextChangeListener.class.getName());
-
- @Override
- public void onConfigEvent(ConfigEvent<?> event) {
- if(event.getClass() == ConfigurationContextChange.class) {
- ConfigurationContextChange contextChange = (ConfigurationContextChange) event;
- ConfigurationContext context = ConfigurationProvider.getConfigurationContext();
- List<PropertySource> affectedPropertySources = new ArrayList<>();
- for (PropertySource ps : context.getPropertySources()) {
- if (contextChange.isAffected(ps)) {
- affectedPropertySources.add(ps);
- }
- }
- ConfigurationContextBuilder newContextBuilder = ConfigurationProvider.getConfigurationContextBuilder()
- .setContext(context);
- if (!affectedPropertySources.isEmpty()) {
- Set<String> propertySourceNames = new HashSet<>();
- newContextBuilder.removePropertySources(contextChange.getRemovedPropertySources());
- }
- newContextBuilder.addPropertySources(contextChange.getAddedPropertySources());
- newContextBuilder.addPropertySources(contextChange.getUpdatedPropertySources());
- ConfigurationContext newContext = newContextBuilder.build();
- try {
- ConfigurationProvider.setConfigurationContext(newContext);
- } catch (Exception e) {
- LOG.log(Level.INFO, "Failed to update the current ConfigurationContext due to config model changes", e);
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/main/resources/META-INF/services/org.apache.tamaya.events.ConfigEventListener
----------------------------------------------------------------------
diff --git a/modules/events/src/main/resources/META-INF/services/org.apache.tamaya.events.ConfigEventListener b/modules/events/src/main/resources/META-INF/services/org.apache.tamaya.events.ConfigEventListener
deleted file mode 100644
index f9942c1..0000000
--- a/modules/events/src/main/resources/META-INF/services/org.apache.tamaya.events.ConfigEventListener
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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 current 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.
-#
-org.apache.tamaya.events.internal.DefaultConfigurationContextChangeListener
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/test/java/org/apache/tamaya/events/ChangeableGlobalPropertySource.java
----------------------------------------------------------------------
diff --git a/modules/events/src/test/java/org/apache/tamaya/events/ChangeableGlobalPropertySource.java b/modules/events/src/test/java/org/apache/tamaya/events/ChangeableGlobalPropertySource.java
index 0384064..476aaf6 100644
--- a/modules/events/src/test/java/org/apache/tamaya/events/ChangeableGlobalPropertySource.java
+++ b/modules/events/src/test/java/org/apache/tamaya/events/ChangeableGlobalPropertySource.java
@@ -20,7 +20,6 @@ package org.apache.tamaya.events;
import org.apache.tamaya.core.propertysource.BasePropertySource;
-import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/test/java/org/apache/tamaya/events/ConfigurationChangeTest.java
----------------------------------------------------------------------
diff --git a/modules/events/src/test/java/org/apache/tamaya/events/ConfigurationChangeTest.java b/modules/events/src/test/java/org/apache/tamaya/events/ConfigurationChangeTest.java
new file mode 100644
index 0000000..380c9e7
--- /dev/null
+++ b/modules/events/src/test/java/org/apache/tamaya/events/ConfigurationChangeTest.java
@@ -0,0 +1,161 @@
+/*
+ * 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.
+ */
+package org.apache.tamaya.events;
+
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.ConfigurationProvider;
+import org.junit.Test;
+
+import java.util.Map;
+
+import static org.junit.Assert.*;
+
+/**
+ * Test class for {@link ConfigurationChange}.
+ */
+public class ConfigurationChangeTest {
+
+ @Test
+ public void testEmptyChangeSet() throws Exception {
+ ConfigurationChange change = ConfigurationChange.emptyChangeSet(ConfigurationProvider.getConfiguration());
+ assertNotNull(change);
+ assertTrue(change.isEmpty());
+ }
+
+ @Test
+ public void testGetConfiguration() throws Exception {
+ Configuration config = ConfigurationProvider.getConfiguration();
+ ConfigurationChange change = ConfigurationChangeBuilder.of(config).build();
+ assertNotNull(change);
+ assertTrue(change.getUpdatedSize()==0);
+ assertTrue(change.getAddedSize()==0);
+ assertTrue(change.getRemovedSize()==0);
+ assertTrue(change.getChanges().size()==0);
+ for (Map.Entry<String, String> en : config.getProperties().entrySet()) {
+ if (!"[meta]frozenAt".equals(en.getKey())) {
+ if(en.getKey().contains("random.new")){ // dynamic generated value!
+ continue;
+ }
+ assertEquals("Error for " + en.getKey(), en.getValue(), change.getResource().get(en.getKey()));
+ }
+ }
+ }
+
+ @Test
+ public void testGetVersion() throws Exception {
+ Configuration config = ConfigurationProvider.getConfiguration();
+ ConfigurationChange change = ConfigurationChangeBuilder.of(config).build();
+ assertNotNull(change.getVersion());
+ change = ConfigurationChangeBuilder.of(config).setVersion("version2").build();
+ assertNotNull(change.getVersion());
+ assertEquals("version2", change.getVersion());
+ }
+
+ @Test
+ public void testGetTimestamp() throws Exception {
+ Configuration config = ConfigurationProvider.getConfiguration();
+ ConfigurationChange change = ConfigurationChangeBuilder.of(config).build();
+ assertTrue((System.currentTimeMillis() - change.getTimestamp()) <= 10L);
+ change = ConfigurationChangeBuilder.of(config).setTimestamp(10L).build();
+ assertEquals(10L, change.getTimestamp());
+ }
+
+ @Test
+ public void testGetEvents() throws Exception {
+ Configuration config = ConfigurationProvider.getConfiguration();
+ ConfigurationChange change = ConfigurationChangeBuilder.of(config).removeKey("key1", "key2").build();
+ assertTrue(change.getChanges().size() == 2);
+ change = ConfigurationChangeBuilder.of(config).addChange("key1Added", "value1Added").build();
+ assertTrue(change.getChanges().size() == 1);
+ }
+
+ @Test
+ public void testGetRemovedSize() throws Exception {
+ Configuration config = ConfigurationProvider.getConfiguration();
+ ConfigurationChange change = ConfigurationChangeBuilder.of(config).removeKey("java.version", "key2").build();
+ assertTrue(change.getRemovedSize() == 2);
+ assertTrue(change.getAddedSize() == 0);
+ }
+
+ @Test
+ public void testGetAddedSize() throws Exception {
+ Configuration config = ConfigurationProvider.getConfiguration();
+ ConfigurationChange change = ConfigurationChangeBuilder.of(config).addChange("key1", "key2").build();
+ assertTrue(change.getAddedSize() == 1);
+ assertTrue(change.getRemovedSize() == 0);
+ }
+
+ @Test
+ public void testGetUpdatedSize() throws Exception {
+ Configuration config = ConfigurationProvider.getConfiguration();
+ ConfigurationChange change = ConfigurationChangeBuilder.of(config).addChange("java.version", "1.8").build();
+ assertTrue(change.getUpdatedSize() == 1);
+ }
+
+ @Test
+ public void testIsRemoved() throws Exception {
+ Configuration config = ConfigurationProvider.getConfiguration();
+ ConfigurationChange change = ConfigurationChangeBuilder.of(config).removeKey("java.version").build();
+ assertTrue(change.isRemoved("java.version"));
+ }
+
+ @Test
+ public void testIsAdded() throws Exception {
+ Configuration config = ConfigurationProvider.getConfiguration();
+ ConfigurationChange change = ConfigurationChangeBuilder.of(config).addChange("key1", "key2").build();
+ assertTrue(change.isAdded("key1"));
+ }
+
+ @Test
+ public void testIsUpdated() throws Exception {
+ Configuration config = ConfigurationProvider.getConfiguration();
+ ConfigurationChange change = ConfigurationChangeBuilder.of(config).addChange("java.version", "1.8").build();
+ assertTrue(change.isUpdated("java.version"));
+ }
+
+ @Test
+ public void testContainsKey() throws Exception {
+ Configuration config = ConfigurationProvider.getConfiguration();
+ ConfigurationChange change = ConfigurationChangeBuilder.of(config).addChange("key1", "key2").build();
+ assertTrue(change.isKeyAffected("key1"));
+ assertFalse(change.isKeyAffected("key2"));
+ change = ConfigurationChangeBuilder.of(config).removeKey("java.version").build();
+ assertFalse(change.isKeyAffected("java.version"));
+ assertFalse(change.isKeyAffected("key2"));
+ }
+
+ @Test
+ public void testIsEmpty() throws Exception {
+ Configuration config = ConfigurationProvider.getConfiguration();
+ ConfigurationChange change = ConfigurationChangeBuilder.of(config).build();
+ assertTrue(change.isEmpty());
+ }
+
+ @Test
+ public void testToString() throws Exception {
+ Configuration config = ConfigurationProvider.getConfiguration();
+ ConfigurationChange change = ConfigurationChangeBuilder.of(config).addChange("key1", "key2").build();
+ change = ConfigurationChangeBuilder.of(config).removeKey("java.version").build();
+ assertTrue(change.toString().contains("timestamp"));
+ assertTrue(change.toString().contains("change-id"));
+ assertTrue(change.toString().contains("configuration-id"));
+ assertFalse(change.toString().contains("key1"));
+ assertFalse(change.toString().contains("key2"));
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/test/java/org/apache/tamaya/events/ObservedConfigTest.java
----------------------------------------------------------------------
diff --git a/modules/events/src/test/java/org/apache/tamaya/events/ObservedConfigTest.java b/modules/events/src/test/java/org/apache/tamaya/events/ObservedConfigTest.java
index 0cd9e2b..22e9044 100644
--- a/modules/events/src/test/java/org/apache/tamaya/events/ObservedConfigTest.java
+++ b/modules/events/src/test/java/org/apache/tamaya/events/ObservedConfigTest.java
@@ -21,7 +21,7 @@ package org.apache.tamaya.events;
import org.apache.commons.io.FileUtils;
import org.apache.tamaya.Configuration;
import org.apache.tamaya.ConfigurationProvider;
-import org.junit.Ignore;
+import org.apache.tamaya.events.folderobserver.TestObservingProvider;
import org.junit.Test;
import java.io.File;
@@ -30,6 +30,7 @@ import java.util.Map;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
/**
* Test (currently manual) to test configuration changes.
@@ -37,33 +38,38 @@ import static org.junit.Assert.assertEquals;
public class ObservedConfigTest {
@Test
- @Ignore // reactivate later...
public void testChangingConfig() throws IOException {
- Configuration config = ConfigurationProvider.getConfiguration().with(TestConfigView.of());
-
- Map<String, String> props = config.getProperties();
- assertEquals(props.get("test"), "test2");
- assertEquals(props.get("testValue1"), "value");
- assertNull(props.get("testValue2"));
-
- //insert a new properties file into the tempdirectory
- FileUtils.writeStringToFile(
- new File(TestObservingProvider.propertyLocation.toFile(), "test2.properties"),
- "testValue2=anotherValue");
-
- try {
- Thread.sleep(10000);
- } catch (InterruptedException e) {
- e.printStackTrace();
+ ConfigEventManager.setChangeMonitoringPeriod(100L);
+ ConfigEventManager.enableChangeMonitoring(true);
+ while(MyConfigObserver.event==null) {
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ ConfigEvent<?> event = MyConfigObserver.event;
+ if(event!=null) {
+ assertTrue(event instanceof ConfigurationChange);
+ ConfigurationChange cChange = (ConfigurationChange) event;
+ if(cChange.isAdded("random.new")){
+ MyConfigObserver.event=null;
+ }else {
+ assertTrue(cChange.isUpdated("random.new"));
+ break;
+ }
+ }
}
- config = ConfigurationProvider.getConfiguration().with(TestConfigView.of());
+ }
+
+ public static final class MyConfigObserver implements ConfigEventListener{
- props = config.getProperties();
+ public static volatile ConfigEvent<?> event;
- assertEquals(props.get("test"), "test2");
- assertEquals(props.get("testValue1"), "value");
- assertEquals(props.get("testValue2"), "anotherValue");
+ @Override
+ public void onConfigEvent(ConfigEvent<?> event) {
+ MyConfigObserver.event = event;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/test/java/org/apache/tamaya/events/PropertySourceChangeTest.java
----------------------------------------------------------------------
diff --git a/modules/events/src/test/java/org/apache/tamaya/events/PropertySourceChangeTest.java b/modules/events/src/test/java/org/apache/tamaya/events/PropertySourceChangeTest.java
new file mode 100644
index 0000000..a8b230e
--- /dev/null
+++ b/modules/events/src/test/java/org/apache/tamaya/events/PropertySourceChangeTest.java
@@ -0,0 +1,180 @@
+/*
+ * 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.
+ */
+package org.apache.tamaya.events;
+
+import org.apache.tamaya.core.propertysource.EnvironmentPropertySource;
+import org.apache.tamaya.core.propertysource.SimplePropertySource;
+import org.apache.tamaya.core.propertysource.SystemPropertySource;
+import org.apache.tamaya.spi.PropertySource;
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.Assert.*;
+
+/**
+ * Tests for {@link PropertySourceChange} and its builder.
+ */
+public class PropertySourceChangeTest {
+
+ private static final PropertySource myPS = new SystemPropertySource();
+
+ @Test
+ public void testGetPropertySource() throws Exception {
+ PropertySourceChange change = PropertySourceChangeBuilder.of(myPS).build();
+ assertEquals(change.getResource().getName(), myPS.getName());
+ }
+
+ @Test
+ public void testGetVersion() throws Exception {
+ PropertySourceChange change = PropertySourceChangeBuilder.of(myPS)
+ .setVersion("myVersion1").build();
+ assertEquals(change.getVersion(), "myVersion1");
+ }
+
+ @Test
+ public void testGetTimestamp() throws Exception {
+ PropertySourceChange change = PropertySourceChangeBuilder.of(myPS)
+ .setTimestamp(111L).build();
+ assertEquals(change.getTimestamp(), 111L);
+ }
+
+ @Test
+ public void testGetEvents() throws Exception {
+ PropertySourceChange change = PropertySourceChangeBuilder.of(myPS)
+ .addChanges(
+ new EnvironmentPropertySource()
+ ).build();
+ assertTrue(change.getChanges().size()>0);
+ }
+
+ @Test
+ public void testGetRemovedSize() throws Exception {
+ PropertySourceChange change = PropertySourceChangeBuilder.of(myPS)
+ .addChanges(
+ new EnvironmentPropertySource()
+ ).build();
+ assertTrue(change.getRemovedSize()>0);
+ }
+
+ @Test
+ public void testGetAddedSize() throws Exception {
+ PropertySourceChange change = PropertySourceChangeBuilder.of(myPS)
+ .addChanges(
+ new EnvironmentPropertySource()
+ ).build();
+ assertTrue(change.getAddedSize()>0);
+ }
+
+ @Test
+ public void testGetUpdatedSize() throws Exception {
+ PropertySourceChange change = PropertySourceChangeBuilder.of(myPS)
+ .addChanges(
+ new EnvironmentPropertySource()
+ ).build();
+ assertTrue(change.getUpdatedSize()==0);
+ }
+
+ @Test
+ public void testIsRemoved() throws Exception {
+ Map<String, String> testData = new HashMap<>();
+ testData.put("key1", "value1");
+ testData.put("key2", "value2");
+ PropertySource ps1 = new SimplePropertySource("test", testData);
+ testData = new HashMap<>();
+ testData.put("key1", "value2");
+ testData.put("key3", "value3");
+ PropertySource ps2 = new SimplePropertySource("test", testData);
+ PropertySourceChange change = PropertySourceChangeBuilder.of(ps1)
+ .addChanges(
+ ps2
+ ).build();
+ assertFalse(change.isRemoved("key1"));
+ assertTrue(change.isRemoved("key2"));
+ assertFalse(change.isRemoved("key3"));
+ }
+
+ @Test
+ public void testIsAdded() throws Exception {
+ Map<String, String> testData = new HashMap<>();
+ testData.put("key1", "value1");
+ testData.put("key2", "value2");
+ PropertySource ps1 = new SimplePropertySource("test", testData);
+ testData = new HashMap<>();
+ testData.put("key1", "value2");
+ testData.put("key3", "value3");
+ PropertySource ps2 = new SimplePropertySource("test", testData);
+ PropertySourceChange change = PropertySourceChangeBuilder.of(ps1)
+ .addChanges(
+ ps2
+ ).build();
+ assertTrue(change.isAdded("key3"));
+ assertFalse(change.isAdded("key2"));
+ assertFalse(change.isAdded("key1"));
+ }
+
+ @Test
+ public void testIsUpdated() throws Exception {
+ Map<String, String> testData = new HashMap<>();
+ testData.put("key1", "value1");
+ testData.put("key2", "value2");
+ PropertySource ps1 = new SimplePropertySource("test", testData);
+ testData = new HashMap<>();
+ testData.put("key1", "value2");
+ testData.put("key3", "value3");
+ PropertySource ps2 = new SimplePropertySource("test", testData);
+ PropertySourceChange change = PropertySourceChangeBuilder.of(ps1)
+ .addChanges(
+ ps2
+ ).build();
+ assertTrue(change.isUpdated("key1"));
+ assertFalse(change.isUpdated("key2"));
+ assertFalse(change.isUpdated("key3"));
+ }
+
+ @Test
+ public void testContainsKey() throws Exception {
+ PropertySourceChange change = PropertySourceChangeBuilder.of(new EnvironmentPropertySource())
+ .addChanges(
+ myPS
+ ).build();
+ assertTrue(change.isKeyAffected("java.version"));
+ }
+
+ @Test
+ public void testIsEmpty() throws Exception {
+ PropertySourceChange change = PropertySourceChangeBuilder.of(new EnvironmentPropertySource())
+ .build();
+ assertTrue(change.isEmpty());
+ change = PropertySourceChangeBuilder.of(new EnvironmentPropertySource())
+ .addChanges(
+ myPS
+ ).build();
+ assertFalse(change.isEmpty());
+ }
+
+ @Test
+ public void testToString() throws Exception {
+ PropertySourceChange change = PropertySourceChangeBuilder.of(myPS).build();
+ String toString = change.toString();
+ assertNotNull(toString);
+ assertTrue(toString.contains(myPS.getName()));
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/test/java/org/apache/tamaya/events/TestObservingProvider.java
----------------------------------------------------------------------
diff --git a/modules/events/src/test/java/org/apache/tamaya/events/TestObservingProvider.java b/modules/events/src/test/java/org/apache/tamaya/events/TestObservingProvider.java
deleted file mode 100644
index 2685d3e..0000000
--- a/modules/events/src/test/java/org/apache/tamaya/events/TestObservingProvider.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * 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.
- */
-package org.apache.tamaya.events;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.tamaya.events.folderobserver.ObservingPropertySourceProvider;
-
-import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Test configuration property source provider that observes a directory and updated the config if necessary.
- */
-public class TestObservingProvider extends ObservingPropertySourceProvider{
-
- public static Path propertyLocation;
-
- static{
- try {
- // create some temporary config
- Path tempDir = Files.createTempDirectory("observedFolder");
-
- TestObservingProvider.propertyLocation = tempDir;
-
- FileUtils.copyInputStreamToFile(
- TestObservingProvider.class.getResourceAsStream("/test.properties"),
- new File(tempDir.toFile(), "test.properties"));
-
- Runtime.getRuntime().addShutdownHook(new Thread(){
- @Override
- public void run(){
- try{
- // cleanup directory
- Files.deleteIfExists(getTargetFile("test1.properties"));
- Files.deleteIfExists(getTargetFile("test2.properties"));
- Files.deleteIfExists(getTargetFile("test3.properties"));
- }
- catch(Exception e){
- Logger.getLogger("TestObservingProvider").log(Level.WARNING,
- "Failed to cleanup config test dir", e);
- }
- }
- });
- }
- catch(Exception e){
- Logger.getLogger("TestObservingProvider").log(Level.WARNING, "Failed to init config test dir", e);
- }
- }
-
- private static Path getTargetFile(String name) {
- File testFile = new File(TestObservingProvider.getTestDirectory(), name);
- return Paths.get(testFile.toURI());
- }
-
- public TestObservingProvider(){
- super(propertyLocation);
- Logger.getLogger(getClass().getName()).info("Using test directory: " + getTestPath());
- }
-
- public static File getTestDirectory(){
- String tempDir = System.getProperty("java.io.tmpdir");
- File dir = new File(tempDir, "tamaya-events-testdir");
- if(!dir.exists()){
- dir.mkdirs();
- }
- return dir;
- }
-
- private static String getTestPath(){
- return getTestDirectory().getAbsolutePath();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/7505b007/modules/events/src/test/java/org/apache/tamaya/events/delta/ConfigurationChangeTest.java
----------------------------------------------------------------------
diff --git a/modules/events/src/test/java/org/apache/tamaya/events/delta/ConfigurationChangeTest.java b/modules/events/src/test/java/org/apache/tamaya/events/delta/ConfigurationChangeTest.java
deleted file mode 100644
index b20ebef..0000000
--- a/modules/events/src/test/java/org/apache/tamaya/events/delta/ConfigurationChangeTest.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * 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.
- */
-package org.apache.tamaya.events.delta;
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.events.ConfigurationChange;
-import org.apache.tamaya.events.ConfigurationChangeBuilder;
-import org.junit.Test;
-
-import java.util.Map;
-
-import static org.junit.Assert.*;
-
-/**
- * Test class for {@link ConfigurationChange}.
- */
-public class ConfigurationChangeTest {
-
- @Test
- public void testEmptyChangeSet() throws Exception {
- ConfigurationChange change = ConfigurationChange.emptyChangeSet(ConfigurationProvider.getConfiguration());
- assertNotNull(change);
- assertTrue(change.isEmpty());
- }
-
- @Test
- public void testGetConfiguration() throws Exception {
- Configuration config = ConfigurationProvider.getConfiguration();
- ConfigurationChange change = ConfigurationChangeBuilder.of(config).build();
- assertNotNull(change);
- assertTrue(change.getUpdatedSize()==0);
- assertTrue(change.getAddedSize()==0);
- assertTrue(change.getRemovedSize()==0);
- assertTrue(change.getChanges().size()==0);
- for (Map.Entry<String, String> en : config.getProperties().entrySet()) {
- if (!"[meta]frozenAt".equals(en.getKey())) {
- if(en.getKey().contains("random.new")){ // dynamic generated value!
- continue;
- }
- assertEquals("Error for " + en.getKey(), en.getValue(), change.getResource().get(en.getKey()));
- }
- }
- }
-
- @Test
- public void testGetVersion() throws Exception {
- Configuration config = ConfigurationProvider.getConfiguration();
- ConfigurationChange change = ConfigurationChangeBuilder.of(config).build();
- assertNotNull(change.getVersion());
- change = ConfigurationChangeBuilder.of(config).setVersion("version2").build();
- assertNotNull(change.getVersion());
- assertEquals("version2", change.getVersion());
- }
-
- @Test
- public void testGetTimestamp() throws Exception {
- Configuration config = ConfigurationProvider.getConfiguration();
- ConfigurationChange change = ConfigurationChangeBuilder.of(config).build();
- assertTrue((System.currentTimeMillis() - change.getTimestamp()) <= 10L);
- change = ConfigurationChangeBuilder.of(config).setTimestamp(10L).build();
- assertEquals(10L, change.getTimestamp());
- }
-
- @Test
- public void testGetEvents() throws Exception {
- Configuration config = ConfigurationProvider.getConfiguration();
- ConfigurationChange change = ConfigurationChangeBuilder.of(config).removeKey("key1", "key2").build();
- assertTrue(change.getChanges().size() == 2);
- change = ConfigurationChangeBuilder.of(config).addChange("key1Added", "value1Added").build();
- assertTrue(change.getChanges().size() == 1);
- }
-
- @Test
- public void testGetRemovedSize() throws Exception {
- Configuration config = ConfigurationProvider.getConfiguration();
- ConfigurationChange change = ConfigurationChangeBuilder.of(config).removeKey("java.version", "key2").build();
- assertTrue(change.getRemovedSize() == 2);
- assertTrue(change.getAddedSize() == 0);
- }
-
- @Test
- public void testGetAddedSize() throws Exception {
- Configuration config = ConfigurationProvider.getConfiguration();
- ConfigurationChange change = ConfigurationChangeBuilder.of(config).addChange("key1", "key2").build();
- assertTrue(change.getAddedSize() == 1);
- assertTrue(change.getRemovedSize() == 0);
- }
-
- @Test
- public void testGetUpdatedSize() throws Exception {
- Configuration config = ConfigurationProvider.getConfiguration();
- ConfigurationChange change = ConfigurationChangeBuilder.of(config).addChange("java.version", "1.8").build();
- assertTrue(change.getUpdatedSize() == 1);
- }
-
- @Test
- public void testIsRemoved() throws Exception {
- Configuration config = ConfigurationProvider.getConfiguration();
- ConfigurationChange change = ConfigurationChangeBuilder.of(config).removeKey("java.version").build();
- assertTrue(change.isRemoved("java.version"));
- }
-
- @Test
- public void testIsAdded() throws Exception {
- Configuration config = ConfigurationProvider.getConfiguration();
- ConfigurationChange change = ConfigurationChangeBuilder.of(config).addChange("key1", "key2").build();
- assertTrue(change.isAdded("key1"));
- }
-
- @Test
- public void testIsUpdated() throws Exception {
- Configuration config = ConfigurationProvider.getConfiguration();
- ConfigurationChange change = ConfigurationChangeBuilder.of(config).addChange("java.version", "1.8").build();
- assertTrue(change.isUpdated("java.version"));
- }
-
- @Test
- public void testContainsKey() throws Exception {
- Configuration config = ConfigurationProvider.getConfiguration();
- ConfigurationChange change = ConfigurationChangeBuilder.of(config).addChange("key1", "key2").build();
- assertTrue(change.isKeyAffected("key1"));
- assertFalse(change.isKeyAffected("key2"));
- change = ConfigurationChangeBuilder.of(config).removeKey("java.version").build();
- assertFalse(change.isKeyAffected("java.version"));
- assertFalse(change.isKeyAffected("key2"));
- }
-
- @Test
- public void testIsEmpty() throws Exception {
- Configuration config = ConfigurationProvider.getConfiguration();
- ConfigurationChange change = ConfigurationChangeBuilder.of(config).build();
- assertTrue(change.isEmpty());
- }
-
- @Test
- public void testToString() throws Exception {
- Configuration config = ConfigurationProvider.getConfiguration();
- ConfigurationChange change = ConfigurationChangeBuilder.of(config).addChange("key1", "key2").build();
- change = ConfigurationChangeBuilder.of(config).removeKey("java.version").build();
- assertTrue(change.toString().contains("timestamp"));
- assertTrue(change.toString().contains("version"));
- assertTrue(change.toString().contains("configuration"));
- assertFalse(change.toString().contains("key1"));
- assertFalse(change.toString().contains("key2"));
- }
-}
\ No newline at end of file