Open Source Repository

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



org/hibernate/criterion/Junction.java
package org.hibernate.criterion;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.engine.TypedValue;
import org.hibernate.util.StringHelper;

/**
 * A sequence of a logical expressions combined by some
 * associative logical operator
 *
 @author Gavin King
 */
public class Junction implements Criterion {

  private final List criteria = new ArrayList();
  private final String op;
  
  protected Junction(String op) {
    this.op = op;
  }
  
  public Junction add(Criterion criterion) {
    criteria.add(criterion);
    return this;
  }

  public String getOp() {
    return op;
  }

  public TypedValue[] getTypedValues(Criteria crit, CriteriaQuery criteriaQuery)
  throws HibernateException {
    ArrayList typedValues = new ArrayList();
    Iterator iter = criteria.iterator();
    while iter.hasNext() ) {
      TypedValue[] subvalues = ( (Criterioniter.next() ).getTypedValues(crit, criteriaQuery);
      for int i=0; i<subvalues.length; i++ ) {
        typedValues.addsubvalues[i] );
      }
    }
    return (TypedValue[]) typedValues.toArraynew TypedValuetypedValues.size() ] );
  }

  public String toSqlString(Criteria crit, CriteriaQuery criteriaQuery)
  throws HibernateException {

    if criteria.size()==return "1=1";

    StringBuffer buffer = new StringBuffer()
      .append('(');
    Iterator iter = criteria.iterator();
    while iter.hasNext() ) {
      buffer.append( ( (Criterioniter.next() ).toSqlString(crit, criteriaQuery) );
      if iter.hasNext() ) buffer.append(' ').append(op).append(' ');
    }
    return buffer.append(')').toString();
  }

  /**
   @see java.lang.Object#toString()
   */
  public String toString() {
    return '(' + StringHelper.join' ' + op + ' ', criteria.iterator() ) ')';
  }

}