XMLRouterConfigService test added.
[xmlrouter] / impl / src / main / java / org / wamblee / xmlrouter / impl / XMLRouterConfigService.java
index 203e56fd5d0e1632cf65ba6b5ec40da1853541fb..cd1997299d5e631f055fbda2060e0a56f9000c99 100644 (file)
@@ -19,8 +19,12 @@ import java.util.concurrent.atomic.AtomicLong;
 
 import org.wamblee.xmlrouter.common.Id;
 import org.wamblee.xmlrouter.config.Config;
+import org.wamblee.xmlrouter.config.ConfigException;
+import org.wamblee.xmlrouter.config.DocumentType;
+import org.wamblee.xmlrouter.config.Filter;
 import org.wamblee.xmlrouter.config.RouterConfig;
 import org.wamblee.xmlrouter.config.RouterConfigService;
+import org.wamblee.xmlrouter.config.Transformation;
 
 // TODO pass unique id of config service in the constructor to allow multiple instances with
 // unique ids (ServiceFactory) 
@@ -33,30 +37,58 @@ 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>(new Id<Config>(
+            aApplication)) {
+            public RouterConfig wrap(final String aPrefix, final RouterConfig aT) {
+                return new RouterConfig() {
+                    @Override
+                    public Id<RouterConfig> getId() {
+                        return new Id<RouterConfig>(aT.getId().toString());
+                    }
+
+                    @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(new Id<RouterConfig>(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 +105,4 @@ public class XMLRouterConfigService implements RouterConfigService {
             new Id<RouterConfig>("routerconfig"), routerConfigs.values());
         config.setRouterConfig(newconfig);
     }
-
 }