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    }