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.module.external.kc.service.impl; 017 018 import java.util.List; 019 import java.util.Map; 020 import java.util.Properties; 021 022 import org.apache.log4j.Logger; 023 import org.kuali.kfs.module.external.kc.service.ExternalizableBusinessObjectService; 024 import org.kuali.kfs.sys.KFSConstants; 025 import org.kuali.kfs.sys.context.SpringContext; 026 import org.kuali.kfs.sys.service.impl.KfsModuleServiceImpl; 027 import org.kuali.rice.kns.bo.ExternalizableBusinessObject; 028 import org.kuali.rice.kns.datadictionary.BusinessObjectEntry; 029 import org.kuali.rice.kns.service.DataDictionaryService; 030 import org.kuali.rice.kns.service.KNSServiceLocator; 031 import org.kuali.rice.kns.util.KNSConstants; 032 import org.kuali.rice.kns.util.ObjectUtils; 033 034 public class KcKfsModuleServiceImpl extends KfsModuleServiceImpl { 035 036 protected static final Logger LOG = Logger.getLogger(KcKfsModuleServiceImpl.class); 037 038 public <T extends ExternalizableBusinessObject> T getExternalizableBusinessObject(Class<T> businessObjectClass, Map<String, Object> fieldValues) { 039 Class<? extends ExternalizableBusinessObject> implementationClass = getExternalizableBusinessObjectImplementation(businessObjectClass); 040 return (T) getExternalizableBusinessObjectService(implementationClass).findByPrimaryKey(fieldValues); 041 } 042 043 public <T extends ExternalizableBusinessObject> List<T> getExternalizableBusinessObjectsListForLookup(Class<T> businessObjectClass, Map<String, Object> fieldValues, boolean unbounded) { 044 return getExternalizableBusinessObjectsList( businessObjectClass,fieldValues); 045 } 046 047 public <T extends ExternalizableBusinessObject> List<T> getExternalizableBusinessObjectsList(Class<T> businessObjectClass, Map<String, Object> fieldValues) { 048 Class<? extends ExternalizableBusinessObject> implementationClass = getExternalizableBusinessObjectImplementation(businessObjectClass); 049 return (List<T>) getExternalizableBusinessObjectService(implementationClass).findMatching(fieldValues); 050 } 051 052 /** 053 * Finds the business object service via the class to service mapping provided in the module configuration. 054 * 055 * @param clazz 056 * @return 057 */ 058 private ExternalizableBusinessObjectService getExternalizableBusinessObjectService(Class clazz){ 059 String serviceName = null; 060 ExternalizableBusinessObjectService eboService = null; 061 062 Map<Class, String> externalizableBusinessObjectServices = ((KcFinancialSystemModuleConfiguration)getModuleConfiguration()).getExternalizableBusinessObjectServiceImplementations(); 063 064 if(ObjectUtils.isNotNull(externalizableBusinessObjectServices) && ObjectUtils.isNotNull(clazz)){ 065 serviceName = (String)externalizableBusinessObjectServices.get(clazz); 066 eboService = (ExternalizableBusinessObjectService)SpringContext.getService(serviceName); 067 } 068 069 return eboService; 070 } 071 072 /** 073 * Gets primary key fields from the Datadictionary entries for the object. 074 * 075 * @see org.kuali.rice.kns.service.impl.ModuleServiceBase#listPrimaryKeyFieldNames(java.lang.Class) 076 */ 077 public List listPrimaryKeyFieldNames(Class businessObjectInterfaceClass) { 078 Class clazz = getExternalizableBusinessObjectImplementation(businessObjectInterfaceClass); 079 final BusinessObjectEntry boEntry = SpringContext.getBean(DataDictionaryService.class).getDataDictionary().getBusinessObjectEntry(clazz.getName()); 080 if (boEntry == null) { 081 return null; 082 } 083 return boEntry.getPrimaryKeys(); 084 } 085 086 /** 087 * Changing the base url to KC url 088 * 089 * @see org.kuali.rice.kns.service.impl.ModuleServiceBase#getInquiryUrl(java.lang.Class) 090 */ 091 protected String getInquiryUrl(Class inquiryBusinessObjectClass){ 092 String baseUrl = KNSServiceLocator.getKualiConfigurationService().getPropertyString(KFSConstants.KC_APPLICATION_URL_KEY); 093 String inquiryUrl = baseUrl; 094 if (!inquiryUrl.endsWith("/")) { 095 inquiryUrl = inquiryUrl + "/"; 096 } 097 return inquiryUrl + "kr/" + KNSConstants.INQUIRY_ACTION; 098 } 099 100 /** 101 * Mapping the kfs classes and parameters over to KC equivalents 102 * 103 * @see org.kuali.rice.kns.service.impl.ModuleServiceBase#getUrlParameters(java.lang.String, java.util.Map) 104 */ 105 protected Properties getUrlParameters(String businessObjectClassAttribute, Map<String, String[]> parameters){ 106 Properties urlParameters = new Properties(); 107 String paramNameToConvert = null; 108 Map<String, String> kfsToKcInquiryUrlParameterMapping = ((KcFinancialSystemModuleConfiguration)getModuleConfiguration()).getKfsToKcInquiryUrlParameterMapping(); 109 Map<String, String> kfsToKcInquiryUrlClassMapping = ((KcFinancialSystemModuleConfiguration)getModuleConfiguration()).getKfsToKcInquiryUrlClassMapping(); 110 111 for (String paramName : parameters.keySet()) { 112 String parameterName = paramName; 113 String[] parameterValues = parameters.get(paramName); 114 115 if (parameterValues.length > 0) { 116 //attempt to convert parameter name if necessary 117 paramNameToConvert = businessObjectClassAttribute + "." + paramName; 118 if( kfsToKcInquiryUrlParameterMapping.containsKey(paramNameToConvert) ){ 119 parameterName = (String)kfsToKcInquiryUrlParameterMapping.get(paramNameToConvert); 120 } 121 urlParameters.put(parameterName, parameterValues[0]); 122 } 123 } 124 125 urlParameters.put(KNSConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, kfsToKcInquiryUrlClassMapping.get(businessObjectClassAttribute)); 126 urlParameters.put(KNSConstants.DISPATCH_REQUEST_PARAMETER, 127 KNSConstants.CONTINUE_WITH_INQUIRY_METHOD_TO_CALL); 128 return urlParameters; 129 } 130 131 }