X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fxmlrouter%2Fimpl%2FSingleRouterConfig.java;h=195f72da66295517bce3aec611c3fe05f3fd0cc8;hb=3b2c669b25bfcb5a3c3f06ff9180d85143bebb2a;hp=c58ef8909f6e6db8ebc19bcdda4fea35b3ece394;hpb=f70baadfd579f4d3aa2e8c9ee7d758fb37d7872f;p=xmlrouter diff --git a/impl/src/main/java/org/wamblee/xmlrouter/impl/SingleRouterConfig.java b/impl/src/main/java/org/wamblee/xmlrouter/impl/SingleRouterConfig.java index c58ef89..195f72d 100644 --- a/impl/src/main/java/org/wamblee/xmlrouter/impl/SingleRouterConfig.java +++ b/impl/src/main/java/org/wamblee/xmlrouter/impl/SingleRouterConfig.java @@ -15,10 +15,7 @@ */ 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.DocumentType; import org.wamblee.xmlrouter.config.Filter; import org.wamblee.xmlrouter.config.Transformation; @@ -30,38 +27,86 @@ import org.wamblee.xmlrouter.config.Transformation; * @author Erik Brakkee */ public class SingleRouterConfig implements ExtendedRouterConfig { - private AtomicLong sequenceNumbers; - private ExtendedConfig documentTypes; - private ExtendedConfig transformations; - private ExtendedConfig filters; + + public static final class DocumentConfig extends ConfigImpl { + 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 { + 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 { + 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(AtomicLong aSequenceNumberGenerator) { - sequenceNumbers = aSequenceNumberGenerator; - documentTypes = new ConfigImpl(sequenceNumbers) { - @Override - public DocumentType wrap(Id aId, DocumentType aT) { - return new RobustDocumentType(aId, aT); - } - }; - transformations = new ConfigImpl(sequenceNumbers) { - @Override - public Transformation wrap(Id aId, - Transformation aTransformation) { - return new RobustTransformation(aId, aTransformation); - } - }; - filters = new ConfigImpl(sequenceNumbers) { - @Override - public Filter wrap(Id aId, Filter aFilter) { - return new RobustFilter(aId, 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); + } + + @Override + public Id getId() { + return new Id(prefix); + } + + public String getPrefix() { + return prefix; } @Override @@ -78,4 +123,25 @@ public class SingleRouterConfig implements ExtendedRouterConfig { public Config 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(); + } }