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/09/16 22:03:44 UTC

[34/50] [abbrv] incubator-tamaya-extensions git commit: Implemented UI improvements and overall fixes of minor issues.

Implemented UI improvements and overall fixes of minor issues.


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/ee79c0ef
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/tree/ee79c0ef
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/diff/ee79c0ef

Branch: refs/heads/master
Commit: ee79c0efa2ec4cf067dd2dfa777435940702afed
Parents: 089e951
Author: anatole <an...@apache.org>
Authored: Fri Jun 3 23:17:00 2016 +0200
Committer: anatole <an...@apache.org>
Committed: Tue Aug 16 15:51:30 2016 +0200

----------------------------------------------------------------------
 mutable-config/pom.xml                          |   1 -
 .../mutableconfig/ChangePropagationPolicy.java  |   7 +-
 .../mutableconfig/MutableConfiguration.java     |  13 ++-
 .../MutableConfigurationProvider.java           |  25 +++--
 .../internal/DefaultMutableConfiguration.java   |  57 +++++++----
 .../AbstractMutablePropertySource.java          |  27 +++--
 .../propertysources/ConfigChangeContext.java    |  31 +++++-
 .../spi/MutablePropertySource.java              |  22 ++--
 .../mutableconfig/ui/ConfigEditorWidget.java    |  29 ++++--
 .../mutableconfig/ui/ConfigUpdaterView.java     |  12 ++-
 .../tamaya/mutableconfig/ui/ProtocolWidget.java |   2 +
 .../ui/TransactionControlWidget.java            | 100 ++++++++++++++++---
 .../main/resources/ui/lang/tamaya.properties    |   5 +-
 .../org.apache.tamaya.spi.PropertySource        |   2 +-
 14 files changed, 246 insertions(+), 87 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/ee79c0ef/mutable-config/pom.xml
----------------------------------------------------------------------
diff --git a/mutable-config/pom.xml b/mutable-config/pom.xml
index cf06546..85dacd5 100644
--- a/mutable-config/pom.xml
+++ b/mutable-config/pom.xml
@@ -59,7 +59,6 @@ under the License.
             <version>${project.version}</version>
             <scope>runtime</scope>
         </dependency>
-
         <dependency>
             <groupId>org.hamcrest</groupId>
             <artifactId>java-hamcrest</artifactId>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/ee79c0ef/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ChangePropagationPolicy.java
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ChangePropagationPolicy.java b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ChangePropagationPolicy.java
index 0986c08..8e675ab 100644
--- a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ChangePropagationPolicy.java
+++ b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ChangePropagationPolicy.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tamaya.mutableconfig;
 
+import org.apache.tamaya.mutableconfig.propertysources.ConfigChangeContext;
 import org.apache.tamaya.spi.PropertySource;
 
 import java.util.Collection;
