CompositeConfig tested.
[xmlrouter] / impl / src / main / java / org / wamblee / xmlrouter / impl / XMLRouterConfigService.java
index ca5e41748e08f8e22851c7ab0b21760f4e904a0f..203e56fd5d0e1632cf65ba6b5ec40da1853541fb 100644 (file)
@@ -22,6 +22,9 @@ import org.wamblee.xmlrouter.config.Config;
 import org.wamblee.xmlrouter.config.RouterConfig;
 import org.wamblee.xmlrouter.config.RouterConfigService;
 
+// TODO pass unique id of config service in the constructor to allow multiple instances with
+// unique ids (ServiceFactory) 
+
 /**
  * Router configuration service providing an atomic configuration API for the
  * XML router.
@@ -37,57 +40,37 @@ public class XMLRouterConfigService implements RouterConfigService {
     public XMLRouterConfigService(XMLRouterConfiguration aConfig) {
         sequence = new AtomicLong(1L);
         config = aConfig;
-        routerConfigs = new ConfigImpl<RouterConfig>(sequence) {
-            public RouterConfig wrap(Id<RouterConfig> aId, RouterConfig aT) {
+        routerConfigs = new ConfigImpl<RouterConfig>(new Id<Config>("config")) {
+            public RouterConfig wrap(String aPrefix, RouterConfig aT) {
                 return aT;
             }
         };
     }
 
     @Override
-    public RouterConfig emptyConfig() {
-        return new SingleRouterConfig(sequence);
+    public RouterConfig emptyConfig(String aId) {
+        // TODO check AP{ impacts.
+        return new SingleRouterConfig(new Id<RouterConfig>(aId));
     }
 
     @Override
-    public Id<RouterConfig> apply(RouterConfig aConfig,
-        Id<RouterConfig> aOldConfig) {
-        config.startConfigurationChange();
-        try {
-            return applyImpl(aConfig, aOldConfig);
-        } finally {
-            config.endConfigurationChange();
-        }
-    }
-
-    private Id<RouterConfig> applyImpl(RouterConfig aConfig,
-        Id<RouterConfig> aOldConfig) {
+    public void apply(RouterConfig aConfig, Id<RouterConfig> aOldConfig) {
         if (aOldConfig != null) {
             routerConfigs.remove(aOldConfig);
         }
-        Id<RouterConfig> id = routerConfigs.add(aConfig);
+        routerConfigs.add(aConfig);
         update();
-        return id;
     }
 
     @Override
     public void clear(Id<RouterConfig> aConfig) {
-        config.startConfigurationChange();
-        try {
-            clearImpl(aConfig);
-        } finally {
-            config.endConfigurationChange();
-        }
-    }
-
-    private void clearImpl(Id<RouterConfig> aConfig) {
         routerConfigs.remove(aConfig);
         update();
     }
 
     private void update() {
         ExtendedRouterConfig newconfig = new CompositeRouterConfig(
-            routerConfigs.map().values());
+            new Id<RouterConfig>("routerconfig"), routerConfigs.values());
         config.setRouterConfig(newconfig);
     }