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 }