*/
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.RouterConfig;
import org.wamblee.xmlrouter.config.Transformation;
+// TODO implement copying of routerconfig.
+
/**
* Represents a single configuration set of a single configuration client of the
* XML router.
* @author Erik Brakkee
*/
public class SingleRouterConfig implements ExtendedRouterConfig {
- private AtomicLong sequenceNumbers;
- private ExtendedConfig<DocumentType> documentTypes;
- private ExtendedConfig<Transformation> transformations;
- private ExtendedConfig<Filter> filters;
+
+ public static final class DocumentConfig extends ConfigImpl<DocumentType> {
+ public DocumentConfig(Id<Config> aId) {
+ super(DocumentType.class, aId);
+ }
+
+ public DocumentConfig(DocumentConfig aConfig) {
+ super(aConfig);
+ }
+
+ @Override
+ public DocumentType wrap(String aPrefix, DocumentType aT) {
+ return new RobustDocumentType("", aT);
+ }
+ }
+
+ public static final class TransformationConfig extends
+ ConfigImpl<Transformation> {
+ public TransformationConfig(Id<Config> aId) {
+ super(Transformation.class, aId);
+ }
+
+ public TransformationConfig(TransformationConfig aConfig) {
+ super(aConfig);
+ }
+
+ @Override
+ public Transformation wrap(String aPrefix,
+ Transformation aTransformation) {
+ return new RobustTransformation("", aTransformation);
+ }
+ }
+
+ public static final class FilterConfig extends ConfigImpl<Filter> {
+ public FilterConfig(Id<Config> aId) {
+ super(Filter.class, aId);
+ }
+
+ public FilterConfig(FilterConfig aConfig) {
+ super(aConfig);
+ }
+
+ @Override
+ public Filter wrap(String aPrefix, Filter aFilter) {
+ return new RobustFilter("", aFilter);
+ }
+ }
+
+ private Id<RouterConfig> id;
+
+ private DocumentConfig documentTypes;
+ private TransformationConfig transformations;
+ private FilterConfig filters;
/**
* Constructs a router configuration.
*
- * @param aSequenceNumberGenerator
- * Sequence number generator to use.
+ * @param aId
+ * Unique id for this configuration.
*/
- public SingleRouterConfig(AtomicLong aSequenceNumberGenerator) {
- sequenceNumbers = aSequenceNumberGenerator;
- documentTypes = new ConfigImpl<DocumentType>(sequenceNumbers) {
- @Override
- public DocumentType wrap(Id<DocumentType> aId, DocumentType aT) {
- return new RobustDocumentType(aId, aT);
- }
- };
- transformations = new ConfigImpl<Transformation>(sequenceNumbers) {
- @Override
- public Transformation wrap(Id<Transformation> aId,
- Transformation aTransformation) {
- return new RobustTransformation(aId, aTransformation);
- }
- };
- filters = new ConfigImpl<Filter>(sequenceNumbers) {
- @Override
- public Filter wrap(Id<Filter> aId, Filter aFilter) {
- return new RobustFilter(aId, aFilter);
- }
- };
+ public SingleRouterConfig(Id<RouterConfig> aId) {
+ id = aId;
+ documentTypes = new DocumentConfig(new Id<Config>(aId.getId() +
+ ".documenttypes"));
+ transformations = new TransformationConfig(new Id<Config>(aId.getId() +
+ ".transformations"));
+ filters = new FilterConfig(new Id<Config>(aId.getId() + ".filters"));
+ }
+
+ public SingleRouterConfig(SingleRouterConfig aConfig) {
+ id = aConfig.id;
+ documentTypes = new DocumentConfig(aConfig.documentTypes);
+ transformations = new TransformationConfig(aConfig.transformations);
+ filters = new FilterConfig(aConfig.filters);
+ }
+
+ @Override
+ public Id<RouterConfig> getId() {
+ return id;
}
@Override
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();
+ }
}