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.coa.service.impl;
017    
018    import java.util.List;
019    
020    import org.kuali.kfs.coa.businessobject.Account;
021    import org.kuali.kfs.coa.businessobject.FundGroup;
022    import org.kuali.kfs.coa.businessobject.SubFundGroup;
023    import org.kuali.kfs.coa.dataaccess.SubFundGroupDao;
024    import org.kuali.kfs.coa.service.SubFundGroupService;
025    import org.kuali.kfs.sys.KFSConstants;
026    import org.kuali.rice.kns.service.DataDictionaryService;
027    import org.kuali.rice.kns.service.ParameterService;
028    import org.kuali.rice.kns.util.ObjectUtils;
029    
030    /**
031     * This service implementation is the default implementation of the SubFundGroup service that is delivered with Kuali.
032     */
033    public class SubFundGroupServiceImpl implements SubFundGroupService {
034        private ParameterService parameterService;
035        private DataDictionaryService dataDictionaryService;
036        private SubFundGroupDao subFundGroupDao;
037    
038        /**
039         * @see org.kuali.kfs.coa.service.SubFundGroupService#isForContractsAndGrants(org.kuali.kfs.coa.businessobject.SubFundGroup)
040         */
041        public boolean isForContractsAndGrants(SubFundGroup subFundGroup) {
042            if (ObjectUtils.isNull(subFundGroup)) {
043                return false;
044            }
045            else if (fundGroupDenotesContractsAndGrants()) {
046                return parameterService.getParameterEvaluator(Account.class, KFSConstants.ChartApcParms.ACCOUNT_CG_DENOTING_VALUE, subFundGroup.getFundGroupCode()).evaluationSucceeds();
047        //      return getContractsAndGrantsDenotingValue(subFundGroup.getFundGroupCode());
048            }
049            else {
050                return parameterService.getParameterEvaluator(Account.class, KFSConstants.ChartApcParms.ACCOUNT_CG_DENOTING_VALUE, subFundGroup.getSubFundGroupCode()).evaluationSucceeds();
051    
052               //return getContractsAndGrantsDenotingValue(subFundGroup.getSubFundGroupCode());
053            }
054        }
055    
056        /**
057         * @see org.kuali.kfs.coa.service.SubFundGroupService#getContractsAndGrantsDenotingAttributeLabel()
058         */
059        public String getContractsAndGrantsDenotingAttributeLabel() {
060            if (fundGroupDenotesContractsAndGrants()) {
061                return dataDictionaryService.getAttributeLabel(FundGroup.class, KFSConstants.FUND_GROUP_CODE_PROPERTY_NAME);
062            }
063            else {
064                return dataDictionaryService.getAttributeLabel(SubFundGroup.class, KFSConstants.SUB_FUND_GROUP_CODE_PROPERTY_NAME);
065            }
066        }
067    
068        /**
069         * 
070         * @see org.kuali.kfs.coa.service.SubFundGroupService#getContractsAndGrantsDenotingValue(org.kuali.kfs.coa.businessobject.SubFundGroup)
071         */
072        public String getContractsAndGrantsDenotingValue(SubFundGroup subFundGroup) {
073            if (fundGroupDenotesContractsAndGrants()) {
074                return subFundGroup.getFundGroupCode();
075            }
076            else {
077                return subFundGroup.getSubFundGroupCode();
078            }
079        }
080    
081    
082        /**
083         * @see org.kuali.kfs.coa.service.SubFundGroupService#getContractsAndGrantsDenotingValues()
084         */
085        public List<String> getContractsAndGrantsDenotingValues() {
086            return parameterService.getParameterValues(Account.class, KFSConstants.ChartApcParms.ACCOUNT_CG_DENOTING_VALUE);
087        }
088        
089        
090        /**
091         * @see org.kuali.kfs.coa.service.SubFundGroupService#getContractsAndGrantsDenotingValueForMessage()
092         */
093        public String getContractsAndGrantsDenotingValueForMessage() {
094            return parameterService.getParameterEvaluator(Account.class, KFSConstants.ChartApcParms.ACCOUNT_CG_DENOTING_VALUE).getParameterValuesForMessage();
095        }
096    
097        /**
098         * 
099         * This checks to see if there is a value for checking if a Fund Group denotes Contracts and Grants
100         * @return false if there is no value
101         */
102        protected boolean fundGroupDenotesContractsAndGrants() {
103            return parameterService.getIndicatorParameter(Account.class, KFSConstants.ChartApcParms.ACCOUNT_FUND_GROUP_DENOTES_CG);
104        }
105    
106        /**
107         * @see org.kuali.kfs.coa.service.SubFundGroupService#getByPrimaryId(java.lang.String)
108         */
109        public SubFundGroup getByPrimaryId(String subFundGroupCode) {
110            return subFundGroupDao.getByPrimaryId(subFundGroupCode);
111        }
112    
113        /**
114         * @see org.kuali.kfs.coa.service.SubFundGroupService#getByChartAndAccount(java.lang.String, java.lang.String)
115         */
116        public SubFundGroup getByChartAndAccount(String chartCode, String accountNumber) {
117            return subFundGroupDao.getByChartAndAccount(chartCode, accountNumber);
118        }
119    
120        /**
121         * 
122         * This method injects the ParameterService
123         * @param parameterService
124         */
125        public void setParameterService(ParameterService parameterService) {
126            this.parameterService = parameterService;
127        }
128    
129        /**
130         * Sets the subFundGroupDao attribute values.
131         * 
132         * @param subFundGroupDao The subFundGroupDao to set.
133         */
134        public void setSubFundGroupDao(SubFundGroupDao subFundGroupDao) {
135            this.subFundGroupDao = subFundGroupDao;
136        }
137    
138        /**
139         * Sets the dataDictionarySerivce
140         * 
141         * @param dataDictionaryService The dataDictionaryService implementation to set.
142         */
143        public void setDataDictionaryService(DataDictionaryService dataDictionaryService) {
144            this.dataDictionaryService = dataDictionaryService;
145        }
146    }