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.service.impl; 017 018 import java.util.HashMap; 019 import java.util.List; 020 import java.util.Map; 021 022 import org.apache.commons.codec.binary.Base64; 023 import org.kuali.kfs.gl.businessobject.OriginEntryFull; 024 import org.kuali.kfs.gl.service.GlCorrectionProcessOriginEntryService; 025 import org.kuali.kfs.sys.KFSConstants; 026 import org.kuali.kfs.sys.context.SpringContext; 027 import org.kuali.rice.kns.bo.LookupResults; 028 import org.kuali.rice.kns.service.BusinessObjectService; 029 import org.kuali.rice.kns.service.DateTimeService; 030 import org.kuali.rice.kns.util.GlobalVariables; 031 import org.kuali.rice.kns.util.ObjectUtils; 032 import org.springframework.transaction.annotation.Transactional; 033 034 /** 035 * This implementation of GlCorrectionProcessOriginEntryService uses the database to temporarily store lists of origin entries. 036 * While this implementation does not clear out persisted origin entries, the batch job defined using the 037 * org.kuali.kfs.sys.batch.PurgeOldLookupResultsStep class may cause the purging of origin entries persisted with this implementation. 038 * 039 * @see GlCorrectionProcessOriginEntryService 040 */ 041 @Transactional 042 public class GlCorrectionProcessOriginEntryServiceImpl implements GlCorrectionProcessOriginEntryService { 043 044 private BusinessObjectService businessObjectService; 045 046 /** 047 * Persists the origin entries under a given sequence number. If entries are persisted again under the same sequence number, 048 * then they will be overridden. 049 * 050 * @param glcpSearchResuiltsSequenceNumber a sequence number 051 * @param allEntries a list of origin entries 052 * @throws Exception thrown if anything goes wrong 053 * @see org.kuali.kfs.gl.service.GlCorrectionProcessOriginEntryService#persistAllEntries(java.lang.String, java.util.List) 054 */ 055 public void persistAllEntries(String glcpSearchResuiltsSequenceNumber, List<OriginEntryFull> allEntries) throws Exception { 056 String serializedOriginEntries = new String(Base64.encodeBase64(ObjectUtils.toByteArray(allEntries))); 057 058 LookupResults lookupResults = retrieveGlcpAllOriginEntries(glcpSearchResuiltsSequenceNumber); 059 if (lookupResults == null) { 060 lookupResults = new LookupResults(); 061 lookupResults.setLookupResultsSequenceNumber(glcpSearchResuiltsSequenceNumber); 062 lookupResults.setLookupPersonId(GlobalVariables.getUserSession().getPerson().getPrincipalId()); 063 } 064 lookupResults.setLookupDate(SpringContext.getBean(DateTimeService.class).getCurrentTimestamp()); 065 lookupResults.setSerializedLookupResults(serializedOriginEntries); 066 businessObjectService.save(lookupResults); 067 } 068 069 /** 070 * Retrieves the origin entries stored under the given sequence number 071 * 072 * @param glcpSearchResuiltsSequenceNumber a sequence number 073 * @return a list of origin entries, or null if no results are currently not in the system. 074 * @throws Exception thrown if something goes wrong - vague documentation for a vague exception 075 * @see org.kuali.kfs.gl.service.GlCorrectionProcessOriginEntryService#retrieveAllEntries(java.lang.String) 076 */ 077 public List<OriginEntryFull> retrieveAllEntries(String glcpSearchResuiltsSequenceNumber) throws Exception { 078 LookupResults lookupResults = retrieveGlcpAllOriginEntries(glcpSearchResuiltsSequenceNumber); 079 if (lookupResults == null) { 080 return null; 081 } 082 List<OriginEntryFull> allOEs = (List<OriginEntryFull>) ObjectUtils.fromByteArray(Base64.decodeBase64(lookupResults.getSerializedLookupResults().getBytes())); 083 return allOEs; 084 } 085 086 protected LookupResults retrieveGlcpAllOriginEntries(String glcpSearchResuiltsSequenceNumber) { 087 Map<String, String> criteria = new HashMap<String, String>(); 088 criteria.put(KFSConstants.LOOKUP_RESULTS_SEQUENCE_NUMBER, glcpSearchResuiltsSequenceNumber); 089 LookupResults gaoe = (LookupResults) getBusinessObjectService().findByPrimaryKey(LookupResults.class, criteria); 090 return gaoe; 091 } 092 093 /** 094 * Gets the businessObjectService attribute. 095 * 096 * @return Returns the businessObjectService. 097 */ 098 protected BusinessObjectService getBusinessObjectService() { 099 return businessObjectService; 100 } 101 102 /** 103 * Sets the businessObjectService attribute value. 104 * 105 * @param businessObjectService The businessObjectService to set. 106 */ 107 public void setBusinessObjectService(BusinessObjectService businessObjectService) { 108 this.businessObjectService = businessObjectService; 109 } 110 } 111