X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fxmlrouter%2Fimpl%2FXMLRouter.java;h=9c0f2d4937e8ad5ff068da5d97aec56c09efabf5;hb=9dbc2844950b55ae552fe74840954ea71b754c7a;hp=637440fe4dc0b6e0f1ae4d87fda3676817978302;hpb=1e030ca3ecfaf7a3c179978c297a6aa6b31aead3;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 637440f..9c0f2d4 100644 --- a/impl/src/main/java/org/wamblee/xmlrouter/impl/XMLRouter.java +++ b/impl/src/main/java/org/wamblee/xmlrouter/impl/XMLRouter.java @@ -29,6 +29,7 @@ import java.util.logging.Logger; import javax.xml.transform.dom.DOMSource; import org.wamblee.general.Clock; +import org.wamblee.general.Pair; import org.wamblee.xml.XMLDocument; import org.wamblee.xmlrouter.common.Id; import org.wamblee.xmlrouter.config.DocumentType; @@ -72,40 +73,29 @@ public class XMLRouter implements Gateway, DestinationRegistry { @Override public void publish(String aSource, DOMSource aEvent) { - config.startPublishEvent(); - try { - publishImpl(aSource, aEvent); - } finally { - config.endPublishEvent(); - } - } - - private void publishImpl(String aSource, DOMSource aEvent) { long time = clock.currentTimeMillis(); - // TODO dirty flag will become unnecessary in the future. - if (config.routerConfig().isDirty()) { - config.transformations().replaceTransformations( - config.routerConfig().transformationConfig().map()); - config.routerConfig().resetDirty(); - } + Pair snapshotconfig = config + .getConfig(); - Id id = new Id(nextEventId.getAndIncrement()); - List types = determineDocumentTypes(aEvent); + Id id = new Id(nextEventId.getAndIncrement() + ""); + List types = determineDocumentTypes(snapshotconfig.getFirst() + .documentTypeConfig().values(), aEvent); EventInfo info = new EventInfo(time, aSource, id, types, aEvent); boolean delivered = false; try { List filteredInputTypes = determineFilteredInputTypes( - types, aEvent); + snapshotconfig.getFirst().filterConfig().values(), types, + aEvent); if (filteredInputTypes.isEmpty()) { if (LOGGER.isLoggable(Level.FINE)) { String doc = new XMLDocument(aEvent).print(true); LOGGER .log( Level.FINE, - "Event ''0}'' from source {1} removed because of filters.", + "Event ''{0}'' from source ''{1}'' removed because of filters.", new Object[] { doc, aSource }); } } @@ -117,7 +107,9 @@ public class XMLRouter implements Gateway, DestinationRegistry { // This is however certainly not the main case. for (String inputType : filteredInputTypes) { - boolean result = deliverEvent(info, inputType); + boolean result = deliverEvent(snapshotconfig.getFirst() + .filterConfig().values(), snapshotconfig.getSecond(), info, + inputType); delivered = delivered || result; } } finally { @@ -128,11 +120,12 @@ public class XMLRouter implements Gateway, DestinationRegistry { } } - private boolean deliverEvent(EventInfo aInfo, String aInputType) { + private boolean deliverEvent(Collection aFilters, + TransformationPaths aTransformations, EventInfo aInfo, String aInputType) { boolean delivered = false; Set possibleTargetTypes = new HashSet(); - possibleTargetTypes.addAll(config.transformations() + possibleTargetTypes.addAll(aTransformations .getPossibleTargetTypes(aInputType)); // ask each destination what target types, if any they want to have. @@ -145,7 +138,7 @@ public class XMLRouter implements Gateway, DestinationRegistry { if (!requested.isEmpty()) { // Deliver to the destination. for (String targetType : requested) { - TransformationPath path = config.transformations().getPath( + TransformationPath path = aTransformations.getPath( aInputType, targetType); List ts = path.getTransformations(); int i = 0; @@ -160,7 +153,8 @@ public class XMLRouter implements Gateway, DestinationRegistry { aInfo.getEvent(), aInputType, t, orig); } - if (!isAllowedByFilters(t.getToType(), transformed)) { + if (!isAllowedByFilters(aFilters, t.getToType(), + transformed)) { allowed = false; } i++; @@ -170,7 +164,7 @@ public class XMLRouter implements Gateway, DestinationRegistry { // allow the event. boolean result = destination.receive(transformed); listener.delivered(aInfo, ts, destinationId.getId(), - destination.getName(), result); + result); delivered = delivered || result; } @@ -180,13 +174,13 @@ public class XMLRouter implements Gateway, DestinationRegistry { return delivered; } - private List determineFilteredInputTypes(List aTypes, - DOMSource aEvent) { + private List determineFilteredInputTypes( + Collection aFilters, List aTypes, DOMSource aEvent) { // apply filters to the input List filteredTypes = new ArrayList(); for (String type : aTypes) { - boolean allowed = isAllowedByFilters(type, aEvent); + boolean allowed = isAllowedByFilters(aFilters, type, aEvent); if (allowed) { filteredTypes.add(type); } @@ -194,10 +188,10 @@ public class XMLRouter implements Gateway, DestinationRegistry { return filteredTypes; } - private boolean isAllowedByFilters(String aType, DOMSource aEvent) { + private boolean isAllowedByFilters(Collection aFilters, + String aType, DOMSource aEvent) { boolean allowed = true; - for (Filter filter : config.routerConfig().filterConfig().map() - .values()) { + for (Filter filter : aFilters) { if (!filter.isAllowed(aType, aEvent)) { allowed = false; } @@ -205,10 +199,10 @@ public class XMLRouter implements Gateway, DestinationRegistry { return allowed; } - private List determineDocumentTypes(DOMSource aEvent) { + private List determineDocumentTypes( + Collection aTypes, DOMSource aEvent) { List res = new ArrayList(); - for (DocumentType type : config.routerConfig().documentTypeConfig() - .map().values()) { + for (DocumentType type : aTypes) { if (type.isInstance(aEvent)) { res.add(type.getName()); } @@ -216,11 +210,6 @@ public class XMLRouter implements Gateway, DestinationRegistry { return res; } - private void logEvent(String aMessage, String aSource, DOMSource aEvent) { - LOGGER.log(Level.WARNING, - aMessage + ": " + eventToString(aSource, aEvent)); - } - private String eventToString(String aSource, DOMSource aEvent) { return "source '" + aSource + "': Event: '" + new XMLDocument(aEvent).print(true) + "'"; @@ -243,7 +232,7 @@ public class XMLRouter implements Gateway, DestinationRegistry { public Id registerDestination(Destination aDestination) { notNull("destination", aDestination); long seqno = sequenceNumbers.getAndIncrement(); - Id id = new Id(seqno); + Id id = new Id(seqno + ""); destinations.put(id, new RobustDestination(id, aDestination)); return id; }