Config no longer implements Identifiable because this was in violation of the contrac...
[xmlrouter] / impl / src / main / java / org / wamblee / xmlrouter / impl / SingleRouterConfig.java
index b069215b102731099ee88f6a22384af64a5ac886..195f72da66295517bce3aec611c3fe05f3fd0cc8 100644 (file)
 package org.wamblee.xmlrouter.impl;
 
 import org.wamblee.xmlrouter.common.Id;
-import org.wamblee.xmlrouter.config.Config;
 import org.wamblee.xmlrouter.config.DocumentType;
 import org.wamblee.xmlrouter.config.Filter;
-import org.wamblee.xmlrouter.config.RouterConfig;
 import org.wamblee.xmlrouter.config.Transformation;
 
 /**
@@ -29,46 +27,86 @@ import org.wamblee.xmlrouter.config.Transformation;
  * @author Erik Brakkee
  */
 public class SingleRouterConfig implements ExtendedRouterConfig {
-    private Id<RouterConfig> id;
-    private ExtendedConfig<DocumentType> documentTypes;
-    private ExtendedConfig<Transformation> transformations;
-    private ExtendedConfig<Filter> filters;
+
+    public static final class DocumentConfig extends ConfigImpl<DocumentType> {
+        public DocumentConfig(String aId) {
+            super(DocumentType.class, aId);
+        }
+
+        public DocumentConfig(DocumentConfig aConfig) {
+            super(aConfig);
+        }
+
+        @Override
+        public DocumentType wrap(DocumentType aT) {
+            return new RobustDocumentType(aT);
+        }
+    }
+
+    public static final class TransformationConfig extends
+        ConfigImpl<Transformation> {
+        public TransformationConfig(String aId) {
+            super(Transformation.class, aId);
+        }
+
+        public TransformationConfig(TransformationConfig aConfig) {
+            super(aConfig);
+        }
+
+        @Override
+        public Transformation wrap(Transformation aTransformation) {
+            return new RobustTransformation(aTransformation);
+        }
+    }
+
+    public static final class FilterConfig extends ConfigImpl<Filter> {
+        public FilterConfig(String aId) {
+            super(Filter.class, aId);
+        }
+
+        public FilterConfig(FilterConfig aConfig) {
+            super(aConfig);
+        }
+
+        @Override
+        public Filter wrap(Filter aFilter) {
+            return new RobustFilter("", aFilter);
+        }
+    }
+
+    private String prefix;
+
+    private DocumentConfig documentTypes;
+    private TransformationConfig transformations;
+    private FilterConfig filters;
 
     /**
      * Constructs a router configuration.
      * 
-     * @param aSequenceNumberGenerator
-     *            Sequence number generator to use.
+     * @param aPrefix
+     *            Unique id for this configuration.
      */
-    public SingleRouterConfig(Id<RouterConfig> aId) {
-        id = aId;
-        documentTypes = new ConfigImpl<DocumentType>(new Id<Config>(
-            "documentTypes")) {
-            @Override
-            public DocumentType wrap(String aPrefix, DocumentType aT) {
-                return new RobustDocumentType(aPrefix, aT);
-            }
-        };
-        transformations = new ConfigImpl<Transformation>(new Id<Config>(
-            "transformations")) {
-            @Override
-            public Transformation wrap(String aPrefix,
-                Transformation aTransformation) {
-                return new RobustTransformation(aPrefix, aTransformation);
-            }
-        };
-        filters = new ConfigImpl<Filter>(new Id<Config>("filters")) {
-            @Override
-            public Filter wrap(String aPrefix, Filter aFilter) {
-                return new RobustFilter(aPrefix, aFilter);
-            }
-        };
+    public SingleRouterConfig(String aPrefix) {
+        prefix = aPrefix;
+        documentTypes = new DocumentConfig(aPrefix + ".documenttypes");
+        transformations = new TransformationConfig(aPrefix + ".transformations");
+        filters = new FilterConfig(aPrefix + ".filters");
+    }
+
+    public SingleRouterConfig(SingleRouterConfig aConfig) {
+        prefix = aConfig.prefix;
+        documentTypes = new DocumentConfig(aConfig.documentTypes);
+        transformations = new TransformationConfig(aConfig.transformations);
+        filters = new FilterConfig(aConfig.filters);
     }
 
-    // TODO test getId.
     @Override
     public Id<RouterConfig> getId() {
-        return id;
+        return new Id<RouterConfig>(prefix);
+    }
+
+    public String getPrefix() {
+        return prefix;
     }
 
     @Override
@@ -85,4 +123,25 @@ public class SingleRouterConfig implements ExtendedRouterConfig {
     public Config<Filter> filterConfig() {
         return filters;
     }
+
+    @Override
+    public boolean equals(Object aObj) {
+        if (aObj == null) {
+            return false;
+        }
+        if (!(aObj instanceof SingleRouterConfig)) {
+            return false;
+        }
+        SingleRouterConfig obj = (SingleRouterConfig) aObj;
+
+        return documentTypes.equals(obj.documentTypes) &&
+            transformations.equals(obj.transformations) &&
+            filters.equals(obj.filters);
+    }
+
+    @Override
+    public int hashCode() {
+        return documentTypes.hashCode() + transformations.hashCode() +
+            filters.hashCode();
+    }
 }