private Criteria buildJpaCriteria(Class clazz, Map<String, ?> fieldValues) {
    Criteria criteria = new Criteria(clazz.getName());
    for (Iterator i = fieldValues.entrySet().iterator(); i.hasNext(); ) {
      Map.Entry<String, ?> e = (Map.Entry<String, ?>) i.next();

      String key = e.getKey();
      Object value = e.getValue();
      String alias = "";
      String[] keySplit = key.split("\\.");
      if (keySplit.length > 1) {
        alias = keySplit[keySplit.length - 2];
        String variableKey = keySplit[keySplit.length - 1];
        for (int j = 0; j < keySplit.length - 1; j++) {
          if (criteria.getAliasIndex(keySplit[j]) == -1) {
            criteria.join(keySplit[j], keySplit[j], false, true);
          }
        }
        key = "__JPA_ALIAS[['" + alias + "']]__." + variableKey;
      }
      if (value == null) {
        continue;
      } else if (value instanceof Collection) {
        criteria.in(key, (Collection) value);
      } else {
        criteria.eq(key, value);
      }
    }
    return criteria;
  }
 /** @see org.kuali.rice.krad.dao.MaintenanceDocumentDao#deleteLocks(java.lang.String) */
 public void deleteLocks(String documentNumber) {
   Criteria criteria = new Criteria(MaintenanceLock.class.getName());
   criteria.eq("documentNumber", documentNumber);
   new QueryByCriteria(entityManager, criteria, QueryByCriteriaType.DELETE)
       .toQuery()
       .executeUpdate();
 }
 /**
  * This is the default impl that comes with Kuali - uses OJB.
  *
  * @see org.kuali.rice.krad.dao.BusinessObjectDao#countMatching(java.lang.Class, java.util.Map,
  *     java.util.Map)
  */
 public int countMatching(
     Class clazz, Map<String, ?> positiveFieldValues, Map<String, ?> negativeFieldValues) {
   Criteria criteria = buildJpaCriteria(clazz, positiveFieldValues);
   criteria.and(buildNegativeJpaCriteria(clazz, negativeFieldValues));
   return ((Long) new QueryByCriteria(entityManager, criteria).toCountQuery().getSingleResult())
       .intValue();
 }
  private Criteria buildNegativeJpaCriteria(Class clazz, Map negativeFieldValues) {
    Criteria criteria = new Criteria(clazz.getName());
    for (Iterator i = negativeFieldValues.entrySet().iterator(); i.hasNext(); ) {
      Map.Entry e = (Map.Entry) i.next();

      String key = (String) e.getKey();
      Object value = e.getValue();
      if (value instanceof Collection) {
        criteria.notIn(key, (List) value);
      } else {
        criteria.ne(key, value);
      }
    }

    return criteria;
  }
 /**
  * Applies the search results limit to the search criteria for this BO (JPA)
  *
  * @param businessObjectClass BO class to search on / get limit for
  * @param criteria search criteria
  */
 public static void applySearchResultsLimit(
     Class businessObjectClass,
     org.kuali.rice.core.framework.persistence.jpa.criteria.Criteria criteria) {
   Integer limit = getSearchResultsLimit(businessObjectClass, null);
   if (limit != null) {
     criteria.setSearchLimit(limit);
   }
 }
  /**
   * @see org.kuali.rice.krad.dao.MaintenanceDocumentDao#getLockingDocumentNumber(java.lang.String,
   *     java.lang.String)
   */
  public String getLockingDocumentNumber(String lockingRepresentation, String documentNumber) {
    String lockingDocNumber = "";

    // build the query criteria
    Criteria criteria = new Criteria(MaintenanceLock.class.getName());
    criteria.eq("lockingRepresentation", lockingRepresentation);

    // if a docHeaderId is specified, then it will be excluded from the
    // locking representation test.
    if (StringUtils.isNotBlank(documentNumber)) {
      criteria.ne(KRADPropertyConstants.DOCUMENT_NUMBER, documentNumber);
    }

    // attempt to retrieve a document based off this criteria
    MaintenanceLock maintenanceLock =
        (MaintenanceLock) new QueryByCriteria(entityManager, criteria).toQuery().getSingleResult();

    // if a document was found, then there's already one out there pending,
    // and we consider it 'locked' and we return the docnumber.
    if (maintenanceLock != null) {
      lockingDocNumber = maintenanceLock.getDocumentNumber();
    }
    return lockingDocNumber;
  }
 private Criteria buildInactiveJpaCriteria(Class clazz) {
   Criteria criteria = new Criteria(clazz.getName());
   criteria.eq(KRADPropertyConstants.ACTIVE, false);
   return criteria;
 }
 /**
  * This is the default impl that comes with Kuali - uses OJB.
  *
  * @see org.kuali.rice.krad.dao.BusinessObjectDao#findMatching(java.lang.Class, java.util.Map)
  */
 public <T extends BusinessObject> Collection<T> findMatchingOrderBy(
     Class<T> clazz, Map<String, ?> fieldValues, String sortField, boolean sortAscending) {
   Criteria criteria = buildJpaCriteria(clazz, fieldValues);
   criteria.orderBy(sortField, sortAscending);
   return (Collection<T>) new QueryByCriteria(entityManager, criteria).toQuery().getResultList();
 }
 /**
  * @see org.kuali.rice.krad.dao.BusinessObjectDao#findMatchingActive(java.lang.Class,
  *     java.util.Map)
  */
 public <T extends BusinessObject> Collection<T> findMatchingActive(
     Class<T> clazz, Map<String, ?> fieldValues) {
   Criteria criteria = buildJpaCriteria(clazz, fieldValues);
   criteria.and(buildActiveJpaCriteria(clazz));
   return (Collection<T>) new QueryByCriteria(entityManager, criteria).toQuery().getResultList();
 }
 /**
  * @see org.kuali.rice.krad.dao.BusinessObjectDao#findAllActiveOrderBy(java.lang.Class,
  *     java.lang.String, boolean)
  */
 public <T extends BusinessObject> Collection<T> findAllActiveOrderBy(
     Class<T> clazz, String sortField, boolean sortAscending) {
   Criteria criteria = buildActiveJpaCriteria(clazz);
   criteria.orderBy(sortField, sortAscending);
   return (Collection<T>) new QueryByCriteria(entityManager, criteria).toQuery().getResultList();
 }