[hibernate-commits] Hibernate SVN: r14985 - search/trunk/src/java/org/hibernate/search/cfg.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Tue Jul 29 12:58:01 EDT 2008


Author: epbernard
Date: 2008-07-29 12:58:00 -0400 (Tue, 29 Jul 2008)
New Revision: 14985

Modified:
   search/trunk/src/java/org/hibernate/search/cfg/EventListenerRegister.java
Log:
add subclass in event listener register checking

Modified: search/trunk/src/java/org/hibernate/search/cfg/EventListenerRegister.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/cfg/EventListenerRegister.java	2008-07-29 14:51:33 UTC (rev 14984)
+++ search/trunk/src/java/org/hibernate/search/cfg/EventListenerRegister.java	2008-07-29 16:58:00 UTC (rev 14985)
@@ -37,6 +37,7 @@
 		FullTextIndexEventListener searchEventListener = new FullTextIndexEventListener();
 		
 		//TODO Generalize this. Pretty much the same code all the time. Reflection? 
+		final Class<? extends FullTextIndexEventListener> searchEventListenerClass = searchEventListener.getClass();
 		{
 			boolean present = false;
 			PostInsertEventListener[] listeners = eventListeners
@@ -45,18 +46,19 @@
 				for (Object eventListener : listeners) {
 					// not isAssignableFrom since the user could subclass
 					present = present
-							|| searchEventListener.getClass() == eventListener.getClass();
+							|| searchEventListenerClass == eventListener.getClass()
+							|| searchEventListenerClass == eventListener.getClass().getSuperclass(); //for FullTextIndexCollectionEventListener
 				}
 				if (!present) {
 					int length = listeners.length + 1;
 					PostInsertEventListener[] newListeners = new PostInsertEventListener[length];
 					System.arraycopy(listeners, 0, newListeners, 0, length - 1);
-					newListeners[length - 1] = (PostInsertEventListener) searchEventListener;
+					newListeners[length - 1] = searchEventListener;
 					eventListeners.setPostInsertEventListeners(newListeners);
 				}
 			} else {
 				eventListeners
-						.setPostInsertEventListeners(new PostInsertEventListener[] { (PostInsertEventListener) searchEventListener });
+						.setPostInsertEventListeners(new PostInsertEventListener[] { searchEventListener });
 			}
 		}
 		{
@@ -67,19 +69,19 @@
 				for (Object eventListener : listeners) {
 					// not isAssignableFrom since the user could subclass
 					present = present
-							|| searchEventListener.getClass() == eventListener
-									.getClass();
+							|| searchEventListenerClass == eventListener.getClass()
+							|| searchEventListenerClass == eventListener.getClass().getSuperclass(); //for FullTextIndexCollectionEventListener
 				}
 				if (!present) {
 					int length = listeners.length + 1;
 					PostUpdateEventListener[] newListeners = new PostUpdateEventListener[length];
 					System.arraycopy(listeners, 0, newListeners, 0, length - 1);
-					newListeners[length - 1] = (PostUpdateEventListener) searchEventListener;
+					newListeners[length - 1] = searchEventListener;
 					eventListeners.setPostUpdateEventListeners(newListeners);
 				}
 			} else {
 				eventListeners
-						.setPostUpdateEventListeners(new PostUpdateEventListener[] { (PostUpdateEventListener) searchEventListener });
+						.setPostUpdateEventListeners(new PostUpdateEventListener[] { searchEventListener });
 			}
 		}
 		{
@@ -90,19 +92,19 @@
 				for (Object eventListener : listeners) {
 					// not isAssignableFrom since the user could subclass
 					present = present
-							|| searchEventListener.getClass() == eventListener
-									.getClass();
+							|| searchEventListenerClass == eventListener.getClass()
+							|| searchEventListenerClass == eventListener.getClass().getSuperclass(); //for FullTextIndexCollectionEventListener
 				}
 				if (!present) {
 					int length = listeners.length + 1;
 					PostDeleteEventListener[] newListeners = new PostDeleteEventListener[length];
 					System.arraycopy(listeners, 0, newListeners, 0, length - 1);
-					newListeners[length - 1] = (PostDeleteEventListener) searchEventListener;
+					newListeners[length - 1] = searchEventListener;
 					eventListeners.setPostDeleteEventListeners(newListeners);
 				}
 			} else {
 				eventListeners
-						.setPostDeleteEventListeners(new PostDeleteEventListener[] { (PostDeleteEventListener) searchEventListener });
+						.setPostDeleteEventListeners(new PostDeleteEventListener[] { searchEventListener });
 			}
 		}		
 		{
@@ -111,19 +113,21 @@
 			if ( listeners != null ) {
 				for (Object eventListener : listeners) {
 					//not isAssignableFrom since the user could subclass
-					present = present || searchEventListener.getClass() == eventListener.getClass();
+					present = present
+							|| searchEventListenerClass == eventListener.getClass()
+							|| searchEventListenerClass == eventListener.getClass().getSuperclass(); //for FullTextIndexCollectionEventListener
 				}
 				if ( !present ) {
 					int length = listeners.length + 1;
 					PostCollectionRecreateEventListener[] newListeners = new PostCollectionRecreateEventListener[length];
 					System.arraycopy( listeners, 0, newListeners, 0, length - 1 );
-					newListeners[length - 1] = (PostCollectionRecreateEventListener) searchEventListener;
+					newListeners[length - 1] = searchEventListener;
 					eventListeners.setPostCollectionRecreateEventListeners( newListeners );
 				}
 			}
 			else {
 				eventListeners.setPostCollectionRecreateEventListeners(
-						new PostCollectionRecreateEventListener[] { (PostCollectionRecreateEventListener) searchEventListener }
+						new PostCollectionRecreateEventListener[] { searchEventListener }
 				);
 			}
 		}
