/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.gl.service.impl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.codec.binary.Base64;
import org.kuali.kfs.gl.businessobject.OriginEntryFull;
import org.kuali.kfs.gl.service.GlCorrectionProcessOriginEntryService;
import org.kuali.kfs.sys.KFSConstants;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.rice.core.api.datetime.DateTimeService;
import org.kuali.rice.krad.bo.LookupResults;
import org.kuali.rice.krad.service.BusinessObjectService;
import org.kuali.rice.krad.util.GlobalVariables;
import org.kuali.rice.krad.util.ObjectUtils;
import org.springframework.transaction.annotation.Transactional;
/**
* This implementation of GlCorrectionProcessOriginEntryService uses the database to temporarily store lists of origin entries.
* While this implementation does not clear out persisted origin entries, the batch job defined using the
* org.kuali.kfs.sys.batch.PurgeOldLookupResultsStep class may cause the purging of origin entries persisted with this implementation.
*
* @see GlCorrectionProcessOriginEntryService
*/
@Transactional
public class GlCorrectionProcessOriginEntryServiceImpl implements GlCorrectionProcessOriginEntryService {
private BusinessObjectService businessObjectService;
/**
* Persists the origin entries under a given sequence number. If entries are persisted again under the same sequence number,
* then they will be overridden.
*
* @param glcpSearchResuiltsSequenceNumber a sequence number
* @param allEntries a list of origin entries
* @throws Exception thrown if anything goes wrong
* @see org.kuali.kfs.gl.service.GlCorrectionProcessOriginEntryService#persistAllEntries(java.lang.String, java.util.List)
*/
public void persistAllEntries(String glcpSearchResuiltsSequenceNumber, List<OriginEntryFull> allEntries) throws Exception {
String serializedOriginEntries = new String(Base64.encodeBase64(ObjectUtils.toByteArray(allEntries)));
LookupResults lookupResults = retrieveGlcpAllOriginEntries(glcpSearchResuiltsSequenceNumber);
if (lookupResults == null) {
lookupResults = new LookupResults();
lookupResults.setLookupResultsSequenceNumber(glcpSearchResuiltsSequenceNumber);
lookupResults.setLookupPersonId(GlobalVariables.getUserSession().getPerson().getPrincipalId());
}
lookupResults.setLookupDate(SpringContext.getBean(DateTimeService.class).getCurrentTimestamp());
lookupResults.setSerializedLookupResults(serializedOriginEntries);
businessObjectService.save(lookupResults);
}
/**
* Retrieves the origin entries stored under the given sequence number
*
* @param glcpSearchResuiltsSequenceNumber a sequence number
* @return a list of origin entries, or null if no results are currently not in the system.
* @throws Exception thrown if something goes wrong - vague documentation for a vague exception
* @see org.kuali.kfs.gl.service.GlCorrectionProcessOriginEntryService#retrieveAllEntries(java.lang.String)
*/
public List<OriginEntryFull> retrieveAllEntries(String glcpSearchResuiltsSequenceNumber) throws Exception {
LookupResults lookupResults = retrieveGlcpAllOriginEntries(glcpSearchResuiltsSequenceNumber);
if (lookupResults == null) {
return null;
}
List<OriginEntryFull> allOEs = (List<OriginEntryFull>) ObjectUtils.fromByteArray(Base64.decodeBase64(lookupResults.getSerializedLookupResults().getBytes()));
return allOEs;
}
protected LookupResults retrieveGlcpAllOriginEntries(String glcpSearchResuiltsSequenceNumber) {
Map<String, String> criteria = new HashMap<String, String>();
criteria.put(KFSConstants.LOOKUP_RESULTS_SEQUENCE_NUMBER, glcpSearchResuiltsSequenceNumber);
LookupResults gaoe = (LookupResults) getBusinessObjectService().findByPrimaryKey(LookupResults.class, criteria);
return gaoe;
}
/**
* Gets the businessObjectService attribute.
*
* @return Returns the businessObjectService.
*/
protected BusinessObjectService getBusinessObjectService() {
return businessObjectService;
}
/**
* Sets the businessObjectService attribute value.
*
* @param businessObjectService The businessObjectService to set.
*/
public void setBusinessObjectService(BusinessObjectService businessObjectService) {
this.businessObjectService = businessObjectService;
}
}