Java Mailing List Archive

http://www.gg3721.com/

Home » Hibernate Commits List »

[hibernate-commits] Hibernate SVN: r14976 - in
 search/trunk/src/java/org/hibernate/search: cfg and 1 other
 directory.

hibernate-commits

2008-07-29


Author LoginPost Reply
Author: hardy.ferentschik
Date: 2008-07-29 08:30:01 -0400 (Tue, 29 Jul 2008)
New Revision: 14976

Added:
 search/trunk/src/java/org/hibernate/search/cfg/
 search/trunk/src/java/org/hibernate/search/cfg/EventListenerRegister.java
Removed:
 search/trunk/src/java/org/hibernate/search/cfg/
Log:
Moved event listener configuration from annotations into Hibernate Search.

Added: search/trunk/src/java/org/hibernate/search/cfg/EventListenerRegister.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/cfg/EventListenerRegister.java                  (rev 0)
+++ search/trunk/src/java/org/hibernate/search/cfg/EventListenerRegister.java  2008-07-29 12:30:01 UTC (rev 14976)
@@(protected) @@
+// $Id: SearchConfiguration.java 14874 2008-07-04 15:52:20Z hardy.ferentschik $
+package org.hibernate.search.cfg;
+
+import java.util.Properties;
+
+import org.hibernate.event.EventListeners;
+import org.hibernate.event.PostCollectionRecreateEventListener;
+import org.hibernate.event.PostCollectionRemoveEventListener;
+import org.hibernate.event.PostCollectionUpdateEventListener;
+import org.hibernate.event.PostDeleteEventListener;
+import org.hibernate.event.PostInsertEventListener;
+import org.hibernate.event.PostUpdateEventListener;
+import org.hibernate.search.event.FullTextIndexEventListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Helper methods initializing Hibernate Search event listeners.
+ *
+ * @author Emmanuel Bernard
+ * @author Hardy Ferentschik
+ */
+public class EventListenerRegister {
+
+  private static final Logger log = LoggerFactory.getLogger(EventListenerRegister.class);
+
+  @SuppressWarnings("unchecked")
+  public static void enableHibernateSearch(EventListeners eventListeners, Properties properties) {
+    // check whether search is explicitly enabled - if so there is nothing to do    
+    String enableSearchListeners = properties.getProperty( "hibernate.search.autoregister_listeners" );
+    if("false".equalsIgnoreCase(enableSearchListeners )) {
+      log.info("Property hibernate.search.autoregister_listeners is set to false." +
+          " No attempt will be made to register Hibernate Search event listeners.");
+      return;
+    }
+        
+    FullTextIndexEventListener searchEventListener = new FullTextIndexEventListener();
+    
+    //TODO Generalize this. Pretty much the same code all the time. Reflection?
+    {
+      boolean present = false;
+      PostInsertEventListener[] listeners = eventListeners
+          .getPostInsertEventListeners();
+      if (listeners != null) {
+        for (Object eventListener : listeners) {
+          // not isAssignableFrom since the user could subclass
+          present = present
+              || searchEventListener.getClass() == eventListener.getClass();
+        }
+        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;
+          eventListeners.setPostInsertEventListeners(newListeners);
+        }
+      } else {
+        eventListeners
+            .setPostInsertEventListeners(new PostInsertEventListener[] { (PostInsertEventListener) searchEventListener });
+      }
+    }
+    {
+      boolean present = false;
+      PostUpdateEventListener[] listeners = eventListeners
+          .getPostUpdateEventListeners();
+      if (listeners != null) {
+        for (Object eventListener : listeners) {
+          // not isAssignableFrom since the user could subclass
+          present = present
+              || searchEventListener.getClass() == eventListener
+                  .getClass();
+        }
+        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;
+          eventListeners.setPostUpdateEventListeners(newListeners);
+        }
+      } else {
+        eventListeners
+            .setPostUpdateEventListeners(new PostUpdateEventListener[] { (PostUpdateEventListener) searchEventListener });
+      }
+    }
+    {
+      boolean present = false;
+      PostDeleteEventListener[] listeners = eventListeners
+          .getPostDeleteEventListeners();
+      if (listeners != null) {
+        for (Object eventListener : listeners) {
+          // not isAssignableFrom since the user could subclass
+          present = present
+              || searchEventListener.getClass() == eventListener
+                  .getClass();
+        }
+        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;
+          eventListeners.setPostDeleteEventListeners(newListeners);
+        }
+      } else {
+        eventListeners
+            .setPostDeleteEventListeners(new PostDeleteEventListener[] { (PostDeleteEventListener) searchEventListener });
+      }
+    }    
+    {
+      boolean present = false;
+      PostCollectionRecreateEventListener[] listeners = eventListeners.getPostCollectionRecreateEventListeners();
+      if ( listeners != null ) {
+        for (Object eventListener : listeners) {
+          //not isAssignableFrom since the user could subclass
+          present = present || searchEventListener.getClass() == eventListener.getClass();
+        }
+        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;
+          eventListeners.setPostCollectionRecreateEventListeners( newListeners );
+        }
+      }
+      else {
+        eventListeners.setPostCollectionRecreateEventListeners(
+            new PostCollectionRecreateEventListener[] { (PostCollectionRecreateEventListener) searchEventListener }
+        );
+      }
+    }
+    {
+      boolean present = false;
+      PostCollectionRemoveEventListener[] listeners = eventListeners.getPostCollectionRemoveEventListeners();
+      if ( listeners != null ) {
+        for (Object eventListener : listeners) {
+          //not isAssignableFrom since the user could subclass
+          present = present || searchEventListener.getClass() == eventListener.getClass();
+        }
+        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;
+          eventListeners.setPostCollectionRemoveEventListeners( newListeners );
+        }
+      }
+      else {
+        eventListeners.setPostCollectionRemoveEventListeners(
+            new PostCollectionRemoveEventListener[] { (PostCollectionRemoveEventListener) searchEventListener }
+        );
+      }
+    }
+    {
+      boolean present = false;
+      PostCollectionUpdateEventListener[] listeners = eventListeners.getPostCollectionUpdateEventListeners();
+      if ( listeners != null ) {
+        for (Object eventListener : listeners) {
+          //not isAssignableFrom since the user could subclass
+          present = present || searchEventListener.getClass() == 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;
+          eventListeners.setPostCollectionUpdateEventListeners( newListeners );
+        }
+      }
+      else {
+        eventListeners.setPostCollectionUpdateEventListeners(
+            new PostCollectionUpdateEventListener[] { (PostCollectionUpdateEventListener) searchEventListener }
+        );
+      }
+    }    
+  }
+}


Property changes on: search/trunk/src/java/org/hibernate/search/cfg/EventListenerRegister.java
___________________________________________________________________
Name: svn:eol-style
 + native

_______________________________________________
hibernate-commits mailing list
hibernate-commits@(protected)
https://lists.jboss.org/mailman/listinfo/hibernate-commits
©2008 gg3721.com - Jax Systems, LLC, U.S.A.