/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.module.tem.dataaccess.impl;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.apache.ojb.broker.query.Criteria;
import org.apache.ojb.broker.query.Query;
import org.apache.ojb.broker.query.QueryByCriteria;
import org.apache.ojb.broker.query.QueryFactory;
import org.kuali.kfs.module.tem.TemConstants;
import org.kuali.kfs.module.tem.TemPropertyConstants;
import org.kuali.kfs.module.tem.businessobject.ExpenseTypeObjectCode;
import org.kuali.kfs.module.tem.dataaccess.ExpenseTypeObjectCodeDao;
import org.kuali.kfs.sys.KFSPropertyConstants;
import org.kuali.rice.core.framework.persistence.ojb.dao.PlatformAwareDaoBaseOjb;
/**
* OJB implementation of the ExpenseTypeObjectCodeDao
*/
public class ExpenseTypeObjectCodeDaoOjb extends PlatformAwareDaoBaseOjb implements ExpenseTypeObjectCodeDao {
/**
*
* @see org.kuali.kfs.module.tem.dataaccess.ExpenseTypeObjectCodeDao#findMatchingExpenseTypeObjectCodes(java.lang.String, java.util.List, java.lang.String, java.lang.String)
*/
@Override
public List<ExpenseTypeObjectCode> findMatchingExpenseTypeObjectCodes(String expenseCodeType, Set<String> documentTypes, String tripType, String travelerType) {
if (StringUtils.isBlank(expenseCodeType)) {
throw new IllegalArgumentException("The expenseCodeType parameter of ExpenseTypeCodeDao#findMatchingExpenseTypeObjectCodes may not be null or empty");
}
Criteria c = new Criteria();
c.addEqualTo(TemPropertyConstants.EXPENSE_TYPE_CODE, expenseCodeType);
if (documentTypes != null && !documentTypes.isEmpty()) {
c.addIn(KFSPropertyConstants.DOCUMENT_TYPE_NAME, documentTypes);
}
Set<String> tripTypes = new HashSet<String>();
tripTypes.add(TemConstants.ALL_EXPENSE_TYPE_OBJECT_CODE_TRIP_TYPE);
if (!StringUtils.isBlank(tripType)) {
tripTypes.add(tripType);
}
c.addIn(TemPropertyConstants.TRIP_TYPE_CODE, tripTypes);
Set<String> travelerTypes = new HashSet<String>();
travelerTypes.add(TemConstants.ALL_EXPENSE_TYPE_OBJECT_CODE_TRAVELER_TYPE);
if (!StringUtils.isBlank(travelerType)) {
travelerTypes.add(travelerType);
}
c.addIn(TemPropertyConstants.TRAVELER_TYPE_CODE, travelerTypes);
c.addEqualTo(KFSPropertyConstants.ACTIVE, Boolean.TRUE);
final Query query = QueryFactory.newQuery(ExpenseTypeObjectCode.class, c);
List<ExpenseTypeObjectCode> results = new ArrayList<ExpenseTypeObjectCode>();
results.addAll(getPersistenceBrokerTemplate().getCollectionByQuery(query)); // we're going to reorder these - let's put them in their own array
return results;
}
/**
*
* @see org.kuali.kfs.module.tem.dataaccess.ExpenseTypeObjectCodeDao#findMatchingExpenseTypesObjectCodes(java.util.Set, java.lang.String, java.lang.String)
*/
@Override
public List<ExpenseTypeObjectCode> findMatchingExpenseTypesObjectCodes(Set<String> documentTypes, String tripType, String travelerType) {
if (documentTypes == null || documentTypes.isEmpty()) {
throw new IllegalArgumentException("The documentTypes parameter of ExpenseTypeCodeDao#findMatchingExpenseTypeObjectCodes may not be null or empty");
}
Criteria c = new Criteria();
c.addIn(KFSPropertyConstants.DOCUMENT_TYPE_NAME, documentTypes);
c.addEqualTo(KFSPropertyConstants.ACTIVE, Boolean.TRUE);
if (!StringUtils.isBlank(tripType)) {
Set<String> tripTypes = new HashSet<String>();
tripTypes.add(tripType);
tripTypes.add(TemConstants.ALL_EXPENSE_TYPE_OBJECT_CODE_TRIP_TYPE);
c.addIn(TemPropertyConstants.TRIP_TYPE_CODE, tripTypes);
}
if (!StringUtils.isBlank(travelerType)) {
Set<String> travelerTypes = new HashSet<String>();
travelerTypes.add(travelerType);
travelerTypes.add(TemConstants.ALL_EXPENSE_TYPE_OBJECT_CODE_TRAVELER_TYPE);
c.addIn(TemPropertyConstants.TRAVELER_TYPE_CODE, travelerTypes);
}
QueryByCriteria query = QueryFactory.newQuery(ExpenseTypeObjectCode.class, c);
query.addOrderByAscending(TemPropertyConstants.EXPENSE_TYPE+"."+KFSPropertyConstants.NAME);
List<ExpenseTypeObjectCode> results = new ArrayList<ExpenseTypeObjectCode>();
results.addAll(getPersistenceBrokerTemplate().getCollectionByQuery(query));
return results;
}
}