Package org.hibernate.cfg.search

Source Code of org.hibernate.cfg.search.HibernateSearchEventListenerRegister

/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* Copyright (c) 2010, Red Hat Inc. or third-party contributors as
* indicated by the @author tags or express copyright attribution
* statements applied by the authors.  All third-party contributions are
* distributed under license by Red Hat Inc.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA  02110-1301  USA
*/
package org.hibernate.cfg.search;

import java.util.Properties;

import org.hibernate.AnnotationException;
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.util.ReflectHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* Helper methods initializing Hibernate Search event listeners.
*
* @deprecated as of release 3.4.0.CR2, replaced by Hibernate Search's {@link org.hibernate.search.cfg.EventListenerRegister}
* @author Emmanuel Bernard
* @author Hardy Ferentschik
*/
@Deprecated
public class HibernateSearchEventListenerRegister {

  private static final Logger log = LoggerFactory.getLogger(HibernateSearchEventListenerRegister.class);

  /**
   * Class name of the class needed to enable Search.
   */
  private static final String FULL_TEXT_INDEX_EVENT_LISTENER_CLASS = "org.hibernate.search.event.FullTextIndexEventListener";

  /**
   * @deprecated as of release 3.4.0.CR2, replaced by Hibernate Search's {@link org.hibernate.search.cfg.EventListenerRegister#enableHibernateSearch(EventListeners, Properties)}
   */
  @SuppressWarnings("unchecked")
  @Deprecated
  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;
    }
   
    // add search events if the jar is available and class can be loaded
    Class searchEventListenerClass = attemptToLoadSearchEventListener();
    if ( searchEventListenerClass == null ) {
      log.info("Unable to find {} on the classpath. Hibernate Search is not enabled.", FULL_TEXT_INDEX_EVENT_LISTENER_CLASS);
      return;
    }
   
    Object searchEventListener = instantiateEventListener(searchEventListenerClass);
   
    //TODO Generalize this. Pretty much the same code all the time. Reflecetion?
    {
      boolean present = false;
      PostInsertEventListener[] listeners = eventListeners
          .getPostInsertEventListeners();
      if (listeners != null) {
        for (Object eventListener : listeners) {
          // not isAssignableFrom since the user could subclass
          present = present
              || searchEventListenerClass == 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
              || searchEventListenerClass == 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
              || searchEventListenerClass == 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 || searchEventListenerClass == 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 || searchEventListenerClass == 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 || 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;
          eventListeners.setPostCollectionUpdateEventListeners( newListeners );
        }
      }
      else {
        eventListeners.setPostCollectionUpdateEventListeners(
            new PostCollectionUpdateEventListener[] { (PostCollectionUpdateEventListener) searchEventListener }
        );
      }
    }   
  }

  /**
   * Tries to load Hibernate Search event listener.
   *
   * @return An event listener instance in case the jar was available.
   */
  private static Class<?> attemptToLoadSearchEventListener() {
    Class searchEventListenerClass = null;
    try {
      searchEventListenerClass = ReflectHelper.classForName(
          FULL_TEXT_INDEX_EVENT_LISTENER_CLASS,
          HibernateSearchEventListenerRegister.class);
    } catch (ClassNotFoundException e) {
      log.debug("Search not present in classpath, ignoring event listener registration.");
    }
    return searchEventListenerClass;
  }

  private static Object instantiateEventListener(Class<?> clazz) {
    Object searchEventListener;
    try {
      searchEventListener = clazz.newInstance();
    } catch (Exception e) {
      throw new AnnotationException(
          "Unable to load Search event listener", e);
    }
    return searchEventListener;
  }
}
TOP

Related Classes of org.hibernate.cfg.search.HibernateSearchEventListenerRegister

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.