@@ -50,7 +51,7 @@ public interface ChangePropagationPolicy {
      * @param transactionID the transaction ID, not null.
      * @param changes the key/values being added or updated, not null.
      */
-    void applyChanges(Collection<PropertySource> propertySources, UUID transactionID, Map<String,String> changes);
+    void applyChanges(String transactionID, Collection<PropertySource> propertySources, Map<String,String> changes);
 
     /**
      * Method being called when a single key/value pair has been added or updated.
@@ -60,7 +61,7 @@ public interface ChangePropagationPolicy {
      * @param key the key, not null.
      * @param value the value, not null.
      */
-    void applyChange(Collection<PropertySource> propertySources, UUID transactionID, String key, String value);
+    void applyChange(String transactionID, Collection<PropertySource> propertySources, String key, String value);
 
     /**
      * Method being called when a multiple keys has been removed from the configuration.
@@ -69,6 +70,6 @@ public interface ChangePropagationPolicy {
      * @param transactionID the transaction ID, not null.
      * @param keys the keys being removed, not null.
      */
-    void applyRemove(Collection<PropertySource> propertySources, UUID transactionID, String... keys);
+    void applyRemove(String transactionID, Collection<PropertySource> propertySources, String... keys);
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/ee79c0ef/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/MutableConfiguration.java
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/MutableConfiguration.java b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/MutableConfiguration.java
index a0cb471..4f24701 100644
--- a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/MutableConfiguration.java
+++ b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/MutableConfiguration.java
@@ -19,6 +19,7 @@
 package org.apache.tamaya.mutableconfig;
 
 import org.apache.tamaya.Configuration;
+import org.apache.tamaya.mutableconfig.propertysources.ConfigChangeContext;
 import org.apache.tamaya.mutableconfig.spi.MutablePropertySource;
 
 import java.util.Collection;
@@ -50,7 +51,7 @@ public interface MutableConfiguration extends Configuration {
      * passed, when writing (committing) any changes applied.
      * @return the transaction id, not null.
      */
-    UUID startTransaction();
+    String startTransaction();
 
     /**
      * Commits the request. After a commit the change is not editable anymore. All changes applied will be written to
@@ -72,7 +73,7 @@ public interface MutableConfiguration extends Configuration {
      * Get the current transaction id.
      * @return the current transaction id, or null, if no transaction is active.
      */
-    UUID getTransactionId();
+    String getTransactionId();
 
     /**
      * Get the current autoCommit policy. AutoCommit will commit the transaction after each change applied.
@@ -95,6 +96,14 @@ public interface MutableConfiguration extends Configuration {
     ChangePropagationPolicy getChangePropagationPolicy();
 
     /**
+     * Access the current configuration change context, built up on all the change context of the participating
+     * {@link MutablePropertySource} instances.
+     * @return the colleted changes as one single config change for the current transaction, or null, if no transaction
+     * is active.
+     */
+    ConfigChangeContext getConfigChangeContext();
+
+    /**
      * Set the autoCommit policy to be used for this configuration instance.
      * @param autoCommit the new autoCommit policy.
      * @throws IllegalStateException when there are uncommitted changes.

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/ee79c0ef/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/MutableConfigurationProvider.java
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/MutableConfigurationProvider.java b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/MutableConfigurationProvider.java
index ec936b2..98c918b 100644
--- a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/MutableConfigurationProvider.java
+++ b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/MutableConfigurationProvider.java
@@ -31,7 +31,6 @@ import java.util.Collection;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
-import java.util.UUID;
 import java.util.logging.Logger;
 
 
@@ -131,7 +130,7 @@ public final class MutableConfigurationProvider {
      */
     private static final ChangePropagationPolicy ALL_POLICY = new ChangePropagationPolicy() {
         @Override
-        public void applyChanges(Collection<PropertySource> propertySources, UUID transactionID,
+        public void applyChanges(String transactionID, Collection<PropertySource> propertySources,
                                  Map<String, String> changes) {
             for(PropertySource propertySource: propertySources){
                 if(propertySource instanceof MutablePropertySource){
@@ -146,7 +145,7 @@ public final class MutableConfigurationProvider {
         }
 
         @Override
-        public void applyChange(Collection<PropertySource> propertySources, UUID transactionID,
+        public void applyChange(String transactionID, Collection<PropertySource> propertySources,
                                 String key, String value) {
             for(PropertySource propertySource: propertySources){
                 if(propertySource instanceof MutablePropertySource){
@@ -159,7 +158,7 @@ public final class MutableConfigurationProvider {
         }
 
         @Override
-        public void applyRemove(Collection<PropertySource> propertySources, UUID transactionID,
+        public void applyRemove(String transactionID, Collection<PropertySource> propertySources,
                                 String... keys) {
             for(PropertySource propertySource: propertySources){
                 if(propertySource instanceof MutablePropertySource){
@@ -180,7 +179,7 @@ public final class MutableConfigurationProvider {
      */
     private static final ChangePropagationPolicy MOST_SIGNIFICANT_ONLY_POLICY = new ChangePropagationPolicy() {
         @Override
-        public void applyChanges(Collection<PropertySource> propertySources, UUID transactionID,
+        public void applyChanges(String transactionID, Collection<PropertySource> propertySources,
                                  Map<String, String> changes) {
             changes:for(Map.Entry<String,String> en:changes.entrySet()) {
                 for(PropertySource propertySource: propertySources){
@@ -196,7 +195,7 @@ public final class MutableConfigurationProvider {
         }
 
         @Override
-        public void applyChange(Collection<PropertySource> propertySources, UUID transactionID,
+        public void applyChange(String transactionID, Collection<PropertySource> propertySources,
                                 String key, String value) {
             for(PropertySource propertySource: propertySources){
                 if(propertySource instanceof MutablePropertySource){
@@ -210,7 +209,7 @@ public final class MutableConfigurationProvider {
         }
 
         @Override
-        public void applyRemove(Collection<PropertySource> propertySources, UUID transactionID,
+        public void applyRemove(String transactionID, Collection<PropertySource> propertySources,
                                 String... keys) {
             keys:for(String key:keys) {
                 for(PropertySource propertySource: propertySources){
@@ -232,15 +231,15 @@ public final class MutableConfigurationProvider {
      */
     private static final ChangePropagationPolicy NONE_POLICY = new ChangePropagationPolicy() {
         @Override
-        public void applyChanges(Collection<PropertySource> propertySources, UUID transactionID, Map<String, String> changes) {
+        public void applyChanges(String transactionID, Collection<PropertySource> propertySources, Map<String, String> changes) {
         }
 
         @Override
-        public void applyChange(Collection<PropertySource> propertySources, UUID transactionID, String key, String value) {
+        public void applyChange(String transactionID, Collection<PropertySource> propertySources, String key, String value) {
         }
 
         @Override
-        public void applyRemove(Collection<PropertySource> propertySources, UUID transactionID, String... keys) {
+        public void applyRemove(String transactionID, Collection<PropertySource> propertySources, String... keys) {
         }
     };
 
@@ -256,7 +255,7 @@ public final class MutableConfigurationProvider {
         }
 
         @Override
-        public void applyChanges(Collection<PropertySource> propertySources, UUID transactionID,
+        public void applyChanges(String transactionID, Collection<PropertySource> propertySources,
                                  Map<String, String> changes) {
             for(PropertySource propertySource: propertySources){
                 if(propertySource instanceof MutablePropertySource){
@@ -273,7 +272,7 @@ public final class MutableConfigurationProvider {
         }
 
         @Override
-        public void applyChange(Collection<PropertySource> propertySources, UUID transactionID,
+        public void applyChange(String transactionID, Collection<PropertySource> propertySources,
                                 String key, String value) {
             for(PropertySource propertySource: propertySources){
                 if(propertySource instanceof MutablePropertySource){
@@ -288,7 +287,7 @@ public final class MutableConfigurationProvider {
         }
 
         @Override
-        public void applyRemove(Collection<PropertySource> propertySources, UUID transactionID,
+        public void applyRemove(String transactionID, Collection<PropertySource> propertySources,
                                 String... keys) {
             for(PropertySource propertySource: propertySources){
                 if(propertySource instanceof MutablePropertySource){

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/ee79c0ef/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/internal/DefaultMutableConfiguration.java
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/internal/DefaultMutableConfiguration.java b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/internal/DefaultMutableConfiguration.java
index 02f7193..bf75bae 100644
--- a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/internal/DefaultMutableConfiguration.java
+++ b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/internal/DefaultMutableConfiguration.java
@@ -25,6 +25,7 @@ import org.apache.tamaya.TypeLiteral;
 import org.apache.tamaya.mutableconfig.ChangePropagationPolicy;
 import org.apache.tamaya.mutableconfig.MutableConfiguration;
 import org.apache.tamaya.mutableconfig.MutableConfigurationProvider;
+import org.apache.tamaya.mutableconfig.propertysources.ConfigChangeContext;
 import org.apache.tamaya.mutableconfig.spi.MutablePropertySource;
 import org.apache.tamaya.spi.ConfigurationContext;
 import org.apache.tamaya.spi.PropertySource;
@@ -46,7 +47,7 @@ public class DefaultMutableConfiguration implements MutableConfiguration {
     private final Configuration config;
     private ChangePropagationPolicy changePropagationPolicy =
             MutableConfigurationProvider.getApplyAllChangePolicy();
-    private UUID transactionId;
+    private String transactionId;
     private boolean autoCommit = false;
 
     public DefaultMutableConfiguration(Configuration config){
@@ -74,11 +75,32 @@ public class DefaultMutableConfiguration implements MutableConfiguration {
     }
 
     @Override
-    public UUID getTransactionId() {
+    public String getTransactionId() {
         return transactionId;
     }
 
     @Override
+    public ConfigChangeContext getConfigChangeContext(){
+        if(this.transactionId==null){
+            return null;
+        }
+        ConfigChangeContext context = new ConfigChangeContext(this.transactionId);
+        long startedAt = Long.MAX_VALUE;
+        for(MutablePropertySource mps:getMutablePropertySources()){
+            ConfigChangeContext subContext = mps.getConfigChangeContext(this.transactionId);
+            if(subContext!=null){
+                context.putAll(subContext.getAddedProperties());
+                context.removeAll(subContext.getRemovedProperties());
+                if(subContext.getStartedAt()<startedAt){
+                    startedAt = subContext.getStartedAt();
+                }
+            }
+        }
+        context.setStartedAt(startedAt);
+        return context;
+    }
+
+    @Override
     public boolean getAutoCommit() {
         return autoCommit;
     }
@@ -138,12 +160,7 @@ public class DefaultMutableConfiguration implements MutableConfiguration {
 
     @Override
     public boolean isExisting(String keyExpression) {
-        for(MutablePropertySource target:getMutablePropertySources()) {
-            if(target.get(keyExpression)!=null) {
-                return true;
-            }
-        }
-        return false;
+        return this.config.get(keyExpression)!=null;
     }
 
     @Override
@@ -159,8 +176,8 @@ public class DefaultMutableConfiguration implements MutableConfiguration {
 
     @Override
     public MutableConfiguration put(String key, String value) {
-        UUID taID = startTransaction();
-        changePropagationPolicy.applyChange(getPropertySources(), taID, key, value);
+        String taID = startTransaction();
+        changePropagationPolicy.applyChange(taID, getPropertySources(), key, value);
         if(autoCommit){
             commitTransaction();
         }
@@ -169,8 +186,8 @@ public class DefaultMutableConfiguration implements MutableConfiguration {
 
     @Override
     public MutableConfiguration putAll(Map<String, String> properties) {
-        UUID taID = startTransaction();
-        changePropagationPolicy.applyChanges(getPropertySources(), taID, properties);
+        String taID = startTransaction();
+        changePropagationPolicy.applyChanges(taID, getPropertySources(), properties);
         if(autoCommit){
             commitTransaction();
         }
@@ -179,8 +196,8 @@ public class DefaultMutableConfiguration implements MutableConfiguration {
 
     @Override
     public MutableConfiguration remove(String... keys) {
-        UUID taID = startTransaction();
-        changePropagationPolicy.applyRemove(getPropertySources(), taID, keys);
+        String taID = startTransaction();
+        changePropagationPolicy.applyRemove(taID, getPropertySources(), keys);
         for(String key:keys){
             for(MutablePropertySource target:getMutablePropertySources()) {
                 if (target.isRemovable(key)) {
@@ -195,12 +212,12 @@ public class DefaultMutableConfiguration implements MutableConfiguration {
     }
 
     @Override
-    public UUID startTransaction() {
-        UUID taID = transactionId;
+    public String startTransaction() {
+        String taID = transactionId;
         if(taID!=null){
             return taID;
         }
-        taID = UUID.randomUUID();
+        taID = UUID.randomUUID().toString();
         transactionId = taID;
         try {
             for (MutablePropertySource target : getMutablePropertySources()) {
@@ -214,7 +231,7 @@ public class DefaultMutableConfiguration implements MutableConfiguration {
 
     @Override
     public void commitTransaction() {
-        UUID taID = transactionId;
+        String taID = transactionId;
         if(taID==null){
             LOG.warning("No active transaction on this thread, ignoring commit.");
             return;
@@ -231,7 +248,7 @@ public class DefaultMutableConfiguration implements MutableConfiguration {
 
     @Override
     public void rollbackTransaction() {
-        UUID taID = transactionId;
+        String taID = transactionId;
         if(taID==null){
             LOG.warning("No active transaction on this thread, ignoring rollback.");
             return;
@@ -247,7 +264,7 @@ public class DefaultMutableConfiguration implements MutableConfiguration {
 
     @Override
     public MutableConfiguration remove(Collection<String> keys) {
-        UUID taID = startTransaction();
+        String taID = startTransaction();
         for(String key:keys){
             for(MutablePropertySource target:getMutablePropertySources()) {
                 if (target.isRemovable(key)) {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/ee79c0ef/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/AbstractMutablePropertySource.java
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/AbstractMutablePropertySource.java b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/AbstractMutablePropertySource.java
index 7931019..8133ab4 100644
--- a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/AbstractMutablePropertySource.java
+++ b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/AbstractMutablePropertySource.java
@@ -26,7 +26,6 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
-import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
@@ -38,7 +37,7 @@ public abstract class AbstractMutablePropertySource extends BasePropertySource
     /**
      * Map with the curren transactions, identified by transactionId.
      */
-    protected final Map<UUID, ConfigChangeContext> transactions = new ConcurrentHashMap<>();
+    protected final Map<String, ConfigChangeContext> transactions = new ConcurrentHashMap<>();
 
     /**
      * Constructor udsing zero' as default ordinal.
@@ -60,7 +59,7 @@ public abstract class AbstractMutablePropertySource extends BasePropertySource
      * @param transactionId the transaction id, not null.
      * @return the removed property keys, never null.
      */
-    protected final Set<String> getRemovedProperties(UUID transactionId) {
+    protected final Set<String> getRemovedProperties(String transactionId) {
         ConfigChangeContext ctx = this.transactions.get(transactionId);
         if(ctx!=null) {
             return ctx.getRemovedProperties();
@@ -73,7 +72,7 @@ public abstract class AbstractMutablePropertySource extends BasePropertySource
      * @param transactionId the transaction id, not null.
      * @return the added property keys, never null.
      */
-    protected final Map<String,String> getAddedProperties(UUID transactionId) {
+    protected final Map<String,String> getAddedProperties(String transactionId) {
         ConfigChangeContext ctx = this.transactions.get(transactionId);
         if(ctx!=null) {
             return ctx.getAddedProperties();
@@ -92,7 +91,7 @@ public abstract class AbstractMutablePropertySource extends BasePropertySource
     }
 
     @Override
-    public final MutablePropertySource put(UUID transactionId, String key, String value) {
+    public final MutablePropertySource put(String transactionId, String key, String value) {
         ConfigChangeContext ctx = this.transactions.get(transactionId);
         if(ctx==null) {
             throw new IllegalStateException("No such transaction: " + transactionId);
@@ -102,7 +101,7 @@ public abstract class AbstractMutablePropertySource extends BasePropertySource
     }
 
     @Override
-    public final MutablePropertySource putAll(UUID transactionId, Map<String, String> properties) {
+    public final MutablePropertySource putAll(String transactionId, Map<String, String> properties) {
         ConfigChangeContext ctx = this.transactions.get(transactionId);
         if(ctx==null) {
             throw new IllegalStateException("No such transaction: " + transactionId);
@@ -112,7 +111,7 @@ public abstract class AbstractMutablePropertySource extends BasePropertySource
     }
 
     @Override
-    public final MutablePropertySource remove(UUID transactionId, String... keys) {
+    public final MutablePropertySource remove(String transactionId, String... keys) {
         ConfigChangeContext ctx = this.transactions.get(transactionId);
         if(ctx==null) {
             throw new IllegalStateException("No such transaction: " + transactionId);
@@ -122,7 +121,7 @@ public abstract class AbstractMutablePropertySource extends BasePropertySource
     }
 
     @Override
-    public final MutablePropertySource remove(UUID transactionId, Collection<String> keys) {
+    public final MutablePropertySource remove(String transactionId, Collection<String> keys) {
         ConfigChangeContext ctx = this.transactions.get(transactionId);
         if(ctx==null) {
             throw new IllegalStateException("No such transaction: " + transactionId);
@@ -132,7 +131,7 @@ public abstract class AbstractMutablePropertySource extends BasePropertySource
     }
 
     @Override
-    public final void startTransaction(UUID transactionId) {
+    public final void startTransaction(String transactionId) {
         ConfigChangeContext ctx = this.transactions.get(transactionId);
         if(ctx==null) {
             this.transactions.put(transactionId, new ConfigChangeContext(transactionId));
@@ -140,7 +139,7 @@ public abstract class AbstractMutablePropertySource extends BasePropertySource
     }
 
     @Override
-    public final void commitTransaction(UUID transactionId) {
+    public final void commitTransaction(String transactionId) {
         ConfigChangeContext ctx = this.transactions.remove(transactionId);
         if(ctx==null) {
             throw new IllegalStateException("No such transaction: " + transactionId);
@@ -157,7 +156,13 @@ public abstract class AbstractMutablePropertySource extends BasePropertySource
     protected abstract void commitInternal(ConfigChangeContext context);
 
     @Override
-    public final void rollbackTransaction(UUID transactionId) {
+    public final void rollbackTransaction(String transactionId) {
         this.transactions.remove(transactionId);
     }
+
+    @Override
+    public ConfigChangeContext getConfigChangeContext(String transactionID){
+        return this.transactions.get(transactionID);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/ee79c0ef/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/ConfigChangeContext.java
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/ConfigChangeContext.java b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/ConfigChangeContext.java
index 8551cad..b0f46f1 100644
--- a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/ConfigChangeContext.java
+++ b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/ConfigChangeContext.java
@@ -25,7 +25,6 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
-import java.util.UUID;
 
 /**
  * Transactional context used for managing configuration changes within an {@link AbstractMutablePropertySource}.
@@ -34,7 +33,7 @@ public final class ConfigChangeContext {
     /**
      * The transaction id.
      */
-    private UUID transactionId;
+    private String transactionId;
     /**
      * The starting point.
      */
@@ -52,15 +51,24 @@ public final class ConfigChangeContext {
      * Creates a new instance bound to the given transaction.
      * @param transactionID the transaction ID, not null.
      */
-    public ConfigChangeContext(UUID transactionID){
+    public ConfigChangeContext(String transactionID){
         this.transactionId = Objects.requireNonNull(transactionID);
     }
 
     /**
+     * Sets the started at value. By default {@link #startedAt} is already set on instance creation to
+     * {@code System.currentTimeMillis()}.
+     * @param startedAt the new UTC POSIX timestamp in millis.
+     */
+    public void setStartedAt(long startedAt) {
+        this.startedAt = startedAt;
+    }
+
+    /**
      * Get the corresppnding transaction ID of this instance.
      * @return the transaction ID, never null.
      */
-    public UUID getTransactionID(){
+    public String getTransactionID(){
         return transactionId;
     }
 
@@ -95,6 +103,7 @@ public final class ConfigChangeContext {
      */
     public void put(String key, String value) {
         this.addedProperties.put(key, value);
+        this.removedProperties.remove(key);
     }
 
     /**
@@ -103,6 +112,16 @@ public final class ConfigChangeContext {
      */
     public void putAll(Map<String, String> properties) {
         this.addedProperties.putAll(properties);
+        this.removedProperties.removeAll(properties.keySet());
+    }
+
+    /**
+     * Remove all the given keys, ir present.
+     * @param key the key to be removed, not null.
+     */
+    public void remove(String key) {
+        this.removedProperties.add(key);
+        this.addedProperties.remove(key);
     }
 
     /**
@@ -111,6 +130,9 @@ public final class ConfigChangeContext {
      */
     public void removeAll(Collection<String> keys) {
         this.removedProperties.addAll(keys);
+        for(String k:keys) {
+            this.addedProperties.remove(k);
+        }
     }
 
     /**
@@ -149,4 +171,5 @@ public final class ConfigChangeContext {
                 '}';
     }
 
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/ee79c0ef/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/spi/MutablePropertySource.java
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/spi/MutablePropertySource.java b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/spi/MutablePropertySource.java
index 0872735..cf4b6ee 100644
--- a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/spi/MutablePropertySource.java
+++ b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/spi/MutablePropertySource.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tamaya.mutableconfig.spi;
 
+import org.apache.tamaya.mutableconfig.propertysources.ConfigChangeContext;
 import org.apache.tamaya.spi.PropertySource;
 
 import java.util.Collection;
@@ -59,7 +60,7 @@ public interface MutablePropertySource extends PropertySource {
      * @return this instance for optional chaining of operations, nrvrt null.
      * @throws org.apache.tamaya.ConfigException if the key/value cannot be added, or the request is read-only.
      */
-    MutablePropertySource put(UUID transactionId, String key, String value);
+    MutablePropertySource put(String transactionId, String key, String value);
 
 
     /**
@@ -75,7 +76,7 @@ public interface MutablePropertySource extends PropertySource {
      * @return this instance for optional chaining of operations, nrvrt null.
      * @throws org.apache.tamaya.ConfigException if any of the given properties could not be written, or the request is read-only.
      */
-    MutablePropertySource putAll(UUID transactionId, Map<String, String> properties);
+    MutablePropertySource putAll(String transactionId, Map<String, String> properties);
 
     /**
      * Removes all given configuration entries. This method should check that all given properties are
@@ -90,7 +91,7 @@ public interface MutablePropertySource extends PropertySource {
      * @return this instance for optional chaining of operations, nrvrt null.
      * @throws org.apache.tamaya.ConfigException if any of the given keys could not be removedProperties, or the request is read-only.
      */
-    MutablePropertySource remove(UUID transactionId, Collection<String> keys);
+    MutablePropertySource remove(String transactionId, Collection<String> keys);
 
     /**
      * Removes all given configuration entries. This method should check that all given properties are
@@ -105,7 +106,7 @@ public interface MutablePropertySource extends PropertySource {
      * @return this instance for optional chaining of operations, nrvrt null.
      * @throws org.apache.tamaya.ConfigException if any of the given keys could not be removedProperties, or the request is read-only.
      */
-    MutablePropertySource remove(UUID transactionId, String... keys);
+    MutablePropertySource remove(String transactionId, String... keys);
 
     /**
      * Commits the request. After a commit the change is not editable anymore. All changes applied will be written to
@@ -117,17 +118,24 @@ public interface MutablePropertySource extends PropertySource {
      * @throws org.apache.tamaya.ConfigException if the request already has been committed or cancelled, or the commit fails.
      * @param transactionId the transaction id, not null.
      */
-    void commitTransaction(UUID transactionId);
+    void commitTransaction(String transactionId);
 
     /**
      * Rollback any changes leaving everything unchanged. This will rollback all changes applied since the last commit.
      * @param transactionId the transaction id, not null.
      */
-    void rollbackTransaction(UUID transactionId);
+    void rollbackTransaction(String transactionId);
 
     /**
      * Start a new transaction context with the given isolation policy.
      * @param transactionId the transaction id, not null.
      */
-    void startTransaction(UUID transactionId);
+    void startTransaction(String transactionId);
+
+    /**
+     * Get the transactional context for the given transaction ID.
+     * @param transactionID the transaction ID, not null.
+     * @return the transactional context, or null, if no such cointext is present.
+     */
+    ConfigChangeContext getConfigChangeContext(String transactionID);
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/ee79c0ef/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/ConfigEditorWidget.java
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/ConfigEditorWidget.java b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/ConfigEditorWidget.java
index 7f0100f..b614e2a 100644
--- a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/ConfigEditorWidget.java
+++ b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/ConfigEditorWidget.java
@@ -18,11 +18,7 @@
  */
 package org.apache.tamaya.mutableconfig.ui;
 
-import com.vaadin.ui.Button;
-import com.vaadin.ui.FormLayout;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
+import com.vaadin.ui.*;
 import org.apache.tamaya.mutableconfig.MutableConfiguration;
 import org.apache.tamaya.spi.ServiceContextManager;
 import org.apache.tamaya.ui.services.MessageProvider;
@@ -36,6 +32,7 @@ public class ConfigEditorWidget extends FormLayout {
 
     private MutableConfiguration mutableConfig;
     private ProtocolWidget logWriter;
+    private TransactionControlWidget taWidget;
 
     private TextField configKey = new TextField(
             ServiceContextManager.getServiceContext().getService(MessageProvider.class)
@@ -50,9 +47,10 @@ public class ConfigEditorWidget extends FormLayout {
     private Button readButton = new Button(ServiceContextManager.getServiceContext().getService(MessageProvider.class)
             .getMessage("view.edit.button.readKey"));
 
-    public ConfigEditorWidget(MutableConfiguration mutableConfig, ProtocolWidget logWriter) {
+    public ConfigEditorWidget(MutableConfiguration mutableConfig, ProtocolWidget logWriter, TransactionControlWidget taWidget) {
         this.mutableConfig = Objects.requireNonNull(mutableConfig);
         this.logWriter = Objects.requireNonNull(logWriter);
+        this.taWidget = Objects.requireNonNull(taWidget);
         configKey.setWidth(50, Unit.PERCENTAGE);
         configValue.setWidth(50, Unit.PERCENTAGE);
         addComponents(configKey, configValue);
@@ -69,10 +67,17 @@ public class ConfigEditorWidget extends FormLayout {
             public void buttonClick(Button.ClickEvent clickEvent) {
                 if(mutableConfig.isWritable(configKey.getValue())){
                     mutableConfig.put(configKey.getValue(), configValue.getValue());
+                    Notification.show("Added " + configKey.getValue() + " = " + configValue.getValue(),
+                            Notification.Type.TRAY_NOTIFICATION);
                     logWriter.println(" - PUT " + configKey.getValue() + " = " + configValue.getValue());
+                    configKey.setValue("");
+                    configValue.setValue("");
                 }else{
+                    Notification.show("Could not add " + configKey.getValue() + " = " + configValue.getValue(),
+                            Notification.Type.ERROR_MESSAGE);
                     logWriter.println(" - PUT " + configKey.getValue() + " rejected - not writable.");
                 }
+                taWidget.update();
             }
         });
         removeButton.addClickListener(new Button.ClickListener() {
@@ -81,9 +86,16 @@ public class ConfigEditorWidget extends FormLayout {
                 if(mutableConfig.isRemovable(configKey.getValue())){
                     mutableConfig.remove(configKey.getValue());
                     logWriter.println(" - DEL " + configKey.getValue());
+                    Notification.show("Removed " + configKey.getValue(),
+                            Notification.Type.TRAY_NOTIFICATION);
+                    configKey.setValue("");
+                    configValue.setValue("");
                 }else{
+                    Notification.show("Could not remove " + configKey.getValue(),
+                            Notification.Type.ERROR_MESSAGE);
                     logWriter.println(" - DEL " + configKey.getValue() + " rejected - not removable.");
                 }
+                taWidget.update();
             }
         });
         readButton.addClickListener(new Button.ClickListener() {
@@ -92,12 +104,17 @@ public class ConfigEditorWidget extends FormLayout {
                 if(mutableConfig.isExisting(configKey.getValue())){
                     String key = configKey.getValue();
                     configValue.setValue(mutableConfig.get(key));
+                    Notification.show("Successfully read " + configKey.getValue(),
+                            Notification.Type.TRAY_NOTIFICATION);
                     logWriter.println(" - GET " + key + " = " + configValue.getValue());
                     logWriter.println("   - removable: " + mutableConfig.isRemovable(key));
                     logWriter.println("   - writable : " + mutableConfig.isWritable(key));
                 }else{
+                    Notification.show("Could not read " + configKey.getValue(),
+                            Notification.Type.ERROR_MESSAGE);
                     logWriter.println(" - GET " + configKey.getValue() + " rejected - not existing.");
                 }
+                taWidget.update();
             }
         });
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/ee79c0ef/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/ConfigUpdaterView.java
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/ConfigUpdaterView.java b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/ConfigUpdaterView.java
index 2ca3646..d2b7745 100644
--- a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/ConfigUpdaterView.java
+++ b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/ConfigUpdaterView.java
@@ -50,6 +50,11 @@ public class ConfigUpdaterView extends VerticalSpacedLayout implements View {
         }
 
         @Override
+        public String getName() {
+            return "view.edit.name";
+        }
+
+        @Override
         public String getUrlPattern() {
             return "/edit";
         }
@@ -61,7 +66,7 @@ public class ConfigUpdaterView extends VerticalSpacedLayout implements View {
         }
 
         @Override
-        public View createView(){
+        public View createView(Object... params){
             return new ConfigUpdaterView();
         }
     }
@@ -73,7 +78,7 @@ public class ConfigUpdaterView extends VerticalSpacedLayout implements View {
     private TransactionControlWidget taControlWidget = new TransactionControlWidget(mutableConfig,
             protocolArea);
 
-    private ConfigEditorWidget editorWidget = new ConfigEditorWidget(mutableConfig, protocolArea);
+    private ConfigEditorWidget editorWidget = new ConfigEditorWidget(mutableConfig, protocolArea, taControlWidget);
 
 
     public ConfigUpdaterView() {
@@ -90,7 +95,8 @@ public class ConfigUpdaterView extends VerticalSpacedLayout implements View {
             protocolArea.print(ps.getName(), ", ");
         }
         protocolArea.println();
-        addComponents(caption, description, editorWidget, protocolArea, taControlWidget);
+        protocolArea.setHeight(100, Unit.PERCENTAGE);
+        addComponents(caption, description, editorWidget, taControlWidget, protocolArea);
     }
 
     private String getCaption(String key, String value) {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/ee79c0ef/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/ProtocolWidget.java
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/ProtocolWidget.java b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/ProtocolWidget.java
index 5ceaaa6..29bc424 100644
--- a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/ProtocolWidget.java
+++ b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/ProtocolWidget.java
@@ -42,6 +42,7 @@ public class ProtocolWidget extends VerticalLayout{
 
     public ProtocolWidget(){
         textArea.setWidth(100, Unit.PERCENTAGE);
+        textArea.setHeight(100, Unit.PERCENTAGE);
         textArea.setReadOnly(true);
         clearButton.addClickListener(new Button.ClickListener() {
             @Override
@@ -52,6 +53,7 @@ public class ProtocolWidget extends VerticalLayout{
         });
         textArea.setSizeFull();
         addComponents(textArea, clearButton);
+        setHeight(100, Unit.PERCENTAGE);
     }
 
     public PrintWriter getWriter(){

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/ee79c0ef/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/TransactionControlWidget.java
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/TransactionControlWidget.java b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/TransactionControlWidget.java
index 49222c8..8150c4a 100644
--- a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/TransactionControlWidget.java
+++ b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ui/TransactionControlWidget.java
@@ -22,30 +22,39 @@ import com.vaadin.data.Property;
 import com.vaadin.ui.Button;
 import com.vaadin.ui.CheckBox;
 import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Field;
 import com.vaadin.ui.HorizontalLayout;
 import com.vaadin.ui.Notification;
+import com.vaadin.ui.TextArea;
 import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
 import org.apache.tamaya.mutableconfig.ChangePropagationPolicy;
 import org.apache.tamaya.mutableconfig.MutableConfiguration;
 import org.apache.tamaya.mutableconfig.MutableConfigurationProvider;
+import org.apache.tamaya.mutableconfig.propertysources.ConfigChangeContext;
 import org.apache.tamaya.spi.ServiceContextManager;
 import org.apache.tamaya.ui.components.VerticalSpacedLayout;
 import org.apache.tamaya.ui.services.MessageProvider;
 
 import java.util.Arrays;
+import java.util.Map;
 import java.util.Objects;
 
 /**
  * Tamaya UI view to change configuration.
  */
-public class TransactionControlWidget extends VerticalSpacedLayout {
+public class TransactionControlWidget extends HorizontalLayout {
+
+    private Field taID = new TextField("Transaction ID");
+    private Field taContent = new TextArea("Transaction Context");
+    private VerticalLayout taLayout = new VerticalLayout(taID, taContent);
 
     private CheckBox autoCommit = new CheckBox(ServiceContextManager.getServiceContext()
             .getService(MessageProvider.class).getMessage("view.edit.box.autoCommit"));
 
     private ComboBox changePropagationPolicy = new ComboBox(ServiceContextManager.getServiceContext()
             .getService(MessageProvider.class).getMessage("view.edit.select.propagationPolicy"),
-            Arrays.asList(new String[]{"ALL", "MOST_SIGNIFICANT_ONLY", "SELECTIVE", "NONE", "CUSTOM"}));
+            Arrays.asList(new String[]{"ALL", "MOST_SIGNIFICANT_ONLY", "NONE", "CUSTOM"}));
 
     private TextField changePropagationPolicyOther = new TextField(
             ServiceContextManager.getServiceContext().getService(MessageProvider.class)
@@ -60,8 +69,15 @@ public class TransactionControlWidget extends VerticalSpacedLayout {
     private Button commitTAButton = new Button(ServiceContextManager.getServiceContext().getService(MessageProvider.class)
             .getMessage("view.edit.button.commitTransaction"));
     private ProtocolWidget logWriter;
+    private VerticalSpacedLayout leftLayout = new VerticalSpacedLayout();
 
     public TransactionControlWidget(MutableConfiguration mutableConfig, ProtocolWidget logWriter) {
+        taContent.setReadOnly(true);
+        taContent.setWidth(600, Unit.PIXELS);
+        taContent.setHeight(250, Unit.PIXELS);
+        taLayout.setWidth(600, Unit.PIXELS);
+        taID.setReadOnly(true);
+        taID.setWidth(100, Unit.PERCENTAGE);
         this.mutableConfig = Objects.requireNonNull(mutableConfig);
         this.logWriter = Objects.requireNonNull(logWriter);
         changePropagationPolicy.setWidth(300, Unit.PIXELS);
@@ -69,8 +85,10 @@ public class TransactionControlWidget extends VerticalSpacedLayout {
                 setWidth(600, Unit.PIXELS);
         HorizontalLayout buttonLayout = new HorizontalLayout();
         buttonLayout.addComponents(startTAButton, commitTAButton, rollbackTAButton);
-        addComponents(changePropagationPolicy, changePropagationPolicyOther, buttonLayout);
+        leftLayout.addComponents(changePropagationPolicy, changePropagationPolicyOther, buttonLayout);
+        addComponents(leftLayout, taLayout);
         initActions();
+        update();
     }
 
     private void initActions() {
@@ -78,6 +96,13 @@ public class TransactionControlWidget extends VerticalSpacedLayout {
             @Override
             public void valueChange(Property.ValueChangeEvent valueChangeEvent) {
                 mutableConfig.setAutoCommit(autoCommit.getValue());
+                if(mutableConfig.getAutoCommit()) {
+                    Notification.show("Autocommit is now ON.",
+                            Notification.Type.TRAY_NOTIFICATION);
+                }else{
+                    Notification.show("Autocommit is now OFF.",
+                            Notification.Type.TRAY_NOTIFICATION);
+                }
                 logWriter.println(" - Set Auto-Commit to " + autoCommit.getValue());
             }
         });
@@ -93,7 +118,7 @@ public class TransactionControlWidget extends VerticalSpacedLayout {
                             mutableConfig.setChangePropagationPolicy(
                                     (ChangePropagationPolicy) Class.forName(className).newInstance());
                             logWriter.println(" - Set ChangePropagationPolicy " + className);
-                            Notification.show("Successfully applied change policy: " + className);
+                            Notification.show("ChangePropagationPolicy is now CUSTOM: " + className);
                         } catch (Exception e) {
                             Notification.show("Failed to apply change policy: " + className + ": " + e,
                                     Notification.Type.ERROR_MESSAGE);
@@ -104,19 +129,16 @@ public class TransactionControlWidget extends VerticalSpacedLayout {
                     case "MOST_SIGNIFICANT_ONLY":
                         mutableConfig.setChangePropagationPolicy(
                                 MutableConfigurationProvider.getApplyMostSignificantOnlyChangePolicy());
+                        Notification.show("ChangePropagationPolicy is now MOST_SIGNIFICANT_ONLY.",
+                                Notification.Type.TRAY_NOTIFICATION);
                         logWriter.println(" - Set ChangePropagationPolicy to MOST_SIGNIFICANT_ONLY.");
                         break;
-                    case "SELECTIVE":
-//                        mutableConfig.setChangePropagationPolicy(
-//                                MutableConfigurationProvider.getApplySelectiveChangePolicy("source1", "source2");
-                        Notification.show("Selective Backends are not yet supported by the UI.",
-                                Notification.Type.WARNING_MESSAGE);
-                        break;
                     case "NONE":
                         Notification.show("Applying none equals being your config READ-ONLY.",
                                 Notification.Type.ASSISTIVE_NOTIFICATION);
                         mutableConfig.setChangePropagationPolicy(
                                 MutableConfigurationProvider.getApplyNonePolicy());
+                        Notification.show("ChangePropagationPolicy is now NONE.", Notification.Type.TRAY_NOTIFICATION);
                         logWriter.println(" - Set ChangePropagationPolicy to NONE.");
                         break;
                     case "CUSTOM":
@@ -126,6 +148,7 @@ public class TransactionControlWidget extends VerticalSpacedLayout {
                     default:
                         mutableConfig.setChangePropagationPolicy(
                                 MutableConfigurationProvider.getApplyAllChangePolicy());
+                        Notification.show("ChangePropagationPolicy is now ALL.", Notification.Type.TRAY_NOTIFICATION);
                         logWriter.println(" - Set ChangePropagationPolicy to ALL.");
                 }
             }
@@ -133,26 +156,75 @@ public class TransactionControlWidget extends VerticalSpacedLayout {
         startTAButton.addClickListener(new Button.ClickListener() {
             @Override
             public void buttonClick(Button.ClickEvent clickEvent) {
-                mutableConfig.startTransaction();
-                logWriter.println("Started Transaction: " + mutableConfig.getTransactionId());
+                String taId = mutableConfig.startTransaction();
+                update();
+                Notification.show("Transaction started: " + taId, Notification.Type.TRAY_NOTIFICATION);
+                logWriter.println("Started Transaction: " + taId);
             }
         });
         rollbackTAButton.addClickListener(new Button.ClickListener() {
             @Override
             public void buttonClick(Button.ClickEvent clickEvent) {
+                String taId = mutableConfig.getTransactionId();
                 mutableConfig.rollbackTransaction();
-                logWriter.println("Rolled back Transaction: " + mutableConfig.getTransactionId());
+                update();
+                Notification.show("Transaction rolled back: " + taId, Notification.Type.TRAY_NOTIFICATION);
+                logWriter.println("Rolled back Transaction: " + taId);
             }
         });
         commitTAButton.addClickListener(new Button.ClickListener() {
             @Override
             public void buttonClick(Button.ClickEvent clickEvent) {
+                String taId = mutableConfig.getTransactionId();
                 mutableConfig.commitTransaction();
-                logWriter.println("Committed Transaction: " + mutableConfig.getTransactionId());
+                update();
+                Notification.show("Transaction comitted: "  + taId, Notification.Type.TRAY_NOTIFICATION);
+                logWriter.println("Committed Transaction: " + taId);
             }
         });
     }
 
+    public void update(){
+        taID.setReadOnly(false);
+        taContent.setReadOnly(false);
+        if(mutableConfig.getTransactionId()==null){
+            taID.setValue("N/A");
+        }else {
+            taID.setValue(mutableConfig.getTransactionId());
+        }
+        StringBuilder b = new StringBuilder();
+        ConfigChangeContext changes = mutableConfig.getConfigChangeContext();
+        if(mutableConfig.getTransactionId()==null){
+            startTAButton.setEnabled(true);
+            rollbackTAButton.setEnabled(false);
+            commitTAButton.setEnabled(false);
+            changePropagationPolicy.setEnabled(true);
+            changePropagationPolicyOther.setEnabled(true);
+            b.append("No Transaction Context available.");
+        }else{
+            b.append("TA ID      : ").append(changes.getTransactionID()).append('\n');
+            b.append("Started at : ").append(changes.getStartedAt()).append("\n\n");
+            b.append("PUT:\n");
+            b.append("====\n");
+            for(Map.Entry<String,String> en:changes.getAddedProperties().entrySet()){
+                b.append(en.getKey()).append(" = ").append(en.getValue()).append("\n\n");
+            }
+            b.append("DEL:\n");
+            b.append("====\n");
+            for(String key:changes.getRemovedProperties()){
+                b.append(key).append("\n\n");
+            }
+            startTAButton.setEnabled(false);
+            rollbackTAButton.setEnabled(true);
+            commitTAButton.setEnabled(true);
+            changePropagationPolicy.setEnabled(false);
+            changePropagationPolicyOther.setEnabled(false);
+        }
+        taContent.setValue(b.toString());
+        taID.setReadOnly(true);
+        taContent.setReadOnly(true);
+    }
+
     private String getCaption(String key, String value) {
         int index = key.lastIndexOf('.');
         if (index < 0) {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/ee79c0ef/mutable-config/src/main/resources/ui/lang/tamaya.properties
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/resources/ui/lang/tamaya.properties b/mutable-config/src/main/resources/ui/lang/tamaya.properties
index f1ce00a..3a8be1a 100644
--- a/mutable-config/src/main/resources/ui/lang/tamaya.properties
+++ b/mutable-config/src/main/resources/ui/lang/tamaya.properties
@@ -17,10 +17,11 @@
 # under the License.
 #
 view.edit.name=Edit Configuration
-view.edit.description=This is a simple Tamaya configuration editor for changing configuration values.
+view.edit.description=This is a simple Tamaya configuration editor for changing configuration values. \
+  It gives you full control on Tamaya's mutability features and transactions.
 view.edit.select.propagationPolicy=Change Propagation Policy
 view.edit.text.propagationPolicyOther=Custom Change Propagation Policy (Class)
-view.edit.textArea.general=General Infos
+view.edit.textArea.protocol=Action Protocol
 view.edit.box.autoCommit=Auto-Commit
 
 view.edit.button.startTransaction=Start TA

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/ee79c0ef/mutable-config/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
----------------------------------------------------------------------
diff --git a/mutable-config/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySource b/mutable-config/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
index 7f20084..609b9fe 100644
--- a/mutable-config/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
+++ b/mutable-config/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
@@ -17,4 +17,4 @@
 # under the License.
 #
 org.apache.tamaya.mutableconfig.internal.WritablePropertiesSource
-org.apache.tamaya.mutableconfig.internal.WritableXmlPropertiesSource
\ No newline at end of file
+org.apache.tamaya.mutableconfig.internal.WritableXmlPropertiesSource