Open Source Repository

Home /hibernate/hibernate-3.2.4.ga | Repository Home


org/hibernate/util/FilterHelper.java
// $Id: FilterHelper.java 9908 2006-05-08 20:59:20Z [email protected] $
package org.hibernate.util;

import org.hibernate.sql.Template;
import org.hibernate.impl.FilterImpl;
import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.function.SQLFunctionRegistry;

import java.util.Map;
import java.util.Iterator;

/**
 * Implementation of FilterHelper.
 *
 @author Steve Ebersole
 */
public class FilterHelper {

  private final String[] filterNames;
  private final String[] filterConditions;

  /**
   * The map of defined filters.  This is expected to be in format
   * where the filter names are the map keys, and the defined
   * conditions are the values.
   *
   @param filters The map of defined filters.
   @param dialect The sql dialect
   @param functionRegistry The SQL function registry
   */
  public FilterHelper(Map filters, Dialect dialect, SQLFunctionRegistry functionRegistry) {
    int filterCount = filters.size();
    filterNames = new String[filterCount];
    filterConditions = new String[filterCount];
    Iterator iter = filters.entrySet().iterator();
    filterCount = 0;
    while iter.hasNext() ) {
      final Map.Entry entry = (Map.Entryiter.next();
      filterNames[filterCount(Stringentry.getKey();
      filterConditions[filterCount= Template.renderWhereStringTemplate(
          (Stringentry.getValue(),
          FilterImpl.MARKER,
          dialect,
          functionRegistry
        );
      filterConditions[filterCount= StringHelper.replacefilterConditions[filterCount],
          ":",
          ":" + filterNames[filterCount"." );
      filterCount++;
    }
  }

  public boolean isAffectedBy(Map enabledFilters) {
    for int i = 0, max = filterNames.length; i < max; i++ ) {
      if enabledFilters.containsKeyfilterNames[i] ) ) {
        return true;
      }
    }
    return false;
  }

  public String render(String alias, Map enabledFilters) {
    StringBuffer buffer = new StringBuffer();
    renderbuffer, alias, enabledFilters );
    return buffer.toString();
  }

  public void render(StringBuffer buffer, String alias, Map enabledFilters) {
    if filterNames != null && filterNames.length > ) {
      for int i = 0, max = filterNames.length; i < max; i++ ) {
        if enabledFilters.containsKeyfilterNames[i] ) ) {
          final String condition = filterConditions[i];
          if StringHelper.isNotEmptycondition ) ) {
            buffer.append" and " )
                .appendStringHelper.replacecondition, FilterImpl.MARKER, alias ) );
          }
        }
      }
    }
  }
}