Config no longer implements Identifiable because this was in violation of the contrac...
[xmlrouter] / impl / src / main / java / org / wamblee / xmlrouter / impl / XMLRouterConfigurationImpl.java
index b0b02713017ed583b421b3f96e54c5015fc2bf4a..7c570ff23baaa723c4e0c105919f24751c19702c 100644 (file)
  */
 package org.wamblee.xmlrouter.impl;
 
+import java.util.ArrayList;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
+import org.wamblee.general.Pair;
+import org.wamblee.xmlrouter.common.Id;
+
 /**
  * Implements the XML Router configuration interface including the required
  * locking.
@@ -33,39 +37,40 @@ public class XMLRouterConfigurationImpl implements XMLRouterConfiguration {
     private ExtendedRouterConfig config;
     private TransformationPaths transformations;
 
-    public XMLRouterConfigurationImpl(ExtendedRouterConfig aConfig,
-        TransformationPaths aTransformations) {
+    public XMLRouterConfigurationImpl(ExtendedRouterConfig aConfig) {
         config = aConfig;
-        transformations = aTransformations;
-    }
-
-    @Override
-    public void startConfigurationChange() {
-        wlock.lock();
+        transformations = new TransformationPaths(config.transformationConfig()
+            .values());
     }
 
-    @Override
-    public void endConfigurationChange() {
-        wlock.unlock();
+    public XMLRouterConfigurationImpl() {
+        this(new CompositeRouterConfig(new Id<RouterConfig>("routerconfig"),
+            new ArrayList<RouterConfig>()));
     }
 
     @Override
-    public void startPublishEvent() {
+    public Pair<ExtendedRouterConfig, TransformationPaths> getConfig() {
         rlock.lock();
+        try {
+            return new Pair<ExtendedRouterConfig, TransformationPaths>(config,
+                transformations);
+        } finally {
+            rlock.unlock();
+        }
     }
 
     @Override
-    public void endPublishEvent() {
-        rlock.unlock();
-    }
+    public void setRouterConfig(ExtendedRouterConfig aConfig) {
 
-    @Override
-    public ExtendedRouterConfig routerConfig() {
-        return config;
-    }
+        TransformationPaths newTransformations = new TransformationPaths(
+            aConfig.transformationConfig().values());
 
-    @Override
-    public TransformationPaths transformations() {
-        return transformations;
+        wlock.lock();
+        try {
+            config = aConfig;
+            transformations = newTransformations;
+        } finally {
+            wlock.unlock();
+        }
     }
 }