X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fxmlrouter%2Fimpl%2FXMLRouter.java;h=99b36354f1fa30a21d057b8995793c8b9283dddc;hb=b2375f35a2f897e1417e8b5ec5b19b3257a11586;hp=e86593d274642c3a18500a899e4a9d4b78255103;hpb=5b4ee8d862b98d127abb04c646017c184d005838;p=xmlrouter diff --git a/impl/src/main/java/org/wamblee/xmlrouter/impl/XMLRouter.java b/impl/src/main/java/org/wamblee/xmlrouter/impl/XMLRouter.java index e86593d..99b3635 100644 --- a/impl/src/main/java/org/wamblee/xmlrouter/impl/XMLRouter.java +++ b/impl/src/main/java/org/wamblee/xmlrouter/impl/XMLRouter.java @@ -17,7 +17,6 @@ package org.wamblee.xmlrouter.impl; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; @@ -32,6 +31,7 @@ import javax.xml.transform.dom.DOMSource; import org.wamblee.general.Clock; import org.wamblee.xml.XMLDocument; 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; @@ -42,95 +42,61 @@ import org.wamblee.xmlrouter.publish.Gateway; import org.wamblee.xmlrouter.subscribe.Destination; import org.wamblee.xmlrouter.subscribe.DestinationRegistry; -// TODO concurrency. - +/** + * The XML Router. + * + * @author Erik Brakkee + * + */ public class XMLRouter implements RouterConfig, Gateway, DestinationRegistry { private static final Logger LOGGER = Logger.getLogger(XMLRouter.class .getName()); + private AtomicLong sequenceNumbers; private EventListener listener; private Clock clock; private AtomicLong nextEventId; - private AtomicLong sequenceNumbers; - private Map, DocumentType> documentTypes; + + private Config documentTypes; private Transformations transformations; - private Map, Filter> filters; + private Config filters; private Map, Destination> destinations; public XMLRouter(Clock aClock, EventListener aListener) { + sequenceNumbers = new AtomicLong(1); listener = aListener; clock = aClock; nextEventId = new AtomicLong(clock.currentTimeMillis()); - sequenceNumbers = new AtomicLong(1); - documentTypes = new LinkedHashMap, DocumentType>(); + documentTypes = new ConfigImpl() { + @Override + public DocumentType wrap(Id aId, DocumentType aType) { + return new RobustDocumentType(aId, aType); + } + }; transformations = new Transformations(); - filters = new LinkedHashMap, Filter>(); + filters = new ConfigImpl() { + @Override + public Filter wrap(Id aId, Filter aFilter) { + return new RobustFilter(aId, aFilter); + } + }; destinations = new LinkedHashMap, Destination>(); } @Override - public Id addDocumentType(DocumentType aType) { - long seqno = sequenceNumbers.getAndIncrement(); - documentTypes.put(new Id(seqno), aType); - return new Id(seqno); - } - - @Override - public void removeDocumentType(Id aId) { - documentTypes.remove(aId); - } - - @Override - public Collection> getDocumentTypes() { - return Collections.unmodifiableCollection(documentTypes.keySet()); - } - - @Override - public DocumentType getDocumentType(Id aId) { - return documentTypes.get(aId); - } - - @Override - public Id addTransformation(Transformation aTransformation) { - return transformations.addTransformation(aTransformation); - } - - @Override - public void removeTransformation(Id aId) { - transformations.removeTransformation(aId); - } - - @Override - public Collection> getTransformations() { - return transformations.getTransformations(); - } - - @Override - public Transformation getTransformation(Id aId) { - return transformations.getTransformation(aId); - } - - @Override - public Id addFilter(Filter aFilter) { - long seqno = sequenceNumbers.getAndIncrement(); - filters.put(new Id(seqno), aFilter); - return new Id(seqno); - } - - @Override - public void removeFilter(Id aId) { - filters.remove(aId); + public Config getDocumentTypeConfig() { + return documentTypes; } @Override - public Collection> getFilters() { - return Collections.unmodifiableCollection(filters.keySet()); + public Config getTransformationConfig() { + return transformations.getTransformationConfig(); } @Override - public Filter getFilter(Id aId) { - return filters.get(aId); + public Config getFilterConfig() { + return filters; } @Override @@ -243,7 +209,8 @@ public class XMLRouter implements RouterConfig, Gateway, DestinationRegistry { private boolean isAllowedByFilters(String aType, DOMSource aEvent) { boolean allowed = true; - for (Filter filter : filters.values()) { + for (Id id : filters.ids()) { + Filter filter = filters.get(id); if (!filter.isAllowed(aType, aEvent)) { allowed = false; } @@ -253,7 +220,8 @@ public class XMLRouter implements RouterConfig, Gateway, DestinationRegistry { private List determineDocumentTypes(DOMSource aEvent) { List res = new ArrayList(); - for (DocumentType type : documentTypes.values()) { + for (Id id : documentTypes.ids()) { + DocumentType type = documentTypes.get(id); if (type.isInstance(aEvent)) { res.add(type.getName()); }