Config no longer implements Identifiable because this was in violation of the contrac...
[xmlrouter] / impl / src / main / java / org / wamblee / xmlrouter / impl / XMLRouterConfigService.java
index 230a6dcf6d8bfc06e77efcca22dff88374833808..a20da62d53f60ca6a6b36306b0177b7a41db29c1 100644 (file)
@@ -18,9 +18,9 @@ package org.wamblee.xmlrouter.impl;
 import java.util.concurrent.atomic.AtomicLong;
 
 import org.wamblee.xmlrouter.common.Id;
-import org.wamblee.xmlrouter.config.Config;
-import org.wamblee.xmlrouter.config.RouterConfig;
-import org.wamblee.xmlrouter.config.RouterConfigService;
+import org.wamblee.xmlrouter.config.DocumentType;
+import org.wamblee.xmlrouter.config.Filter;
+import org.wamblee.xmlrouter.config.Transformation;
 
 /**
  * Router configuration service providing an atomic configuration API for the
@@ -30,34 +30,60 @@ import org.wamblee.xmlrouter.config.RouterConfigService;
  */
 public class XMLRouterConfigService implements RouterConfigService {
 
+    private String application;
     private AtomicLong sequence;
     private XMLRouterConfiguration config;
     private Config<RouterConfig> routerConfigs;
 
-    public XMLRouterConfigService(XMLRouterConfiguration aConfig) {
+    public XMLRouterConfigService(String aApplication,
+        XMLRouterConfiguration aConfig) {
+        application = aApplication;
         sequence = new AtomicLong(1L);
         config = aConfig;
-        routerConfigs = new ConfigImpl<RouterConfig>(sequence) {
-            public RouterConfig wrap(Id<RouterConfig> aId, RouterConfig aT) {
-                return aT;
+        routerConfigs = new ConfigImpl<RouterConfig>(RouterConfig.class,
+            aApplication) {
+            public RouterConfig wrap(final RouterConfig aT) {
+                return new RouterConfig() {
+                    @Override
+                    public Id<RouterConfig> getId() {
+                        return aT.getId();
+                    }
+
+                    @Override
+                    public Config<DocumentType> documentTypeConfig() {
+                        return aT.documentTypeConfig();
+                    }
+
+                    @Override
+                    public Config<Filter> filterConfig() {
+                        return aT.filterConfig();
+                    }
+
+                    @Override
+                    public Config<Transformation> transformationConfig() {
+                        return aT.transformationConfig();
+                    }
+                };
             }
         };
     }
 
     @Override
-    public RouterConfig emptyConfig() {
-        return new SingleRouterConfig(sequence);
+    public RouterConfig emptyConfig(String aId) {
+        return new SingleRouterConfig(application + "." + aId);
     }
 
     @Override
-    public Id<RouterConfig> apply(RouterConfig aConfig,
-        Id<RouterConfig> aOldConfig) {
+    public void apply(RouterConfig aConfig, Id<RouterConfig> aOldConfig) {
         if (aOldConfig != null) {
-            routerConfigs.remove(aOldConfig);
+            if (!routerConfigs.remove(new Id<RouterConfig>(application + "." +
+                aOldConfig.getId()))) {
+                throw new ConfigException("Unknown routerconfig '" +
+                    aOldConfig + "'");
+            }
         }
-        Id<RouterConfig> id = routerConfigs.add(aConfig);
+        routerConfigs.add(aConfig);
         update();
-        return id;
     }
 
     @Override
@@ -68,8 +94,7 @@ public class XMLRouterConfigService implements RouterConfigService {
 
     private void update() {
         ExtendedRouterConfig newconfig = new CompositeRouterConfig(
-            routerConfigs.map().values());
+            new Id<RouterConfig>("routerconfig"), routerConfigs.values());
         config.setRouterConfig(newconfig);
     }
-
 }