001: /*
002: * Copyright 2007 The Kuali Foundation.
003: *
004: * Licensed under the Educational Community License, Version 1.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/ecl1.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.module.gl.service.impl;
017:
018: import java.util.Collection;
019: import java.util.Iterator;
020: import java.util.Map;
021:
022: import org.apache.commons.collections.Closure;
023: import org.apache.commons.collections.CollectionUtils;
024: import org.kuali.core.service.BusinessObjectService;
025: import org.kuali.module.gl.bo.OrgReversionUnitOfWork;
026: import org.kuali.module.gl.bo.OrgReversionUnitOfWorkCategoryAmount;
027: import org.kuali.module.gl.dao.OrgReversionUnitOfWorkDao;
028: import org.kuali.module.gl.service.OrgReversionUnitOfWorkService;
029: import org.springframework.transaction.annotation.Transactional;
030:
031: /**
032: * The base implementation of OrgReversionUnitOfWorkService
033: */
034: @Transactional
035: public class OrgReversionUnitOfWorkServiceImpl implements
036: OrgReversionUnitOfWorkService {
037: private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger
038: .getLogger(OrgReversionUnitOfWorkServiceImpl.class);
039: private BusinessObjectService businessObjectService;
040: private OrgReversionUnitOfWorkDao orgReversionUnitOfWorkDao;
041:
042: /**
043: * This method takes a unit of work retrieved from the persistence store and loads its categories
044: *
045: * @param orgRevUnitOfWork org reversion unit of work to load categories for
046: * @return the org reversion unit of work with loaded categories
047: * @see org.kuali.module.gl.service.OrgReversionUnitOfWorkService#loadCategories(org.kuali.module.gl.bo.OrgReversionUnitOfWork)
048: */
049: public OrgReversionUnitOfWork loadCategories(
050: OrgReversionUnitOfWork orgRevUnitOfWork) {
051: Collection categoryAmounts = businessObjectService
052: .findMatching(
053: OrgReversionUnitOfWorkCategoryAmount.class,
054: orgRevUnitOfWork.toStringMapper());
055: Map<String, OrgReversionUnitOfWorkCategoryAmount> categories = orgRevUnitOfWork
056: .getCategoryAmounts();
057: Iterator iter = categoryAmounts.iterator();
058: while (iter.hasNext()) {
059: OrgReversionUnitOfWorkCategoryAmount catAmount = (OrgReversionUnitOfWorkCategoryAmount) iter
060: .next();
061: categories.put(catAmount.getCategoryCode(), catAmount);
062: }
063: return orgRevUnitOfWork;
064: }
065:
066: /**
067: * Immediate deletion awaits all entries of the unit of work summary tables in the persistence store once
068: * you call this method, for this method is both powerful and deadly and also gets called to clear out
069: * those tables before every single org reversion run.
070: * @see org.kuali.module.gl.service.OrgReversionUnitOfWorkService#removeAll()
071: */
072: public void destroyAllUnitOfWorkSummaries() {
073: orgReversionUnitOfWorkDao.destroyAllUnitOfWorkSummaries();
074: }
075:
076: /**
077: * This save method is guaranteed to save the category data as well.
078: *
079: * @param orgRevUnitOfWork organizationReversionUnitOfWork to save
080: * @see org.kuali.module.gl.service.OrgReversionUnitOfWorkService#save(org.kuali.module.gl.bo.OrgReversionUnitOfWork)
081: */
082: public void save(OrgReversionUnitOfWork orgRevUnitOfWork) {
083: LOG.debug("Saving org reversion summary for "
084: + orgRevUnitOfWork.toString()
085: + "; its category keys are: "
086: + orgRevUnitOfWork.getCategoryAmounts().keySet());
087: businessObjectService.save(orgRevUnitOfWork);
088: CollectionUtils.forAllDo(orgRevUnitOfWork.getCategoryAmounts()
089: .entrySet(), new Closure() {
090: public void execute(Object categoryEntryAsObject) {
091: OrgReversionUnitOfWorkCategoryAmount categoryAmount = (OrgReversionUnitOfWorkCategoryAmount) ((Map.Entry) categoryEntryAsObject)
092: .getValue();
093: LOG.debug("Saving category amount for "
094: + categoryAmount.toString());
095: businessObjectService.save(categoryAmount);
096: }
097: });
098: }
099:
100: /**
101: * Gets the businessObjectService attribute.
102: *
103: * @return Returns the businessObjectService.
104: */
105: public BusinessObjectService getBusinessObjectService() {
106: return businessObjectService;
107: }
108:
109: /**
110: * Sets the businessObjectService attribute value.
111: *
112: * @param businessObjectService The businessObjectService to set.
113: */
114: public void setBusinessObjectService(
115: BusinessObjectService businessObjectService) {
116: this .businessObjectService = businessObjectService;
117: }
118:
119: /**
120: * Gets the orgReversionUnitOfWorkDao attribute.
121: *
122: * @return Returns the orgReversionUnitOfWorkDao.
123: */
124: public OrgReversionUnitOfWorkDao getOrgReversionUnitOfWorkDao() {
125: return orgReversionUnitOfWorkDao;
126: }
127:
128: /**
129: * Sets the orgReversionUnitOfWorkDao attribute value.
130: *
131: * @param orgReversionUnitOfWorkDao The orgReversionUnitOfWorkDao to set.
132: */
133: public void setOrgReversionUnitOfWorkDao(
134: OrgReversionUnitOfWorkDao orgReversionUnitOfWorkDao) {
135: this.orgReversionUnitOfWorkDao = orgReversionUnitOfWorkDao;
136: }
137:
138: }
|