summaryrefslogtreecommitdiff
path: root/dicore3/core/src/main/java/io/dico/dicore/event/ChainedListenerHandle.java
diff options
context:
space:
mode:
authorDico200 <dico.karssiens@gmail.com>2018-07-25 01:53:02 +0100
committerDico200 <dico.karssiens@gmail.com>2018-07-25 01:53:02 +0100
commit5e168847c2624b767deb9da310ecfdf169e0f43c (patch)
tree56b76556a6837fff20b800d5a22218286a975581 /dicore3/core/src/main/java/io/dico/dicore/event/ChainedListenerHandle.java
parent60503351a30a91985b95ee8aa64e163ef084b34b (diff)
Add dicore3-core, without really irrelevant packages
Diffstat (limited to 'dicore3/core/src/main/java/io/dico/dicore/event/ChainedListenerHandle.java')
-rw-r--r--dicore3/core/src/main/java/io/dico/dicore/event/ChainedListenerHandle.java55
1 files changed, 55 insertions, 0 deletions
diff --git a/dicore3/core/src/main/java/io/dico/dicore/event/ChainedListenerHandle.java b/dicore3/core/src/main/java/io/dico/dicore/event/ChainedListenerHandle.java
new file mode 100644
index 0000000..86b8448
--- /dev/null
+++ b/dicore3/core/src/main/java/io/dico/dicore/event/ChainedListenerHandle.java
@@ -0,0 +1,55 @@
+package io.dico.dicore.event;
+
+import io.dico.dicore.InterfaceChain;
+
+public interface ChainedListenerHandle extends InterfaceChain<ListenerHandle, ChainedListenerHandle>, ListenerHandle {
+
+ @Override
+ default ChainedListenerHandle getEmptyInstance() {
+ return ChainedListenerHandles.empty();
+ }
+
+ @Override
+ default ChainedListenerHandle withElement(ListenerHandle element) {
+ if (element == null) {
+ return this;
+ }
+
+ int count = getElementCount() + 1;
+ return new ChainedListenerHandle() {
+ @Override
+ public void register() {
+ try {
+ ChainedListenerHandle.this.register();
+ } finally {
+ element.register();
+ }
+ }
+
+ @Override
+ public void unregister() {
+ try {
+ ChainedListenerHandle.this.unregister();
+ } finally {
+ element.unregister();
+ }
+ }
+
+ @Override
+ public ChainedListenerHandle withoutLastNode() {
+ return ChainedListenerHandle.this;
+ }
+
+ @Override
+ public ListenerHandle getDelegateOfLastNode() {
+ return element;
+ }
+
+ @Override
+ public int getElementCount() {
+ return count;
+ }
+ };
+ }
+
+}