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.ArrayList; 019 import java.util.Collection; 020 import java.util.HashMap; 021 import java.util.Iterator; 022 import java.util.List; 023 import java.util.Map; 024 025 import org.apache.commons.lang.StringUtils; 026 import org.kuali.kfs.coa.businessobject.Chart; 027 import org.kuali.kfs.coa.dataaccess.ChartDao; 028 import org.kuali.kfs.coa.service.ChartService; 029 import org.kuali.kfs.sys.KFSConstants; 030 import org.kuali.kfs.sys.context.SpringContext; 031 import org.kuali.kfs.sys.identity.KfsKimAttributes; 032 import org.kuali.kfs.sys.service.NonTransactional; 033 import org.kuali.rice.kim.bo.Person; 034 import org.kuali.rice.kim.bo.role.dto.RoleMembershipInfo; 035 import org.kuali.rice.kim.bo.types.dto.AttributeSet; 036 import org.kuali.rice.kim.service.PersonService; 037 import org.kuali.rice.kim.service.RoleManagementService; 038 import org.kuali.rice.kns.service.BusinessObjectDictionaryService; 039 import org.kuali.rice.kns.util.spring.Cached; 040 041 /** 042 * This class is the service implementation for the Chart structure. This is the default, Kuali delivered implementation. 043 */ 044 @NonTransactional 045 public class ChartServiceImpl implements ChartService { 046 protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ChartServiceImpl.class); 047 048 private ChartDao chartDao; 049 private RoleManagementService roleManagementService; 050 private PersonService<Person> personService; 051 052 /** 053 * @see org.kuali.kfs.coa.service.ChartService#getByPrimaryId(java.lang.String) 054 */ 055 public Chart getByPrimaryId(String chartOfAccountsCode) { 056 return chartDao.getByPrimaryId(chartOfAccountsCode); 057 } 058 059 /** 060 * 061 * @see org.kuali.kfs.coa.service.ChartService#getUniversityChart() 062 */ 063 public Chart getUniversityChart() { 064 return chartDao.getUniversityChart(); 065 } 066 067 /** 068 * @see org.kuali.kfs.coa.service.ChartService#getAllChartCodes() 069 */ 070 public List<String> getAllChartCodes() { 071 Collection<Chart> charts = chartDao.getAll(); 072 List<String> chartCodes = new ArrayList<String>(); 073 for ( Chart chart : charts ) { 074 chartCodes.add( chart.getChartOfAccountsCode() ); 075 } 076 077 return chartCodes; 078 } 079 080 081 /** 082 * @see org.kuali.module.chart.service.getReportsToHierarchy() 083 */ 084 @Cached 085 public Map<String, String> getReportsToHierarchy() { 086 087 LOG.debug("getReportsToHierarchy"); 088 Map<String, String> reportsToHierarchy = new HashMap(); 089 090 Iterator iter = getAllChartCodes().iterator(); 091 while (iter.hasNext()) { 092 Chart chart = (Chart) getByPrimaryId((String) iter.next()); 093 094 if (LOG.isDebugEnabled()) { 095 LOG.debug("adding " + chart.getChartOfAccountsCode() + "-->" + chart.getReportsToChartOfAccountsCode()); 096 } 097 reportsToHierarchy.put(chart.getChartOfAccountsCode(), chart.getReportsToChartOfAccountsCode()); 098 } 099 100 return reportsToHierarchy; 101 } 102 103 /** 104 * @see org.kuali.kfs.coa.service.ChartService#getChartsThatUserIsResponsibleFor(org.kuali.rice.kns.bo.user.KualiUser) 105 */ 106 public List getChartsThatUserIsResponsibleFor(Person person) { 107 if (LOG.isDebugEnabled()) { 108 LOG.debug("retrieving chartsResponsible list for user " + person.getName()); 109 } 110 111 // gets the list of accounts that the user is the Fiscal Officer of 112 List chartList = chartDao.getChartsThatUserIsResponsibleFor(person); 113 if (LOG.isDebugEnabled()) { 114 LOG.debug("retrieved chartsResponsible list for user " + person.getName()); 115 } 116 return chartList; 117 } 118 119 public boolean isParentChart(String potentialChildChartCode, String potentialParentChartCode) { 120 if ((potentialChildChartCode == null) || (potentialParentChartCode == null)) { 121 throw new IllegalArgumentException("The isParentChartCode method requires a non-null potentialChildChartCode and potentialParentChartCode"); 122 } 123 Chart thisChart = getByPrimaryId(potentialChildChartCode); 124 if ((thisChart == null) || StringUtils.isBlank(thisChart.getChartOfAccountsCode())) { 125 throw new IllegalArgumentException("The isParentChartCode method requires a valid potentialChildChartCode"); 126 } 127 if (thisChart.getCode().equals(thisChart.getReportsToChartOfAccountsCode())) { 128 return false; 129 } 130 else if (potentialParentChartCode.equals(thisChart.getReportsToChartOfAccountsCode())) { 131 return true; 132 } 133 else { 134 return isParentChart(thisChart.getReportsToChartOfAccountsCode(), potentialParentChartCode); 135 } 136 } 137 138 /** 139 * @see org.kuali.kfs.coa.service.ChartService#getChartManager(java.lang.String) 140 */ 141 public Person getChartManager(String chartOfAccountsCode) { 142 String chartManagerId = null; 143 Person chartManager = null; 144 145 AttributeSet qualification = new AttributeSet(); 146 qualification.put(KfsKimAttributes.CHART_OF_ACCOUNTS_CODE, chartOfAccountsCode); 147 148 Collection<String> chartManagerList = roleManagementService.getRoleMemberPrincipalIds(KFSConstants.ParameterNamespaces.KFS, KFSConstants.SysKimConstants.CHART_MANAGER_KIM_ROLE_NAME, qualification); 149 150 if ( !chartManagerList.isEmpty() ) { 151 chartManagerId = chartManagerList.iterator().next(); 152 } 153 154 if (chartManagerId != null) { 155 chartManager = getPersonService().getPerson(chartManagerId); 156 } 157 158 return chartManager; 159 } 160 161 /** 162 * @return Returns the chartDao. 163 */ 164 public ChartDao getChartDao() { 165 return chartDao; 166 } 167 168 /** 169 * @param chartDao The chartDao to set. 170 */ 171 public void setChartDao(ChartDao chartDao) { 172 this.chartDao = chartDao; 173 } 174 175 /** 176 * Gets the roleManagementService attribute. 177 * 178 * @return Returns the roleManagementService. 179 */ 180 public RoleManagementService getRoleManagementService() { 181 return roleManagementService; 182 } 183 184 /** 185 * Sets the roleManagementService attribute value. 186 * 187 * @param roleManagementService The roleManagementService to set. 188 */ 189 public void setRoleManagementService(RoleManagementService roleManagementService) { 190 this.roleManagementService = roleManagementService; 191 } 192 193 /** 194 * @return Returns the personService. 195 */ 196 protected PersonService<Person> getPersonService() { 197 if(personService==null) 198 personService = SpringContext.getBean(PersonService.class); 199 return personService; 200 } 201 202 } 203