View Javadoc
1   package com.github.triceo.splitlog;
2   
3   import com.github.triceo.splitlog.api.Message;
4   import com.github.triceo.splitlog.api.MessageConsumer;
5   import com.github.triceo.splitlog.api.MessageDeliveryStatus;
6   import com.github.triceo.splitlog.api.MessageListener;
7   import com.github.triceo.splitlog.api.MessageProducer;
8   
9   final class DefaultMessageConsumer<P extends MessageProducer<P>> implements MessageConsumer<P> {
10  
11      private final MessageListener<P> listener;
12      private final P producer;
13  
14      public DefaultMessageConsumer(final MessageListener<P> listener, final P producer) {
15          if ((producer == null) || (listener == null)) {
16              throw new IllegalArgumentException("Neither producer nor listener may be null.");
17          }
18          this.producer = producer;
19          this.listener = listener;
20      }
21  
22      @SuppressWarnings("unchecked")
23      @Override
24      public boolean equals(final Object obj) {
25          if (this == obj) {
26              return true;
27          }
28          if (obj == null) {
29              return false;
30          }
31          if (this.getClass() != obj.getClass()) {
32              return false;
33          }
34          final DefaultMessageConsumer<P> other = (DefaultMessageConsumer<P>) obj;
35          if (this.listener == null) {
36              if (other.listener != null) {
37                  return false;
38              }
39          } else if (!this.listener.equals(other.listener)) {
40              return false;
41          }
42          if (this.producer == null) {
43              if (other.producer != null) {
44                  return false;
45              }
46          } else if (!this.producer.equals(other.producer)) {
47              return false;
48          }
49          return true;
50      }
51  
52      @Override
53      public int hashCode() {
54          final int prime = 31;
55          int result = 1;
56          result = (prime * result) + ((this.listener == null) ? 0 : this.listener.hashCode());
57          result = (prime * result) + ((this.producer == null) ? 0 : this.producer.hashCode());
58          return result;
59      }
60  
61      @Override
62      public boolean isStopped() {
63          return !this.producer.isConsuming(this);
64      }
65  
66      @Override
67      public void messageReceived(final Message message, final MessageDeliveryStatus status, final P producer) {
68          this.listener.messageReceived(message, status, producer);
69      }
70  
71      @Override
72      public boolean stop() {
73          return this.producer.stopConsuming(this);
74      }
75  
76      @Override
77      public String toString() {
78          final StringBuilder builder = new StringBuilder();
79          builder.append("DefaultMessageConsumer [");
80          if (this.producer != null) {
81              builder.append("producer=").append(this.producer).append(", ");
82          }
83          if (this.listener != null) {
84              builder.append("listener=").append(this.listener);
85          }
86          builder.append("]");
87          return builder.toString();
88      }
89  
90  }