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.cam.document.service.impl; 017 018 import java.util.ArrayList; 019 import java.util.Collections; 020 import java.util.Comparator; 021 import java.util.List; 022 023 import org.kuali.kfs.module.cam.CamsConstants; 024 import org.kuali.kfs.module.cam.businessobject.Asset; 025 import org.kuali.kfs.module.cam.businessobject.AssetRetirementGlobal; 026 import org.kuali.kfs.module.cam.businessobject.AssetRetirementGlobalDetail; 027 import org.kuali.kfs.module.cam.document.service.AssetService; 028 import org.kuali.kfs.module.cam.document.service.RetirementInfoService; 029 import org.kuali.kfs.sys.KFSConstants; 030 import org.kuali.rice.kns.service.ParameterService; 031 032 /** 033 * Implements RetirementInfoService, assists in identifying the latest retirement record 034 */ 035 public class RetirementInfoServiceImpl implements RetirementInfoService { 036 037 private ParameterService parameterService; 038 private AssetService assetService; 039 040 /** 041 * @see org.kuali.kfs.module.cam.document.service.RetirementInfoService#setRetirementInfo(org.kuali.kfs.module.cam.businessobject.Asset) 042 */ 043 public void setRetirementInfo(Asset asset) { 044 // If current status is not retired, return empty 045 if (!assetService.isAssetRetired(asset)) { 046 return; 047 } 048 List<AssetRetirementGlobalDetail> retirementHistory = asset.getAssetRetirementHistory(); 049 050 List<AssetRetirementGlobalDetail> sortableList = new ArrayList<AssetRetirementGlobalDetail>(); 051 052 for (AssetRetirementGlobalDetail assetRetirementGlobalDetail : retirementHistory) { 053 AssetRetirementGlobal assetRetirementGlobal = assetRetirementGlobalDetail.getAssetRetirementGlobal(); 054 // check if document is approved 055 if (assetRetirementGlobal != null && isDocumentApproved(assetRetirementGlobal)) { 056 sortableList.add(assetRetirementGlobalDetail); 057 } 058 059 } 060 061 062 Comparator<AssetRetirementGlobalDetail> comparator = new Comparator<AssetRetirementGlobalDetail>() { 063 public int compare(AssetRetirementGlobalDetail o1, AssetRetirementGlobalDetail o2) { 064 // sort descending based on retirement date 065 return o2.getAssetRetirementGlobal().getRetirementDate().compareTo(o1.getAssetRetirementGlobal().getRetirementDate()); 066 } 067 }; 068 Collections.sort(sortableList, comparator); 069 070 if (!sortableList.isEmpty()) { 071 asset.setRetirementInfo(sortableList.get(0)); 072 } 073 } 074 075 076 /** 077 * Checks asset retirement document status, if approved returns true 078 * 079 * @param assetRetirementDoc Asset Retirement Document 080 * @return "true" if approved 081 */ 082 protected boolean isDocumentApproved(AssetRetirementGlobal assetRetirementDoc) { 083 assetRetirementDoc.refreshReferenceObject(CamsConstants.AssetRetirementGlobal.DOCUMENT_HEADER); 084 if (assetRetirementDoc.getDocumentHeader() != null && KFSConstants.DocumentStatusCodes.APPROVED.equals(assetRetirementDoc.getDocumentHeader().getFinancialDocumentStatusCode())) { 085 return true; 086 } 087 return false; 088 } 089 090 091 public ParameterService getParameterService() { 092 return parameterService; 093 } 094 095 096 public void setParameterService(ParameterService parameterService) { 097 this.parameterService = parameterService; 098 } 099 100 101 public AssetService getAssetService() { 102 return assetService; 103 } 104 105 106 public void setAssetService(AssetService assetService) { 107 this.assetService = assetService; 108 } 109 110 111 public void setMergeHistory(Asset asset) { 112 List<AssetRetirementGlobal> retirementGlobals = asset.getRetirementGlobals(); 113 List<AssetRetirementGlobalDetail> mergeHistory = new ArrayList<AssetRetirementGlobalDetail>(); 114 115 for (AssetRetirementGlobal retirementGlobal : retirementGlobals) { 116 if (CamsConstants.AssetRetirementReasonCode.MERGED.equalsIgnoreCase(retirementGlobal.getRetirementReasonCode())) { 117 List<AssetRetirementGlobalDetail> retirementDetails = retirementGlobal.getAssetRetirementGlobalDetails(); 118 119 for (AssetRetirementGlobalDetail assetRetirementGlobalDetail : retirementDetails) { 120 mergeHistory.add(assetRetirementGlobalDetail); 121 } 122 } 123 } 124 125 if (!mergeHistory.isEmpty()) { 126 asset.setMergeHistory(mergeHistory); 127 } 128 } 129 }