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.businessobject; 017 018 import java.sql.Timestamp; 019 import java.util.ArrayList; 020 import java.util.LinkedHashMap; 021 import java.util.List; 022 023 import org.apache.commons.lang.StringUtils; 024 import org.kuali.kfs.module.cam.document.validation.impl.AssetLocationGlobalRule; 025 import org.kuali.kfs.sys.context.SpringContext; 026 import org.kuali.rice.kns.bo.DocumentHeader; 027 import org.kuali.rice.kns.bo.GlobalBusinessObject; 028 import org.kuali.rice.kns.bo.GlobalBusinessObjectDetail; 029 import org.kuali.rice.kns.bo.PersistableBusinessObject; 030 import org.kuali.rice.kns.bo.PersistableBusinessObjectBase; 031 import org.kuali.rice.kns.service.BusinessObjectService; 032 import org.kuali.rice.kns.service.DateTimeService; 033 import org.kuali.rice.kns.util.TypedArrayList; 034 035 /** 036 * @author Kuali Nervous System Team (kualidev@oncourse.iu.edu) 037 */ 038 039 public class AssetLocationGlobal extends PersistableBusinessObjectBase implements GlobalBusinessObject { 040 041 private String documentNumber; 042 private DocumentHeader documentHeader; 043 private List<AssetLocationGlobalDetail> assetLocationGlobalDetails; 044 045 /** 046 * Default constructor. 047 */ 048 public AssetLocationGlobal() { 049 assetLocationGlobalDetails = new TypedArrayList(AssetLocationGlobalDetail.class); 050 } 051 052 /** 053 * Gets the documentNumber attribute. 054 * 055 * @return Returns the documentNumber 056 * 057 */ 058 public String getDocumentNumber() { 059 return documentNumber; 060 } 061 062 /** 063 * Sets the documentNumber attribute. 064 * 065 * @param documentNumber The documentNumber to set. 066 * 067 */ 068 public void setDocumentNumber(String documentNumber) { 069 this.documentNumber = documentNumber; 070 } 071 072 /** 073 * Gets the documentHeader attribute. 074 * @return Returns the documentHeader. 075 */ 076 public DocumentHeader getDocumentHeader() { 077 return documentHeader; 078 } 079 080 /** 081 * Sets the documentHeader attribute value. 082 * @param documentHeader The documentHeader to set. 083 * @deprecated 084 */ 085 public void setDocumentHeader(DocumentHeader documentHeader) { 086 this.documentHeader = documentHeader; 087 } 088 089 /** 090 * Gets the assetLocationGlobalDetails attribute. 091 * @return Returns the assetLocationGlobalDetails. 092 */ 093 public List<AssetLocationGlobalDetail> getAssetLocationGlobalDetails() { 094 return assetLocationGlobalDetails; 095 } 096 097 /** 098 * Sets the assetLocationGlobalDetails attribute value. 099 * @param assetLocationGlobalDetails The assetLocationGlobalDetails to set. 100 */ 101 public void setAssetLocationGlobalDetails(List<AssetLocationGlobalDetail> assetLocationGlobalDetails) { 102 this.assetLocationGlobalDetails = assetLocationGlobalDetails; 103 } 104 105 /** 106 * @see org.kuali.rice.kns.document.GlobalBusinessObject#getGlobalChangesToDelete() 107 */ 108 public List<PersistableBusinessObject> generateDeactivationsToPersist() { 109 return null; 110 } 111 112 /** 113 * This returns a list of Assets to update 114 * 115 * @see org.kuali.rice.kns.bo.GlobalBusinessObject#generateGlobalChangesToPersist() 116 */ 117 public List<PersistableBusinessObject> generateGlobalChangesToPersist() { 118 // the list of persist-ready BOs 119 List<PersistableBusinessObject> persistables = new ArrayList(); 120 121 // walk over each change detail record 122 for (AssetLocationGlobalDetail detail : assetLocationGlobalDetails) { 123 124 // load the object by keys 125 Asset asset = (Asset) SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(Asset.class, detail.getPrimaryKeys()); 126 127 // if we got a valid account, do the processing 128 if (asset != null) { 129 130 if (StringUtils.isNotBlank(detail.getCampusCode())) { 131 asset.setCampusCode(detail.getCampusCode()); 132 } 133 134 if (StringUtils.isNotBlank(detail.getBuildingCode())) { 135 asset.setBuildingCode(detail.getBuildingCode()); 136 } 137 138 if (StringUtils.isNotBlank(detail.getBuildingRoomNumber())) { 139 asset.setBuildingRoomNumber(detail.getBuildingRoomNumber()); 140 } 141 142 if (StringUtils.isNotBlank(detail.getBuildingSubRoomNumber())) { 143 asset.setBuildingSubRoomNumber(detail.getBuildingSubRoomNumber()); 144 } 145 146 // set tag number to null if no data in field 147 if (StringUtils.isNotBlank(detail.getCampusTagNumber()) && !StringUtils.equalsIgnoreCase(detail.getCampusTagNumber(), asset.getCampusTagNumber())) { 148 asset.setOldTagNumber(asset.getCampusTagNumber()); 149 asset.setCampusTagNumber(detail.getCampusTagNumber()); 150 } 151 asset.setLastInventoryDate(new Timestamp(SpringContext.getBean(DateTimeService.class).getCurrentSqlDate().getTime())); 152 153 persistables.add(asset); 154 } 155 } 156 157 return persistables; 158 } 159 160 public boolean isPersistable() { 161 return true; 162 } 163 164 public List<? extends GlobalBusinessObjectDetail> getAllDetailObjects() { 165 return getAssetLocationGlobalDetails(); 166 } 167 168 /** 169 * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper() 170 */ 171 protected LinkedHashMap toStringMapper() { 172 LinkedHashMap m = new LinkedHashMap(); 173 m.put("documentNumber", this.documentNumber); 174 return m; 175 } 176 }