You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by pl...@apache.org on 2016/10/23 20:36:43 UTC

[31/50] [abbrv] incubator-tamaya-extensions git commit: TAMAYA-175 Moved the events module to the directory events after extracting it for the Tamaya main repository.

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/89223dcd/events/src/test/java/org/apache/tamaya/events/delta/ConfigurationChangeTest.java
----------------------------------------------------------------------
diff --git a/events/src/test/java/org/apache/tamaya/events/delta/ConfigurationChangeTest.java b/events/src/test/java/org/apache/tamaya/events/delta/ConfigurationChangeTest.java
new file mode 100644
index 0000000..b20ebef
--- /dev/null
+++ b/events/src/test/java/org/apache/tamaya/events/delta/ConfigurationChangeTest.java
@@ -0,0 +1,163 @@
+/*
+ * 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

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/89223dcd/events/src/test/java/org/apache/tamaya/events/delta/ConfigurationContextChangeTest.java
----------------------------------------------------------------------
diff --git a/events/src/test/java/org/apache/tamaya/events/delta/ConfigurationContextChangeTest.java b/events/src/test/java/org/apache/tamaya/events/delta/ConfigurationContextChangeTest.java
new file mode 100644
index 0000000..ee631ce
--- /dev/null
+++ b/events/src/test/java/org/apache/tamaya/events/delta/ConfigurationContextChangeTest.java
@@ -0,0 +1,138 @@
+/*
+ * 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.core.propertysource.SystemPropertySource;
+import org.apache.tamaya.events.ChangeType;
+import org.apache.tamaya.events.ConfigurationContextChange;
+import org.apache.tamaya.events.ConfigurationContextChangeBuilder;
+import org.apache.tamaya.events.PropertySourceChangeBuilder;
+import org.apache.tamaya.spi.PropertySource;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Test class for {@link ConfigurationContextChange}.
+ */
+public class ConfigurationContextChangeTest {
+
+    @Test
+    public void testEmptyChangeSet() throws Exception {
+        ConfigurationContextChange change = ConfigurationContextChange.emptyChangeSet(
+                ConfigurationProvider.getConfigurationContext());
+        assertNotNull(change);
+        assertTrue(change.isEmpty());
+    }
+
+    @Test
+    public void testGetVersion() throws Exception {
+        Configuration config = ConfigurationProvider.getConfiguration();
+        ConfigurationContextChange change = ConfigurationContextChangeBuilder.of().build();
+        assertNotNull(change.getVersion());
+        change = ConfigurationContextChangeBuilder.of().setVersion("version2").build();
+        assertNotNull(change.getVersion());
+        assertEquals("version2", change.getVersion());
+    }
+
+    @Test
+    public void testGetTimestamp() throws Exception {
+        Configuration config = ConfigurationProvider.getConfiguration();
+        ConfigurationContextChange change = ConfigurationContextChangeBuilder.of().build();
+        assertTrue((System.currentTimeMillis() - change.getTimestamp()) <= 10L);
+        change = ConfigurationContextChangeBuilder.of().setTimestamp(10L).build();
+        assertEquals(10L, change.getTimestamp());
+    }
+
+    @Test
+    public void testGetPropertySourceChanges() throws Exception {
+        Configuration config = ConfigurationProvider.getConfiguration();
+        ConfigurationContextChange change = ConfigurationContextChangeBuilder.of().build();
+        assertTrue(change.getPropertySourceChanges(). isEmpty());
+        change = ConfigurationContextChangeBuilder.of().build();
+        assertTrue(change.getPropertySourceChanges(). isEmpty());
+    }
+
+    @Test
+    public void testGetPropertySourceUpdates() throws Exception {
+        Configuration config = ConfigurationProvider.getConfiguration();
+        ConfigurationContextChange change = ConfigurationContextChangeBuilder.of().build();
+        assertTrue(change.getPropertySourceChanges(). isEmpty());
+        change = ConfigurationContextChangeBuilder.of().build();
+        assertTrue(change.getPropertySourceUpdates(). isEmpty());
+    }
+
+    @Test
+    public void testGetRemovedPropertySources() throws Exception {
+        Configuration config = ConfigurationProvider.getConfiguration();
+        ConfigurationContextChange change = ConfigurationContextChangeBuilder.of().build();
+        assertTrue(change.getPropertySourceChanges(). isEmpty());
+        change = ConfigurationContextChangeBuilder.of().build();
+        assertTrue(change.getRemovedPropertySources(). isEmpty());
+    }
+
+    @Test
+    public void testGetAddedPropertySources() throws Exception {
+        Configuration config = ConfigurationProvider.getConfiguration();
+        ConfigurationContextChange change = ConfigurationContextChangeBuilder.of().build();
+        assertTrue(change.getPropertySourceChanges(). isEmpty());
+        change = ConfigurationContextChangeBuilder.of().build();
+        assertTrue(change.getAddedPropertySources().isEmpty());
+    }
+
+    @Test
+    public void testGetUpdatedPropertySources() throws Exception {
+        Configuration config = ConfigurationProvider.getConfiguration();
+        ConfigurationContextChange change = ConfigurationContextChangeBuilder.of().build();
+        assertTrue(change.getPropertySourceChanges(). isEmpty());
+        change = ConfigurationContextChangeBuilder.of().build();
+        assertTrue(change.getUpdatedPropertySources().isEmpty());
+    }
+
+    @Test
+    public void testIsAffected() throws Exception {
+        Configuration config = ConfigurationProvider.getConfiguration();
+        PropertySource ps = new SystemPropertySource();
+        ConfigurationContextChange change = ConfigurationContextChangeBuilder.of().changedPropertySource(
+                PropertySourceChangeBuilder.of(ps, ChangeType.UPDATED).build()
+        ).build();
+        String toString = change.toString();
+        assertTrue(change.isAffected(ps));
+    }
+
+    @Test
+    public void testIsEmpty() throws Exception {
+        Configuration config = ConfigurationProvider.getConfiguration();
+        ConfigurationContextChange change = ConfigurationContextChangeBuilder.of().build();
+        assertTrue(change.isEmpty());
+        change = ConfigurationContextChangeBuilder.of().newPropertySource(new SystemPropertySource()).build();
+        assertFalse(change.isEmpty());
+    }
+
+    @Test
+    public void testToString() throws Exception {
+        Configuration config = ConfigurationProvider.getConfiguration();
+        ConfigurationContextChange change = ConfigurationContextChangeBuilder.of().newPropertySource(new SystemPropertySource()).build();
+        String toString = change.toString();
+        assertNotNull(toString);
+        assertTrue(toString.contains(new SystemPropertySource().getName()));
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/89223dcd/events/src/test/java/org/apache/tamaya/events/delta/PropertySourceChangeTest.java
----------------------------------------------------------------------
diff --git a/events/src/test/java/org/apache/tamaya/events/delta/PropertySourceChangeTest.java b/events/src/test/java/org/apache/tamaya/events/delta/PropertySourceChangeTest.java
new file mode 100644
index 0000000..0dcdfba
--- /dev/null
+++ b/events/src/test/java/org/apache/tamaya/events/delta/PropertySourceChangeTest.java
@@ -0,0 +1,209 @@
+/*
+ * 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.core.propertysource.EnvironmentPropertySource;
+import org.apache.tamaya.core.propertysource.SimplePropertySource;
+import org.apache.tamaya.core.propertysource.SystemPropertySource;
+import org.apache.tamaya.events.ChangeType;
+import org.apache.tamaya.events.PropertySourceChange;
+import org.apache.tamaya.events.PropertySourceChangeBuilder;
+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 testGetChangeType() throws Exception {
+        PropertySourceChange change = PropertySourceChangeBuilder.of(myPS, ChangeType.DELETED).build();
+        assertEquals(change.getChangeType(), ChangeType.DELETED);
+        change = PropertySourceChangeBuilder.of(myPS, ChangeType.UPDATED).build();
+        assertEquals(change.getChangeType(), ChangeType.UPDATED);
+    }
+
+    @Test
+    public void testGetPropertySource() throws Exception {
+        PropertySourceChange change = PropertySourceChangeBuilder.of(myPS, ChangeType.DELETED).build();
+        assertEquals(change.getResource().getName(), myPS.getName());
+    }
+
+    @Test
+    public void testGetVersion() throws Exception {
+        PropertySourceChange change = PropertySourceChangeBuilder.of(myPS, ChangeType.DELETED)
+                .setVersion("myVersion1").build();
+        assertEquals(change.getVersion(), "myVersion1");
+    }
+
+    @Test
+    public void testGetTimestamp() throws Exception {
+        PropertySourceChange change = PropertySourceChangeBuilder.of(myPS, ChangeType.DELETED)
+                .setTimestamp(111L).build();
+        assertEquals(change.getTimestamp(), 111L);
+    }
+
+    @Test
+    public void testGetEvents() throws Exception {
+        PropertySourceChange change = PropertySourceChangeBuilder.of(myPS, ChangeType.DELETED)
+                .addChanges(
+                        new EnvironmentPropertySource()
+                ).build();
+        assertTrue(change.getChanges().size()>0);
+    }
+
+    @Test
+    public void testGetRemovedSize() throws Exception {
+        PropertySourceChange change = PropertySourceChangeBuilder.of(myPS, ChangeType.UPDATED)
+                .addChanges(
+                        new EnvironmentPropertySource()
+                ).build();
+        assertTrue(change.getRemovedSize()>0);
+    }
+
+    @Test
+    public void testGetAddedSize() throws Exception {
+        PropertySourceChange change = PropertySourceChangeBuilder.of(myPS, ChangeType.DELETED)
+                .addChanges(
+                        new EnvironmentPropertySource()
+                ).build();
+        assertTrue(change.getAddedSize()>0);
+    }
+
+    @Test
+    public void testGetUpdatedSize() throws Exception {
+        PropertySourceChange change = PropertySourceChangeBuilder.of(myPS, ChangeType.DELETED)
+                .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, ChangeType.UPDATED)
+                .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, ChangeType.UPDATED)
+                .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, ChangeType.UPDATED)
+                .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(), ChangeType.DELETED)
+                .addChanges(
+                        myPS
+                ).build();
+        assertTrue(change.isKeyAffected("java.version"));
+    }
+
+    @Test
+    public void testIsEmpty() throws Exception {
+        PropertySourceChange change = PropertySourceChangeBuilder.of(new EnvironmentPropertySource(), ChangeType.DELETED)
+                .build();
+        assertTrue(change.isEmpty());
+        change = PropertySourceChangeBuilder.of(new EnvironmentPropertySource(), ChangeType.DELETED)
+                .addChanges(
+                        myPS
+                ).build();
+        assertFalse(change.isEmpty());
+    }
+
+    @Test
+    public void testOfAdded() throws Exception {
+        PropertySourceChange change = PropertySourceChange.ofAdded(myPS);
+        assertNotNull(change);
+        assertEquals(change.getChangeType(), ChangeType.NEW);
+    }
+
+    @Test
+    public void testOfDeleted() throws Exception {
+        PropertySourceChange change = PropertySourceChange.ofDeleted(myPS);
+        assertNotNull(change);
+        assertEquals(change.getChangeType(), ChangeType.DELETED);
+    }
+
+    @Test
+    public void testToString() throws Exception {
+        PropertySourceChange change = PropertySourceChange.ofAdded(myPS);
+        String toString = change.toString();
+        assertNotNull(toString);
+        assertTrue(toString.contains(myPS.getName()));
+        change = PropertySourceChange.ofDeleted(myPS);
+        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/89223dcd/events/src/test/java/org/apache/tamaya/events/internal/DefaultConfigEventManagerSpiTest.java
----------------------------------------------------------------------
diff --git a/events/src/test/java/org/apache/tamaya/events/internal/DefaultConfigEventManagerSpiTest.java b/events/src/test/java/org/apache/tamaya/events/internal/DefaultConfigEventManagerSpiTest.java
new file mode 100644
index 0000000..d54a66e
--- /dev/null
+++ b/events/src/test/java/org/apache/tamaya/events/internal/DefaultConfigEventManagerSpiTest.java
@@ -0,0 +1,66 @@
+/*
+ * 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.events.ConfigEvent;
+import org.apache.tamaya.events.ConfigEventListener;
+import org.apache.tamaya.events.SimpleEvent;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests for {@link DefaultConfigEventManagerSpi}.
+ */
+public class DefaultConfigEventManagerSpiTest {
+
+    private final DefaultConfigEventManagerSpi spi = new DefaultConfigEventManagerSpi();
+    private Object testAddListenerValue;
+
+    @Test
+    public void testAddListener() throws Exception {
+        ConfigEventListener testListener = new ConfigEventListener() {
+            @Override
+            public void onConfigEvent(ConfigEvent<?> event) {
+                testAddListenerValue = event.getResource();
+            }
+        };
+        spi.addListener(testListener);
+        spi.fireEvent(new SimpleEvent("Event1"));
+        assertEquals(testAddListenerValue, "Event1");
+        spi.removeListener(testListener);
+        spi.fireEvent(new SimpleEvent("Event2"));
+        assertEquals(testAddListenerValue, "Event1");
+
+    }
+
+    @Test
+    public void testRemoveListener() throws Exception {
+        ConfigEventListener testListener = new ConfigEventListener() {
+
+            @Override
+            public void onConfigEvent(ConfigEvent<?> event) {
+                testAddListenerValue = event;
+            }
+        };
+        spi.removeListener(testListener);
+        spi.removeListener(testListener);
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/89223dcd/events/src/test/resources/META-INF/services/org.apache.tamaya.events.ConfigEventListener
----------------------------------------------------------------------
diff --git a/events/src/test/resources/META-INF/services/org.apache.tamaya.events.ConfigEventListener b/events/src/test/resources/META-INF/services/org.apache.tamaya.events.ConfigEventListener
new file mode 100644
index 0000000..f675fd6
--- /dev/null
+++ b/events/src/test/resources/META-INF/services/org.apache.tamaya.events.ConfigEventListener
@@ -0,0 +1,19 @@
+#
+# 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
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/89223dcd/events/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
----------------------------------------------------------------------
diff --git a/events/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySource b/events/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
new file mode 100644
index 0000000..9c2b9f6
--- /dev/null
+++ b/events/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
@@ -0,0 +1,19 @@
+#
+# 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.RandomPropertySource

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/89223dcd/events/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
----------------------------------------------------------------------
diff --git a/events/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider b/events/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
new file mode 100644
index 0000000..d34b4a2
--- /dev/null
+++ b/events/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
@@ -0,0 +1,19 @@
+#
+# 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.TestObservingProvider

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/89223dcd/events/src/test/resources/data/test1.properties
----------------------------------------------------------------------
diff --git a/events/src/test/resources/data/test1.properties b/events/src/test/resources/data/test1.properties
new file mode 100644
index 0000000..0df3bd1
--- /dev/null
+++ b/events/src/test/resources/data/test1.properties
@@ -0,0 +1,20 @@
+#
+# 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.
+#
+1=val1
+3=val3

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/89223dcd/events/src/test/resources/data/test1b.properties
----------------------------------------------------------------------
diff --git a/events/src/test/resources/data/test1b.properties b/events/src/test/resources/data/test1b.properties
new file mode 100644
index 0000000..ec57163
--- /dev/null
+++ b/events/src/test/resources/data/test1b.properties
@@ -0,0 +1,20 @@
+#
+# 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.
+#
+1b=val1
+7=val7
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/89223dcd/events/src/test/resources/data/test2.properties
----------------------------------------------------------------------
diff --git a/events/src/test/resources/data/test2.properties b/events/src/test/resources/data/test2.properties
new file mode 100644
index 0000000..0643c1d
--- /dev/null
+++ b/events/src/test/resources/data/test2.properties
@@ -0,0 +1,20 @@
+#
+# 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.
+#
+4=val4
+6=val6

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/89223dcd/events/src/test/resources/data/test3.properties
----------------------------------------------------------------------
diff --git a/events/src/test/resources/data/test3.properties b/events/src/test/resources/data/test3.properties
new file mode 100644
index 0000000..bb856c7
--- /dev/null
+++ b/events/src/test/resources/data/test3.properties
@@ -0,0 +1,20 @@
+#
+# 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.
+#
+2=val2
+5=val5

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/89223dcd/events/src/test/resources/test.properties
----------------------------------------------------------------------
diff --git a/events/src/test/resources/test.properties b/events/src/test/resources/test.properties
new file mode 100644
index 0000000..af06631
--- /dev/null
+++ b/events/src/test/resources/test.properties
@@ -0,0 +1,21 @@
+#
+# 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.
+#
+testValue1=value
+test=test2
+a=b
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/89223dcd/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
deleted file mode 100644
index d274633..0000000
--- a/pom.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-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.
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.tamaya.ext</groupId>
-        <artifactId>tamaya-extensions</artifactId>
-        <version>0.3-incubating-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>tamaya-events</artifactId>
-    <name>Apache Tamaya Modules - Event and dynamic Update Extensions</name>
-    <packaging>bundle</packaging>
-
-    <properties>
-        <jdkVersion>1.7</jdkVersion>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya.ext</groupId>
-            <artifactId>tamaya-functions</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya.ext</groupId>
-            <artifactId>tamaya-spisupport</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-core</artifactId>
-            <version>${project.version}</version>
-            <scope>runtime</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.hamcrest</groupId>
-            <artifactId>java-hamcrest</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                            org.apache.tamaya.events,
-                            org.apache.tamaya.events.delta,
-                            org.apache.tamaya.events.folderobserver,
-                            org.apache.tamaya.events.spi
-                        </Export-Package>
-                        <Private-Package>
-                            org.apache.tamaya.events.internal
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/89223dcd/src/main/java/org/apache/tamaya/events/ChangeType.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/ChangeType.java b/src/main/java/org/apache/tamaya/events/ChangeType.java
deleted file mode 100644
index 2059017..0000000
--- a/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/89223dcd/src/main/java/org/apache/tamaya/events/ConfigEvent.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/ConfigEvent.java b/src/main/java/org/apache/tamaya/events/ConfigEvent.java
deleted file mode 100644
index 5a713d7..0000000
--- a/src/main/java/org/apache/tamaya/events/ConfigEvent.java
+++ /dev/null
@@ -1,55 +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;
-
-
-/**
- * Event that contains a set current changes that were applied or could be applied.
- * @param <T> the resource type.
- */
-public interface ConfigEvent<T>{
-
-    /**
-     * Access the type of resource. This allows to easily determine the resource an event wants to observe.
-     * @return the resource type.
-     */
-    Class<T> getResourceType();
-
-    /**
-     * Get the underlying property provider/configuration.
-     * @return the underlying property provider/configuration, never null.
-     */
-    T getResource();
-
-    /**
-     * Get the version relative to the observed resource. The version is required to be unique for
-     * each change emmitted for a resource. There is no further requirement how this uniqueness is
-     * modelled, so returning a UUID is a completely valid strategy.
-     * @return the base version.
-     */
-    String getVersion();
-
-    /**
-     * 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.
-     */
-    long getTimestamp();
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/89223dcd/src/main/java/org/apache/tamaya/events/ConfigEventListener.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/ConfigEventListener.java b/src/main/java/org/apache/tamaya/events/ConfigEventListener.java
deleted file mode 100644
index 7fb32c8..0000000
--- a/src/main/java/org/apache/tamaya/events/ConfigEventListener.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;
-
-/**
- * Interface to be implemented for listening on changes on {@link org.apache.tamaya.Configuration} instances.
- */
-public interface ConfigEventListener {
-    /**
-     * Called if an event occurred.
-     * @param event the event, not null.
-     */
-    void onConfigEvent(ConfigEvent<?> event);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/89223dcd/src/main/java/org/apache/tamaya/events/ConfigEventManager.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/ConfigEventManager.java b/src/main/java/org/apache/tamaya/events/ConfigEventManager.java
deleted file mode 100644
index f6bd3da..0000000
--- a/src/main/java/org/apache/tamaya/events/ConfigEventManager.java
+++ /dev/null
@@ -1,186 +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.ConfigException;
-import org.apache.tamaya.events.spi.ConfigEventManagerSpi;
-import org.apache.tamaya.spi.ServiceContextManager;
-
-import java.util.Collection;
-
-/**
- * Singleton accessor for accessing the event support component that distributes change events of
- * {@link org.apache.tamaya.spi.PropertySource} and {@link org.apache.tamaya.Configuration}.
- */
-public final class ConfigEventManager {
-    /**
-     * The backing SPI.
-     */
-    private static final ConfigEventManagerSpi SPI = ServiceContextManager.getServiceContext()
-            .getService(ConfigEventManagerSpi.class);
-
-    /**
-     * Private singleton constructor.
-     */
-    private ConfigEventManager() {
-    }
-
-    /**
-     * Adds a Config listener that listens to all kind of {@link ConfigEvent}.
-     * @param l the listener not null.
-     */
-    public static void addListener(ConfigEventListener l) {
-        if (SPI == null) {
-            throw new ConfigException("No SPI registered for " +
-                    ConfigEventManager.class.getName());
-        }
-        SPI.addListener(l);
-    }
-
-    /**
-     * Adds a Config listener that listens to all kind of {@link ConfigEvent}.
-     * @param <T> the type of the event.
-     * @param l the listener not null.
-     * @param eventType the event type to which this listener listens to.
-     */
-    public static <T extends ConfigEvent> void addListener(ConfigEventListener l, Class<T> eventType) {
-        if (SPI == null) {
-            throw new ConfigException("No SPI registered for " +
-                    ConfigEventManager.class.getName());
-        }
-        SPI.addListener(l);
-    }
-
-    /**
-     * Removes a listener registered globally.
-     *
-     * @param l the listener not null.
-     */
-    public static void removeListener(ConfigEventListener l) {
-        if (SPI == null) {
-            throw new ConfigException("No SPI registered for " +
-                    ConfigEventManager.class.getName());
-        }
-        SPI.removeListener(l);
-    }
-
-    /**
-     * Removes a listener registered for the given event type.
-     *
-     * @param <T> the type of the event.
-     * @param l the listener, not null.
-     * @param eventType the event type to which this listener listens to.
-     */
-    public static <T extends ConfigEvent> void removeListener(ConfigEventListener l, Class<T> eventType) {
-        if (SPI == null) {
-            throw new ConfigException("No SPI registered for " +
-                    ConfigEventManager.class.getName());
-        }
-        SPI.removeListener(l);
-    }
-
-    /**
-     * Access all registered ConfigEventListeners listening to a given event type.
-     * @param type the event type
-     * @param <T> type param
-     * @return a list with the listeners found, never null.
-     */
-    public static <T extends ConfigEvent>
-        Collection<? extends ConfigEventListener> getListeners(Class<T> type) {
-        return SPI.getListeners(type);
-    }
-
-    /**
-     * Access all registered ConfigEventListeners listening to a all kind of event types globally.
-     * 
-     * @param <T> the type of the event.
-     * @return a list with the listeners found, never null.
-     */
-    public static <T extends ConfigEvent>
-    Collection<? extends ConfigEventListener> getListeners() {
-        return SPI.getListeners();
-    }
-
-    /**
-     * Publishes a {@link ConfigurationChange} synchronously to all interested listeners.
-     * 
-     * @param <T> the type of the event.
-     * @param event the event, not null.
-     */
-    public static <T> void fireEvent(ConfigEvent<?> event) {
-        SPI.fireEvent(event);
-    }
-
-    /**
-     * Publishes a {@link ConfigurationChange} asynchronously/multithreaded to all interested listeners.
-     *
-     * @param <T> the type of the event.
-     * @param event the event, not null.
-     */
-    public static <T> void fireEventAsynch(ConfigEvent<?> event) {
-        SPI.fireEventAsynch(event);
-    }
-
-    /**
-     * Start/Stop the change monitoring service, which will observe/reevaluate the current configuration regularly
-     * and trigger ConfigurationChange events if something changed. This is quite handy for publishing
-     * configuration changes to whatever systems are interested in. Hereby the origin of a configuration change
-     * can be on this machine, or also remotely. For handling corresponding {@link ConfigEventListener} have
-     * to be registered, e.g. listening on {@link org.apache.tamaya.events.ConfigurationChange} events.
-     * 
-     * @param enable whether to enable or disable the change monitoring.
-     * 
-     * @see #isChangeMonitoring()
-     * @see #getChangeMonitoringPeriod()
-     */
-    public static void enableChangeMonitoring(boolean enable) {
-        SPI.enableChangeMonitor(enable);
-    }
-
-    /**
-     * Check if the observer is running currently.
-     *
-     * @return true, if the change monitoring service is currently running.
-     * @see #enableChangeMonitoring(boolean)
-     */
-    public static boolean isChangeMonitoring() {
-        return SPI.isChangeMonitorActive();
-    }
-
-    /**
-     * Get the current check period to check for configuration changes.
-     *
-     * @return the check period in ms.
-     */
-    public static long getChangeMonitoringPeriod(){
-        return SPI.getChangeMonitoringPeriod();
-    }
-
-    /**
-     * Sets the current monitoring period and restarts the monitor. You still have to enable the monitor if
-     * it is currently not enabled.
-     * @param millis the monitoring period in ms.
-     * @see #enableChangeMonitoring(boolean)
-     * @see #isChangeMonitoring()
-     */
-    public static void setChangeMonitoringPeriod(long millis){
-        SPI.setChangeMonitoringPeriod(millis);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/89223dcd/src/main/java/org/apache/tamaya/events/ConfigurationChange.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/ConfigurationChange.java b/src/main/java/org/apache/tamaya/events/ConfigurationChange.java
deleted file mode 100644
index c31cda2..0000000
--- a/src/main/java/org/apache/tamaya/events/ConfigurationChange.java
+++ /dev/null
@@ -1,218 +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.Configuration;
-
-import java.beans.PropertyChangeEvent;
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
-/**
- * Event that contains a set current changes that were applied or could 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 ConfigurationChange implements ConfigEvent<Configuration>, Serializable{
-
-    private static final long serialVersionUID = 1L;
-    /** The base property provider/configuration. */
-    private final FrozenConfiguration configuration;
-    /** 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 recorded changes. */
-    private final Map<String,PropertyChangeEvent> changes = new HashMap<>();
-
-    /**
-     * Get an empty change set for the given provider.
-     * @param configuration The configuration changed, not null.
-     * @return an empty ConfigurationChangeSet instance.
-     */
-    public static ConfigurationChange emptyChangeSet(Configuration configuration){
-        return ConfigurationChangeBuilder.of(configuration).build();
-    }
-
-    /**
-     * Constructor used by {@link PropertySourceChangeBuilder}.
-     * @param builder The builder used, not null.
-     */
-    ConfigurationChange(ConfigurationChangeBuilder builder) {
-        this.configuration = FrozenConfiguration.of(builder.source);
-        for(PropertyChangeEvent ev:builder.delta.values()){
-            this.changes.put(ev.getPropertyName(), ev);
-        }
-        if(builder.version!=null){
-            this.version = builder.version;
-        }
-        if(builder.timestamp!=null){
-            this.timestamp = builder.timestamp;
-        }
-    }
-
-    @Override
-    public Class<Configuration> getResourceType() {
-        return Configuration.class;
-    }
-
-    /**
-     * Get the underlying property provider/configuration.
-     * @return the underlying property provider/configuration, never null.
-     */
-    @Override
-    public Configuration getResource(){
-        return this.configuration;
-    }
-
-    /**
-     * 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<PropertyChangeEvent> getChanges(){
-        return Collections.unmodifiableCollection(this.changes.values());
-    }
-
-    /**
-     * Access the number current removed entries.
-     * @return the number current removed entries.
-     */
-    public int getRemovedSize() {
-        int removedCount = 0;
-        for(PropertyChangeEvent ev:this.changes.values()){
-            if(ev.getNewValue() == null){
-                removedCount++;
-            }
-        }
-        return removedCount;
-    }
-
-    /**
-     * Access the number current added entries.
-     * @return the number current added entries.
-     */
-    public int getAddedSize() {
-        int addedCount = 0;
-        for(PropertyChangeEvent ev:this.changes.values()){
-            if(ev.getOldValue() == null &&
-                    ev.getNewValue() != null){
-                addedCount++;
-            }
-        }
-        return addedCount;
-    }
-
-    /**
-     * Access the number current updated entries.
-     * @return the number current updated entries.
-     */
-    public int getUpdatedSize() {
-        int updatedCount = 0;
-        for(PropertyChangeEvent ev:this.changes.values()){
-            if( ev.getOldValue()!=null && ev.getNewValue()!=null){
-                updatedCount++;
-            }
-        }
-        return updatedCount;
-    }
-
-
-    /**
-     * Checks if the given key was removed.
-     * @param key the target key, not null.
-     * @return true, if the given key was removed.
-     */
-    public boolean isRemoved(String key) {
-        PropertyChangeEvent change = this.changes.get(key);
-        return change != null && change.getNewValue() == null;
-    }
-
-    /**
-     * Checks if the given key was added.
-     * @param key the target key, not null.
-     * @return true, if the given key was added.
-     */
-    public boolean isAdded(String key) {
-        PropertyChangeEvent change = this.changes.get(key);
-        return change != null && change.getOldValue() == null;
-    }
-
-    /**
-     * Checks if the given key was updated.
-     * @param key the target key, not null.
-     * @return true, if the given key was updated.
-     */
-    public boolean isUpdated(String key) {
-        PropertyChangeEvent change = this.changes.get(key);
-        return change != null && change.getOldValue() != null && change.getNewValue() != null;
-    }
-
-    /**
-     * Checks if the given key is added, or updated AND NOT removed.
-     * @param key the target key, not null.
-     * @return true, if the given key was added, or updated BUT NOT removed.
-     */
-    public boolean isKeyAffected(String key) {
-        PropertyChangeEvent change = this.changes.get(key);
-        return change != null && change.getNewValue() != null;
-    }
-
-    /**
-     * CHecks if the current change set does not contain any changes.
-     * @return tru, if the change set is empty.
-     */
-    public boolean isEmpty(){
-        return this.changes.isEmpty();
-    }
-
-
-    @Override
-    public String toString() {
-        return "ConfigurationChange{" +
-                "configuration=" + configuration +
-                ", version='" + version + '\'' +
-                ", timestamp=" + timestamp +
-                '}';
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/89223dcd/src/main/java/org/apache/tamaya/events/ConfigurationChangeBuilder.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/ConfigurationChangeBuilder.java b/src/main/java/org/apache/tamaya/events/ConfigurationChangeBuilder.java
deleted file mode 100644
index 1fd228a..0000000
--- a/src/main/java/org/apache/tamaya/events/ConfigurationChangeBuilder.java
+++ /dev/null
@@ -1,274 +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.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
-
-import java.beans.PropertyChangeEvent;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-/**
- * Models a set current changes applied to a {@link org.apache.tamaya.spi.PropertySource}. Consumers of these events
- * can observing 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 tova property source is never affected by a
- * change, its only the data of the property source).</li>
- * <li>If so 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 ConfigurationChangeBuilder {
-    /**
-     * The recorded changes.
-     */
-    final SortedMap<String, PropertyChangeEvent> delta = new TreeMap<>();
-    /**
-     * The underlying configuration/provider.
-     */
-    final Configuration source;
-    /**
-     * The version configured, or null, for generating a default.
-     */
-    String version;
-    /**
-     * The optional timestamp in millis of this epoch.
-     */
-    Long timestamp;
-
-    /**
-     * Constructor.
-     *
-     * @param configuration the underlying configuration, not null.
-     */
-    private ConfigurationChangeBuilder(Configuration configuration) {
-        this.source = Objects.requireNonNull(configuration);
-    }
-
-    /**
-     * Creates a new instance current this builder using the current COnfiguration as root resource.
-     *
-     * @return the builder for chaining.
-     */
-    public static ConfigurationChangeBuilder of() {
-        return new ConfigurationChangeBuilder(ConfigurationProvider.getConfiguration());
-    }
-
-    /**
-     * Creates a new instance current this builder.
-     *
-     * @param configuration the configuration changed, not null.
-     * @return the builder for chaining.
-     */
-    public static ConfigurationChangeBuilder of(Configuration configuration) {
-        return new ConfigurationChangeBuilder(configuration);
-    }
-
-    /**
-     * Compares the two property config/configurations and creates a collection current all changes
-     * that must be appied to render {@code map1} into {@code map2}.
-     *
-     * @param map1 the source map, not null.
-     * @param map2 the target map, not null.
-     * @return a collection current change events, never null.
-     */
-    public static Collection<PropertyChangeEvent> compare(Configuration map1, Configuration map2) {
-        List<PropertyChangeEvent> changes = new ArrayList<>();
-        for (Map.Entry<String, String> en : map1.getProperties().entrySet()) {
-            String val = map2.get(en.getKey());
-            if (val == null) {
-                changes.add(new PropertyChangeEvent(map1, en.getKey(), null, en.getValue()));
-            } else if (!val.equals(en.getValue())) {
-                changes.add(new PropertyChangeEvent(map1, en.getKey(), val, en.getValue()));
-            }
-        }
-        for (Map.Entry<String, String> en : map2.getProperties().entrySet()) {
-            String val = map1.get(en.getKey());
-            if (val == null) {
-                changes.add(new PropertyChangeEvent(map1, en.getKey(), null, en.getValue()));
-            } else if (!val.equals(en.getValue())) {
-                changes.add(new PropertyChangeEvent(map1, en.getKey(), val, en.getValue()));
-            }
-        }
-        return changes;
-    }
-
-    /*
-     * 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 ConfigurationChangeBuilder setVersion(String version) {
-        this.version = version;
-        return this;
-    }
-
-    /*
-     * Apply given timestamp 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 ConfigurationChangeBuilder 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 newState the new target state, not null.
-     * @return the builder for chaining.
-     */
-    public ConfigurationChangeBuilder addChanges(Configuration newState) {
-        for (PropertyChangeEvent c : compare(newState, this.source)) {
-            this.delta.put(c.getPropertyName(), c);
-        }
-        return this;
-    }
-
-    /**
-     * Applies a single key/value change.
-     *
-     * @param key   the changed key
-     * @param value the new value.
-     * @return this instance for chining.
-     */
-    public ConfigurationChangeBuilder addChange(String key, String value) {
-        this.delta.put(key, new PropertyChangeEvent(this.source, key, this.source.get(key), value));
-        return this;
-    }
-
-    /**
-     * Get the current values, also considering any changes recorded within this change set.
-     *
-     * @param key the key current the entry, not null.
-     * @return the keys, or null.
-     */
-    public String get(String key) {
-        PropertyChangeEvent change = this.delta.get(key);
-        if (change != null && !(change.getNewValue() == null)) {
-            return (String) change.getNewValue();
-        }
-        return null;
-    }
-
-    /**
-     * Marks the given key(s) fromMap the configuration/properties to be removed.
-     *
-     * @param key       the key current the entry, not null.
-     * @param otherKeys additional keys to be removed (convenience), not null.
-     * @return the builder for chaining.
-     */
-    public ConfigurationChangeBuilder removeKey(String key, String... otherKeys) {
-        String oldValue = this.source.get(key);
-        if (oldValue == null) {
-            this.delta.remove(key);
-        }
-        this.delta.put(key, new PropertyChangeEvent(this.source, key, oldValue, null));
-        for (String addKey : otherKeys) {
-            oldValue = this.source.get(addKey);
-            if (oldValue == null) {
-                this.delta.remove(addKey);
-            }
-            this.delta.put(addKey, new PropertyChangeEvent(this.source, addKey, oldValue, null));
-        }
-        return this;
-    }
-
-    /**
-     * Apply all the given values to the base configuration/properties.
-     * Note that all values passed must be convertible to String, either
-     * <ul>
-     * <li>the registered codecs provider provides codecs for the corresponding keys, or </li>
-     * <li>default codecs are present for the given type, or</li>
-     * <li>the value is an instanceof String</li>
-     * </ul>
-     *
-     * @param changes the changes to be applied, not null.
-     * @return the builder for chaining.
-     */
-    public ConfigurationChangeBuilder putAll(Map<String, String> changes) {
-        for (Map.Entry<String, String> en : changes.entrySet()) {
-            this.delta.put(en.getKey(), new PropertyChangeEvent(this.source, en.getKey(), null, en.getValue()));
-        }
-        return this;
-    }
-
-    /**
-     * This method will create a change set that clears all entries fromMap the given base configuration/properties.
-     *
-     * @return the builder for chaining.
-     */
-    public ConfigurationChangeBuilder removeAllKeys() {
-        this.delta.clear();
-        for (Map.Entry<String, String> en : this.source.getProperties().entrySet()) {
-            this.delta.put(en.getKey(), new PropertyChangeEvent(this.source, en.getKey(), en.getValue(), null));
-        }
-//        this.source.getProperties().forEach((k, v) ->
-//                this.delta.put(k, new PropertyChangeEvent(this.source, k, v, null)));
-        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.delta.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.delta.clear();
-    }
-
-    /**
-     * Builds the corresponding change set.
-     *
-     * @return the new change set, never null.
-     */
-    public ConfigurationChange build() {
-        return new ConfigurationChange(this);
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see java.lang.Object#toString()
-     */
-    @Override
-    public String toString() {
-        return "ConfigurationChangeSetBuilder [config=" + source + ", " +
-                ", delta=" + delta + "]";
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/89223dcd/src/main/java/org/apache/tamaya/events/ConfigurationContextChange.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/ConfigurationContextChange.java b/src/main/java/org/apache/tamaya/events/ConfigurationContextChange.java
deleted file mode 100644
index 4e12d42..0000000
--- a/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/89223dcd/src/main/java/org/apache/tamaya/events/ConfigurationContextChangeBuilder.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/ConfigurationContextChangeBuilder.java b/src/main/java/org/apache/tamaya/events/ConfigurationContextChangeBuilder.java
deleted file mode 100644
index b586428..0000000
--- a/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 + "]";
-    }
-
-
-}