View Javadoc

1   package net.sf.jldapbeans.lang;
2   
3   import java.beans.PropertyChangeListener;
4   
5   import javax.naming.NamingException;
6   import javax.naming.directory.Attributes;
7   import javax.naming.event.EventDirContext;
8   import javax.naming.event.NamespaceChangeListener;
9   import javax.naming.event.NamingEvent;
10  import javax.naming.event.NamingExceptionEvent;
11  import javax.naming.event.ObjectChangeListener;
12  import javax.naming.ldap.LdapContext;
13  import javax.naming.ldap.LdapName;
14  
15  import org.apache.commons.lang.builder.EqualsBuilder;
16  import org.apache.commons.lang.builder.HashCodeBuilder;
17  import org.apache.commons.lang.builder.ToStringBuilder;
18  import org.apache.commons.logging.Log;
19  import org.apache.commons.logging.LogFactory;
20  
21  public abstract class LdapObject {
22  	private class LdapNamingListener implements NamespaceChangeListener, ObjectChangeListener {
23  		
24  		public void namingExceptionThrown(NamingExceptionEvent evt) {
25  			log.error("Exception thrown during event dispatching.", evt.getException());
26  		}
27  		
28  		public void objectAdded(NamingEvent evt) {
29  			log.trace("Object added. OldBinding ["
30  					+ evt.getOldBinding()
31  					+ "], NewBinding ["
32  					+ evt.getNewBinding());
33  		}
34  		
35  		public void objectChanged(NamingEvent evt) {
36  			log.trace("Object changed. OldBinding ["
37  					+ evt.getOldBinding()
38  					+ "], NewBinding ["
39  					+ evt.getNewBinding());
40  		}
41  		
42  		public void objectRemoved(NamingEvent evt) {
43  			log.trace("Object removed. OldBinding ["
44  					+ evt.getOldBinding()
45  					+ "], NewBinding ["
46  					+ evt.getNewBinding());
47  		}
48  		
49  		public void objectRenamed(NamingEvent evt) {
50  			log.trace("Object renamed. OldBinding ["
51  					+ evt.getOldBinding()
52  					+ "], NewBinding ["
53  					+ evt.getNewBinding());
54  		}
55  		
56  	}
57  	
58  	private static final Log log = LogFactory.getLog(LdapObject.class);
59  	
60  	private LdapNamingListener m_eventListener = new LdapNamingListener();
61  	
62  	private LdapContext m_context = null; 
63  	private EventDirContext m_eventContext = null;
64  	private LdapName m_name;
65  	
66  	public abstract void addPropertyChangeListener(PropertyChangeListener listener);
67  	
68  	public boolean equals(Object o) {
69  		return EqualsBuilder.reflectionEquals(this, o);
70  	}
71  	
72  	protected final Attributes getAttributes() {
73  		try {
74  			return m_context.getAttributes(m_name);
75  		}
76  		catch(Exception e) {
77  			return null;
78  		}
79  	}
80  	
81  	protected final void uncontextualize() throws NamingException {
82  		m_eventContext.removeNamingListener(m_eventListener);
83  		m_eventContext = null;
84  		m_context = null;
85  		m_name = null;
86  	}
87  	
88  	protected final LdapContext getContext() {
89  		return m_context;
90  	}
91  
92  	public final LdapClass getLdapClass() throws LdapClassException {
93  		return LdapClass.classOf(this);
94  	}
95  	
96  	public final LdapName getName() {
97  		return m_name;
98  	}
99  	
100 	public int hashCode() {
101 		return HashCodeBuilder.reflectionHashCode(this);
102 	}
103 	
104 	protected void contextualize(LdapName name, LdapContext context) throws NamingException {
105 		m_name = name;
106 		m_context = context;
107 		m_eventContext = (EventDirContext) context;
108 		m_eventContext.addNamingListener(m_name, EventDirContext.OBJECT_SCOPE, m_eventListener);
109 	}
110 		
111 	public abstract void removePropertyChangeListener(PropertyChangeListener listener);
112 	
113 	public String toString() {
114 		return ToStringBuilder.reflectionToString(this);
115 	}
116 	
117 }