X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fxmlrouter%2Fimpl%2FXMLRouter.java;h=637440fe4dc0b6e0f1ae4d87fda3676817978302;hb=1e030ca3ecfaf7a3c179978c297a6aa6b31aead3;hp=8fa78f4a18af15854b1c835dc4378daa44cee59d;hpb=19413a6699295b4bbebc1b3bdb9838fd4370e581;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 8fa78f4..637440f 100644 --- a/impl/src/main/java/org/wamblee/xmlrouter/impl/XMLRouter.java +++ b/impl/src/main/java/org/wamblee/xmlrouter/impl/XMLRouter.java @@ -31,10 +31,8 @@ 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; import org.wamblee.xmlrouter.config.Transformation; import org.wamblee.xmlrouter.listener.EventInfo; import org.wamblee.xmlrouter.listener.EventListener; @@ -48,7 +46,7 @@ import org.wamblee.xmlrouter.subscribe.DestinationRegistry; * @author Erik Brakkee * */ -public class XMLRouter implements RouterConfig, Gateway, DestinationRegistry { +public class XMLRouter implements Gateway, DestinationRegistry { private static final Logger LOGGER = Logger.getLogger(XMLRouter.class .getName()); @@ -58,44 +56,38 @@ public class XMLRouter implements RouterConfig, Gateway, DestinationRegistry { private Clock clock; private AtomicLong nextEventId; - private ExtendedRouterConfig routerConfig; - private Transformations transformations; + private XMLRouterConfiguration config; private Map, Destination> destinations; - public XMLRouter(Clock aClock, EventListener aListener) { + public XMLRouter(Clock aClock, XMLRouterConfiguration aConfig, + EventListener aListener) { sequenceNumbers = new AtomicLong(1); listener = aListener; clock = aClock; nextEventId = new AtomicLong(clock.currentTimeMillis()); - routerConfig = new SingleRouterConfig(sequenceNumbers); - transformations = new Transformations(); + config = aConfig; destinations = new LinkedHashMap, Destination>(); } @Override - public Config documentTypeConfig() { - return routerConfig.documentTypeConfig(); - } - - @Override - public Config transformationConfig() { - return routerConfig.transformationConfig(); - } - - @Override - public Config filterConfig() { - return routerConfig.filterConfig(); + public void publish(String aSource, DOMSource aEvent) { + config.startPublishEvent(); + try { + publishImpl(aSource, aEvent); + } finally { + config.endPublishEvent(); + } } - @Override - public void publish(String aSource, DOMSource aEvent) { + private void publishImpl(String aSource, DOMSource aEvent) { long time = clock.currentTimeMillis(); - if (routerConfig.isDirty()) { - transformations.replaceTransformations(routerConfig - .transformationConfig().map()); - routerConfig.resetDirty(); + // TODO dirty flag will become unnecessary in the future. + if (config.routerConfig().isDirty()) { + config.transformations().replaceTransformations( + config.routerConfig().transformationConfig().map()); + config.routerConfig().resetDirty(); } Id id = new Id(nextEventId.getAndIncrement()); @@ -140,7 +132,7 @@ public class XMLRouter implements RouterConfig, Gateway, DestinationRegistry { boolean delivered = false; Set possibleTargetTypes = new HashSet(); - possibleTargetTypes.addAll(transformations + possibleTargetTypes.addAll(config.transformations() .getPossibleTargetTypes(aInputType)); // ask each destination what target types, if any they want to have. @@ -153,7 +145,7 @@ public class XMLRouter implements RouterConfig, Gateway, DestinationRegistry { if (!requested.isEmpty()) { // Deliver to the destination. for (String targetType : requested) { - TransformationPath path = transformations.getPath( + TransformationPath path = config.transformations().getPath( aInputType, targetType); List ts = path.getTransformations(); int i = 0; @@ -204,7 +196,8 @@ public class XMLRouter implements RouterConfig, Gateway, DestinationRegistry { private boolean isAllowedByFilters(String aType, DOMSource aEvent) { boolean allowed = true; - for (Filter filter : routerConfig.filterConfig().map().values()) { + for (Filter filter : config.routerConfig().filterConfig().map() + .values()) { if (!filter.isAllowed(aType, aEvent)) { allowed = false; } @@ -214,8 +207,8 @@ public class XMLRouter implements RouterConfig, Gateway, DestinationRegistry { private List determineDocumentTypes(DOMSource aEvent) { List res = new ArrayList(); - for (DocumentType type : routerConfig.documentTypeConfig().map() - .values()) { + for (DocumentType type : config.routerConfig().documentTypeConfig() + .map().values()) { if (type.isInstance(aEvent)) { res.add(type.getName()); }