X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fxmlrouter%2Fimpl%2FXMLRouter.java;h=a203f93fe380e2d8d2ecc493ba4f2a4b89ed2dde;hb=f70baadfd579f4d3aa2e8c9ee7d758fb37d7872f;hp=d74c93d09f20a99e09c57480952822c2a1ac4a4c;hpb=d96c59e2c9e5b15c4ce2023ac93d70b4c0ddf568;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 d74c93d..a203f93 100644 --- a/impl/src/main/java/org/wamblee/xmlrouter/impl/XMLRouter.java +++ b/impl/src/main/java/org/wamblee/xmlrouter/impl/XMLRouter.java @@ -56,31 +56,32 @@ public class XMLRouter implements Gateway, DestinationRegistry { private Clock clock; private AtomicLong nextEventId; - private ExtendedRouterConfig routerConfig; - private TransformationPaths transformations; + private XMLRouterConfiguration config; private Map, Destination> destinations; - public XMLRouter(Clock aClock, ExtendedRouterConfig aRouterConfig, + public XMLRouter(Clock aClock, XMLRouterConfiguration aConfig, EventListener aListener) { sequenceNumbers = new AtomicLong(1); listener = aListener; clock = aClock; nextEventId = new AtomicLong(clock.currentTimeMillis()); - routerConfig = aRouterConfig; - transformations = new TransformationPaths(); + config = aConfig; destinations = new LinkedHashMap, Destination>(); } @Override public void publish(String aSource, DOMSource aEvent) { - long time = clock.currentTimeMillis(); - - if (routerConfig.isDirty()) { - transformations.replaceTransformations(routerConfig - .transformationConfig().map()); - routerConfig.resetDirty(); + config.startPublishEvent(); + try { + publishImpl(aSource, aEvent); + } finally { + config.endPublishEvent(); } + } + + private void publishImpl(String aSource, DOMSource aEvent) { + long time = clock.currentTimeMillis(); Id id = new Id(nextEventId.getAndIncrement()); List types = determineDocumentTypes(aEvent); @@ -124,7 +125,7 @@ public class XMLRouter implements Gateway, DestinationRegistry { boolean delivered = false; Set possibleTargetTypes = new HashSet(); - possibleTargetTypes.addAll(transformations + possibleTargetTypes.addAll(config.getTransformations() .getPossibleTargetTypes(aInputType)); // ask each destination what target types, if any they want to have. @@ -137,8 +138,8 @@ public class XMLRouter implements Gateway, DestinationRegistry { if (!requested.isEmpty()) { // Deliver to the destination. for (String targetType : requested) { - TransformationPath path = transformations.getPath( - aInputType, targetType); + TransformationPath path = config.getTransformations() + .getPath(aInputType, targetType); List ts = path.getTransformations(); int i = 0; boolean allowed = true; @@ -188,7 +189,8 @@ public class XMLRouter implements Gateway, DestinationRegistry { private boolean isAllowedByFilters(String aType, DOMSource aEvent) { boolean allowed = true; - for (Filter filter : routerConfig.filterConfig().map().values()) { + for (Filter filter : config.getRouterConfig().filterConfig().map() + .values()) { if (!filter.isAllowed(aType, aEvent)) { allowed = false; } @@ -198,8 +200,8 @@ public class XMLRouter implements Gateway, DestinationRegistry { private List determineDocumentTypes(DOMSource aEvent) { List res = new ArrayList(); - for (DocumentType type : routerConfig.documentTypeConfig().map() - .values()) { + for (DocumentType type : config.getRouterConfig().documentTypeConfig() + .map().values()) { if (type.isInstance(aEvent)) { res.add(type.getName()); }