diff --git a/ipaacalib/java/src/ipaaca/Buffer.java b/ipaacalib/java/src/ipaaca/Buffer.java index e335e1f4175e82a68e8e6b2e7873a724f0c94d87..1795283ad9aebdff32695f48959e2111498a85ab 100644 --- a/ipaacalib/java/src/ipaaca/Buffer.java +++ b/ipaacalib/java/src/ipaaca/Buffer.java @@ -1,7 +1,9 @@ package ipaaca; import java.util.ArrayList; +import java.util.EnumSet; import java.util.List; +import java.util.Set; import java.util.UUID; /** @@ -63,10 +65,35 @@ public abstract class Buffer // """ // handler = IUEventHandler(handler_function=handler_function, for_event_types=for_event_types, for_categories=for_categories) // self._iu_event_handlers.append(handler) + public void registerHandler(IUEventHandler handler) { eventHandlers.add(handler); } + + public void registerHandler(HandlerFunctor func) { + IUEventHandler handler; + handler = new IUEventHandler(func); + registerHandler(handler); + } + + public void registerHandler(HandlerFunctor func, Set<String> categories) { + IUEventHandler handler; + handler = new IUEventHandler(func, categories); + registerHandler(handler); + } + + public void registerHandler(HandlerFunctor func, EnumSet<IUEventType> eventTypes) { + IUEventHandler handler; + handler = new IUEventHandler(func, eventTypes); + registerHandler(handler); + } + + public void registerHandler(HandlerFunctor func, EnumSet<IUEventType> eventTypes, Set<String> categories) { + IUEventHandler handler; + handler = new IUEventHandler(func, eventTypes, categories); + registerHandler(handler); + } // def call_iu_event_handlers(self, uid, local, event_type, category): // """Call registered IU event handler functions registered for this event_type and category.""" @@ -76,7 +103,7 @@ public abstract class Buffer /** * Call registered IU event handler functions registered for this event_type and category. */ - public void callIuEventHandlers(String uid, boolean local, IUEventType type, String category) + protected void callIuEventHandlers(String uid, boolean local, IUEventType type, String category) { for (IUEventHandler h : eventHandlers) { diff --git a/ipaacalib/java/src/ipaaca/IUEventHandler.java b/ipaacalib/java/src/ipaaca/IUEventHandler.java index 25f2135f70f7a46e527653fd1347c90d8b5c509d..263c9c6fc26cf178266f3532bb7487539f3ec924 100644 --- a/ipaacalib/java/src/ipaaca/IUEventHandler.java +++ b/ipaacalib/java/src/ipaaca/IUEventHandler.java @@ -1,6 +1,7 @@ package ipaaca; import java.util.EnumSet; +import java.util.HashSet; import java.util.Set; /** @@ -32,6 +33,27 @@ public class IUEventHandler // self._for_categories = ( // None if for_categories is None else // (for_categories[:] if hasattr(for_categories, '__iter__') else [for_categories])) + + public IUEventHandler(HandlerFunctor func) + { + this.handleFunctor = func; + this.categories = new HashSet<String>(); + this.eventTypes = EnumSet.allOf(IUEventType.class); + } + + public IUEventHandler(HandlerFunctor func, Set<String> categories) + { + this.handleFunctor = func; + this.categories = categories; + this.eventTypes = EnumSet.allOf(IUEventType.class); + } + + public IUEventHandler(HandlerFunctor func, EnumSet<IUEventType> eventTypes) + { + this.handleFunctor = func; + this.eventTypes = eventTypes; + this.categories = new HashSet<String>(); + } public IUEventHandler(HandlerFunctor func, EnumSet<IUEventType> eventTypes, Set<String> categories) { @@ -57,7 +79,13 @@ public class IUEventHandler */ private boolean conditionMet(IUEventType type, String category) { - return eventTypes.contains(type) && categories.contains(category); + if (this.categories.isEmpty()) { // match any category + return this.eventTypes.contains(type); + } + else + { + return this.eventTypes.contains(type) && this.categories.contains(category); + } } // def call(self, buffer, iu_uid, local, event_type, category): diff --git a/ipaacalib/java/src/ipaaca/InputBuffer.java b/ipaacalib/java/src/ipaaca/InputBuffer.java index ce3156c8aa814d90b1ad84f16f59dd7852944011..77db1c3045f48d6e29cfe1b585f6bcb05c77d06f 100644 --- a/ipaacalib/java/src/ipaaca/InputBuffer.java +++ b/ipaacalib/java/src/ipaaca/InputBuffer.java @@ -80,7 +80,7 @@ public class InputBuffer extends Buffer // remote_server = rsb.createRemoteServer(rsb.Scope(str(iu.owner_name))) // self._remote_server_store[iu.owner_name] = remote_server // return remote_server - public RemoteServer getRemoteServer(AbstractIU iu) + protected RemoteServer getRemoteServer(AbstractIU iu) { if (remoteServerStore.containsKey(iu.getOwnerName())) { diff --git a/ipaacalib/java/src/ipaaca/LocalIU.java b/ipaacalib/java/src/ipaaca/LocalIU.java index 3581d546d5c9566418d3505fe14d4ca359d2bfe7..7e560c8ee9dcf73a4a75403a515a9216281fe4a5 100644 --- a/ipaacalib/java/src/ipaaca/LocalIU.java +++ b/ipaacalib/java/src/ipaaca/LocalIU.java @@ -38,6 +38,15 @@ public class LocalIU extends AbstractIU payload = new Payload(this); } + public LocalIU(String category) + { + super(UUID.randomUUID().toString()); + this.category = category; + revision = 1; + payload = new Payload(this); + } + + // def _set_buffer(self, buffer): // if self._buffer is not None: // raise Exception('The IU is already in a buffer, cannot move it.') @@ -45,7 +54,7 @@ public class LocalIU extends AbstractIU // self.owner_name = buffer.unique_name // self._payload.owner_name = buffer.unique_name // - public void setBuffer(OutputBuffer buffer) + protected void setBuffer(OutputBuffer buffer) { if (outputBuffer != null) { diff --git a/ipaacalib/java/src/ipaaca/LocalMessageIU.java b/ipaacalib/java/src/ipaaca/LocalMessageIU.java index c67c87ccf3656258cd05dc34e24c7d27141b7bfd..b749fadc1dd9a703515a993eaa38a66c3362092e 100644 --- a/ipaacalib/java/src/ipaaca/LocalMessageIU.java +++ b/ipaacalib/java/src/ipaaca/LocalMessageIU.java @@ -1,5 +1,6 @@ package ipaaca; + /** * Local IU of Message sub-type. Can be handled like a normal IU, but on the remote side it is only existent during the handler calls. * @author hvanwelbergen @@ -7,4 +8,14 @@ package ipaaca; public class LocalMessageIU extends LocalIU { + public LocalMessageIU() + { + super(); + } + + public LocalMessageIU(String category) + { + super(category); + } + } diff --git a/ipaacalib/java/src/ipaaca/OutputBuffer.java b/ipaacalib/java/src/ipaaca/OutputBuffer.java index de5e64652e465c3376522d9007183ccdc48b236e..9d66806b7a976658263e35f58f88b29c00ff9526 100644 --- a/ipaacalib/java/src/ipaaca/OutputBuffer.java +++ b/ipaacalib/java/src/ipaaca/OutputBuffer.java @@ -327,7 +327,7 @@ public class OutputBuffer extends Buffer // '''Publish an IU.''' // informer = self._get_informer(iu._category) // informer.publishData(iu) - public void publishIU(AbstractIU iu) + private void publishIU(AbstractIU iu) { Informer<Object> informer = getInformer(iu.getCategory()); try @@ -364,7 +364,7 @@ public class OutputBuffer extends Buffer * to enable remote components to filter out updates that originated * from their own operations */ - public void sendIUCommission(AbstractIU iu, String writerName) + protected void sendIUCommission(AbstractIU iu, String writerName) { IUCommission iuc = Ipaaca.IUCommission.newBuilder().setUid(iu.getUid()).setRevision(iu.getRevision()) .setWriterName(iu.getOwnerName() != null ? iu.getOwnerName() : writerName).build(); @@ -406,7 +406,7 @@ public class OutputBuffer extends Buffer // informer = self._get_informer(iu._category) // informer.publishData(payload_update) - public void sendIUPayloadUpdate(AbstractIU iu, IUPayloadUpdate update) + protected void sendIUPayloadUpdate(AbstractIU iu, IUPayloadUpdate update) { Informer<Object> informer = getInformer(iu.getCategory()); try @@ -419,7 +419,7 @@ public class OutputBuffer extends Buffer } } - public void sendIULinkUpdate(AbstractIU iu, IULinkUpdate update) + protected void sendIULinkUpdate(AbstractIU iu, IULinkUpdate update) { Informer<Object> informer = getInformer(iu.getCategory()); try