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 203e56fd5d0e1632cf65ba6b5ec40da1853541fb..a20da62d53f60ca6a6b36306b0177b7a41db29c1 100644 (file)
@@ -18,12 +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;
-
-// TODO pass unique id of config service in the constructor to allow multiple instances with
-// unique ids (ServiceFactory) 
+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
@@ -33,30 +30,57 @@ 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>(new Id<Config>("config")) {
-            public RouterConfig wrap(String aPrefix, 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(String aId) {
-        // TODO check AP{ impacts.
-        return new SingleRouterConfig(new Id<RouterConfig>(aId));
+        return new SingleRouterConfig(application + "." + aId);
     }
 
     @Override
     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 + "'");
+            }
         }
         routerConfigs.add(aConfig);
         update();
@@ -73,5 +97,4 @@ public class XMLRouterConfigService implements RouterConfigService {
             new Id<RouterConfig>("routerconfig"), routerConfigs.values());
         config.setRouterConfig(newconfig);
     }
-
 }