001 /*
002 * Copyright 2011 The Kuali Foundation.
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.kfs.gl.dataaccess.impl;
017
018 import java.util.Collection;
019
020 import org.apache.ojb.broker.query.Criteria;
021 import org.apache.ojb.broker.query.QueryByCriteria;
022 import org.apache.ojb.broker.query.QueryFactory;
023 import org.kuali.kfs.gl.businessobject.SufficientFundBalances;
024 import org.kuali.kfs.gl.dataaccess.SufficientFundBalancesDao;
025 import org.kuali.kfs.sys.KFSPropertyConstants;
026 import org.kuali.rice.kns.dao.impl.PlatformAwareDaoBaseOjb;
027
028 /**
029 * An OJB implementation of the SufficientFundBalancesDao
030 */
031 public class SufficientFundBalancesDaoOjb extends PlatformAwareDaoBaseOjb implements SufficientFundBalancesDao {
032 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(SufficientFundBalancesDaoOjb.class);
033
034 /**
035 * Builds an OJB primary key query from the given parameters and returns the result
036 *
037 * @param universityFiscalYear the university fiscal year of the sufficient funds balance to return
038 * @param chartOfAccountsCode the chart of accounts code of the sufficient funds balance to return
039 * @param accountNumber the account number of the sufficient funds balance to return
040 * @param financialObjectCode the object code of the sufficient funds balance to return
041 * @return the qualifying sufficient funds balance record, or null no suitable record can be found
042 * @see org.kuali.kfs.gl.dataaccess.SufficientFundBalancesDao#getByPrimaryId(java.lang.Integer, java.lang.String, java.lang.String, java.lang.String)
043 */
044 public SufficientFundBalances getByPrimaryId(Integer universityFiscalYear, String chartOfAccountsCode, String accountNumber, String financialObjectCode) {
045 LOG.debug("getByPrimaryId() started");
046
047 Criteria crit = new Criteria();
048 crit.addEqualTo(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, universityFiscalYear);
049 crit.addEqualTo(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, chartOfAccountsCode);
050 crit.addEqualTo(KFSPropertyConstants.ACCOUNT_NUMBER, accountNumber);
051 crit.addEqualTo(KFSPropertyConstants.FINANCIAL_OBJECT_CODE, financialObjectCode);
052
053 QueryByCriteria qbc = QueryFactory.newQuery(SufficientFundBalances.class, crit);
054 return (SufficientFundBalances) getPersistenceBrokerTemplate().getObjectByQuery(qbc);
055 }
056
057 /**
058 * Saves a sufficient fund balance record
059 * @param sfb the sufficient funds balance record to save
060 * @see org.kuali.kfs.gl.dataaccess.SufficientFundBalancesDao#save(org.kuali.kfs.gl.businessobject.SufficientFundBalances)
061 */
062 public void save(SufficientFundBalances sfb) {
063 LOG.debug("save() started");
064
065 getPersistenceBrokerTemplate().store(sfb);
066 }
067
068 /**
069 * Builds an OJB query based on the parameter values and returns all the sufficient fund balances that match that record
070 *
071 * @param universityFiscalYear the university fiscal year of sufficient fund balances to find
072 * @param chartOfAccountsCode the chart of accounts code of sufficient fund balances to find
073 * @param financialObjectCode the object code of sufficient fund balances to find
074 * @return a Collection of sufficient fund balances, qualified by the parameter values
075 * @see org.kuali.kfs.gl.dataaccess.SufficientFundBalancesDao#getByObjectCode(java.lang.Integer, java.lang.String, java.lang.String)
076 */
077 public Collection getByObjectCode(Integer universityFiscalYear, String chartOfAccountsCode, String financialObjectCode) {
078 LOG.debug("getByObjectCode() started");
079
080 Criteria crit = new Criteria();
081 crit.addEqualTo(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, universityFiscalYear);
082 crit.addEqualTo(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, chartOfAccountsCode);
083 crit.addEqualTo(KFSPropertyConstants.FINANCIAL_OBJECT_CODE, financialObjectCode);
084
085 QueryByCriteria qbc = QueryFactory.newQuery(SufficientFundBalances.class, crit);
086 return getPersistenceBrokerTemplate().getCollectionByQuery(qbc);
087 }
088
089 /**
090 * Deletes sufficient fund balances associated with a given year, chart, and account number
091 *
092 * @param universityFiscalYear the university fiscal year of sufficient fund balances to delete
093 * @param chartOfAccountsCode the chart code of sufficient fund balances to delete
094 * @param accountNumber the account number of sufficient fund balances to delete
095 * @return the number of records deleted
096 * @see org.kuali.kfs.gl.dataaccess.SufficientFundBalancesDao#deleteByAccountNumber(java.lang.Integer, java.lang.String, java.lang.String)
097 */
098 public int deleteByAccountNumber(Integer universityFiscalYear, String chartOfAccountsCode, String accountNumber) {
099 LOG.debug("deleteByAccountNumber() started");
100
101 Criteria crit = new Criteria();
102 crit.addEqualTo(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, universityFiscalYear);
103 crit.addEqualTo(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, chartOfAccountsCode);
104 crit.addEqualTo(KFSPropertyConstants.ACCOUNT_NUMBER, accountNumber);
105
106 QueryByCriteria qbc = QueryFactory.newQuery(SufficientFundBalances.class, crit);
107 int count = getPersistenceBrokerTemplate().getCount(qbc);
108 getPersistenceBrokerTemplate().deleteByQuery(qbc);
109
110 // This has to be done because deleteByQuery deletes the rows from the table,
111 // but it doesn't delete them from the cache. If the cache isn't cleared,
112 // later on, you could get an Optimistic Lock Exception because OJB thinks rows
113 // exist when they really don't.
114 getPersistenceBrokerTemplate().clearCache();
115
116 return count;
117 }
118
119 /**
120 * This method should only be used in unit tests. It loads all the gl_sf_balances_t rows in memory into a collection. This won't
121 * sace for production.
122 *
123 * @return a Collection of all sufficient funds records in the database
124 */
125 public Collection testingGetAllEntries() {
126 LOG.debug("testingGetAllEntries() started");
127
128 Criteria criteria = new Criteria();
129 QueryByCriteria qbc = QueryFactory.newQuery(SufficientFundBalances.class, criteria);
130 qbc.addOrderBy(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, true);
131 qbc.addOrderBy(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, true);
132 qbc.addOrderBy(KFSPropertyConstants.ACCOUNT_NUMBER, true);
133 qbc.addOrderBy(KFSPropertyConstants.FINANCIAL_OBJECT_CODE, true);
134
135 return getPersistenceBrokerTemplate().getCollectionByQuery(qbc);
136 }
137 }