01: /*
02: * This software is OSI Certified Open Source Software.
03: * OSI Certified is a certification mark of the Open Source Initiative. The
04: * license (Mozilla version 1.0) can be read at the MMBase site. See
05: * http://www.MMBase.org/license
06: */
07: package org.mmbase.core.event;
08:
09: import org.mmbase.module.core.*;
10: import org.mmbase.util.HashCodeUtil;
11:
12: /**
13: * This class is a wrapper for node event listeners that only want to listen to
14: * events concerning a specific builder.
15: *
16: * @author Ernst Bunders
17: * @since MMBase-1.8
18: * @version $Id: TypedNodeEventListenerWrapper.java,v 1.15 2007/07/26 11:45:54 michiel Exp $
19: */
20: public class TypedNodeEventListenerWrapper implements NodeEventListener {
21:
22: private final MMObjectBuilder builder;
23: private final String nodeType;
24: private final NodeEventListener wrappedListener;
25: private final boolean descendants;
26:
27: /**
28: * @param builder The builder for which to filter events.
29: * @param listener the node event listener you want to wrap
30: * @param descendants Whether also descendants of the given builder must be listened to. ('true' would be the must logical value).
31: */
32: public TypedNodeEventListenerWrapper(MMObjectBuilder builder,
33: NodeEventListener listener, boolean descendants) {
34: this .builder = builder;
35: this .nodeType = builder.getTableName();
36: wrappedListener = listener;
37: this .descendants = descendants;
38: }
39:
40: public void notify(NodeEvent event) {
41: if (nodeType.equals(event.getBuilderName())) {
42: wrappedListener.notify(event);
43: } else if (descendants) {
44: MMObjectBuilder eventBuilder = MMBase.getMMBase()
45: .getBuilder(event.getBuilderName());
46: if (nodeType.equals("object")
47: || (eventBuilder != null && eventBuilder
48: .isExtensionOf(builder))) {
49: wrappedListener.notify(event);
50: }
51: }
52: }
53:
54: public String toString() {
55: return "TypedNodeEventListenerWrapper(" + wrappedListener + ")";
56: }
57:
58: public boolean equals(Object o) {
59: if (o instanceof TypedNodeEventListenerWrapper) {
60: TypedNodeEventListenerWrapper tw = (TypedNodeEventListenerWrapper) o;
61: return nodeType.equals(tw.nodeType)
62: && wrappedListener.equals(tw.wrappedListener)
63: && descendants == tw.descendants;
64: } else {
65: return false;
66: }
67: }
68:
69: public int hashCode() {
70: int result = 0;
71: result = HashCodeUtil.hashCode(result, nodeType);
72: result = HashCodeUtil.hashCode(result, wrappedListener);
73: return result;
74:
75: }
76:
77: }
|