@@ -133,19 +137,21 @@
 			if ( listeners != null ) {
 				for (Object eventListener : listeners) {
 					//not isAssignableFrom since the user could subclass
-					present = present || searchEventListener.getClass() == eventListener.getClass();
+					present = present
+							|| searchEventListenerClass == eventListener.getClass()
+							|| searchEventListenerClass == eventListener.getClass().getSuperclass(); //for FullTextIndexCollectionEventListener
 				}
 				if ( !present ) {
 					int length = listeners.length + 1;
 					PostCollectionRemoveEventListener[] newListeners = new PostCollectionRemoveEventListener[length];
 					System.arraycopy( listeners, 0, newListeners, 0, length - 1 );
-					newListeners[length - 1] = (PostCollectionRemoveEventListener) searchEventListener;
+					newListeners[length - 1] = searchEventListener;
 					eventListeners.setPostCollectionRemoveEventListeners( newListeners );
 				}
 			}
 			else {
 				eventListeners.setPostCollectionRemoveEventListeners(
-						new PostCollectionRemoveEventListener[] { (PostCollectionRemoveEventListener) searchEventListener }
+						new PostCollectionRemoveEventListener[] { searchEventListener }
 				);
 			}
 		}
@@ -155,19 +161,19 @@
 			if ( listeners != null ) {
 				for (Object eventListener : listeners) {
 					//not isAssignableFrom since the user could subclass
-					present = present || searchEventListener.getClass() == eventListener.getClass();
+					present = present || searchEventListenerClass == eventListener.getClass();
 				}
 				if ( !present ) {
 					int length = listeners.length + 1;
 					PostCollectionUpdateEventListener[] newListeners = new PostCollectionUpdateEventListener[length];
 					System.arraycopy( listeners, 0, newListeners, 0, length - 1 );
-					newListeners[length - 1] = (PostCollectionUpdateEventListener) searchEventListener;
+					newListeners[length - 1] = searchEventListener;
 					eventListeners.setPostCollectionUpdateEventListeners( newListeners );
 				}
 			}
 			else {
 				eventListeners.setPostCollectionUpdateEventListeners(
-						new PostCollectionUpdateEventListener[] { (PostCollectionUpdateEventListener) searchEventListener }
+						new PostCollectionUpdateEventListener[] { searchEventListener }
 				);
 			}
 		}		




More information about the hibernate-commits mailing list