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;
017    
018    import java.util.ArrayList;
019    import java.util.HashMap;
020    import java.util.List;
021    import java.util.Map;
022    
023    import org.apache.commons.lang.StringUtils;
024    import org.kuali.kfs.integration.cam.CapitalAssetManagementModuleService;
025    import org.kuali.kfs.module.cam.CamsPropertyConstants;
026    import org.kuali.kfs.module.cam.businessobject.Asset;
027    import org.kuali.kfs.module.cam.businessobject.AssetLocationGlobalDetail;
028    import org.kuali.kfs.sys.context.SpringContext;
029    import org.kuali.rice.kns.bo.DocumentHeader;
030    import org.kuali.rice.kns.bo.PersistableBusinessObject;
031    import org.kuali.rice.kns.document.MaintenanceDocument;
032    import org.kuali.rice.kns.document.MaintenanceLock;
033    import org.kuali.rice.kns.maintenance.KualiGlobalMaintainableImpl;
034    import org.kuali.rice.kns.service.BusinessObjectService;
035    import org.kuali.rice.kns.util.ObjectUtils;
036    import org.kuali.rice.kns.workflow.service.KualiWorkflowDocument;
037    
038    /**
039     * This class overrides the base {@link KualiGlobalMaintainableImpl} to generate the specific maintenance locks for Global location
040     * assets
041     */
042    public class AssetLocationGlobalMaintainableImpl extends KualiGlobalMaintainableImpl {
043    
044        private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(AssetLocationGlobalMaintainableImpl.class);
045    
046        /**
047         * Populates any empty fields from Asset primary key
048         * 
049         * @see org.kuali.rice.kns.maintenance.Maintainable#addNewLineToCollection(java.lang.String)
050         */
051    
052        @Override
053        public void addNewLineToCollection(String collectionName) {
054    
055            // get AssetLocationGlobalDetail List from AssetLocationGlobal
056            AssetLocationGlobalDetail addAssetLine = (AssetLocationGlobalDetail) newCollectionLines.get(collectionName);
057    
058            // validate and place PK into Map
059            HashMap map = new HashMap();
060            map.put(CamsPropertyConstants.Asset.CAPITAL_ASSET_NUMBER, addAssetLine.getCapitalAssetNumber());
061    
062            // retrieve Asset object by PK
063            Asset asset = (Asset) SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(Asset.class, map);
064    
065            if (ObjectUtils.isNotNull(asset) && ObjectUtils.isNotNull(asset.getCapitalAssetNumber())) {
066                if (StringUtils.isBlank(addAssetLine.getCampusCode())) {
067                    addAssetLine.setCampusCode(asset.getCampusCode());
068                }
069                if (StringUtils.isBlank(addAssetLine.getBuildingCode())) {
070                    addAssetLine.setBuildingCode(asset.getBuildingCode());
071                }
072                if (StringUtils.isBlank(addAssetLine.getBuildingRoomNumber())) {
073                    addAssetLine.setBuildingRoomNumber(asset.getBuildingRoomNumber());
074                }
075                if (StringUtils.isBlank(addAssetLine.getBuildingSubRoomNumber())) {
076                    addAssetLine.setBuildingSubRoomNumber(asset.getBuildingSubRoomNumber());
077                }
078                if (StringUtils.isBlank(addAssetLine.getCampusTagNumber())) {
079                    addAssetLine.setCampusTagNumber(asset.getCampusTagNumber());
080                }
081                addAssetLine.setNewCollectionRecord(true);
082            }
083            super.addNewLineToCollection(collectionName);
084        }
085    
086        /**
087         * @see org.kuali.rice.kns.maintenance.KualiMaintainableImpl#doRouteStatusChange(org.kuali.rice.kns.bo.DocumentHeader)
088         */
089        @Override
090        public void doRouteStatusChange(DocumentHeader documentHeader) {
091            super.doRouteStatusChange(documentHeader);
092            KualiWorkflowDocument workflowDoc = documentHeader.getWorkflowDocument();
093            // release the lock when document status changed as following...
094            if (workflowDoc.stateIsCanceled() || workflowDoc.stateIsDisapproved() || workflowDoc.stateIsProcessed() || workflowDoc.stateIsFinal()) {
095                this.getCapitalAssetManagementModuleService().deleteAssetLocks(documentNumber, null);
096            }
097        }
098    
099        /**
100         * We are using a substitute mechanism for asset locking which can lock on assets when rule check passed. Return empty list from
101         * this method.
102         * 
103         * @see org.kuali.rice.kns.maintenance.KualiGlobalMaintainableImpl#generateMaintenanceLocks()
104         */
105        @Override
106        public List<MaintenanceLock> generateMaintenanceLocks() {
107            return new ArrayList<MaintenanceLock>();
108        }
109    
110        @Override
111        public Map<String, String> populateNewCollectionLines( Map<String, String> fieldValues, MaintenanceDocument maintenanceDocument, String methodToCall ) {
112            String capitalAssetNumber = (String) fieldValues.get(CamsPropertyConstants.AssetLocationGlobalDetail.CAPITAL_ASSET_NUMBER);
113    
114            if (StringUtils.isNotBlank(capitalAssetNumber)) {
115                fieldValues.remove(CamsPropertyConstants.AssetLocationGlobalDetail.CAPITAL_ASSET_NUMBER);
116                fieldValues.put(CamsPropertyConstants.AssetLocationGlobalDetail.CAPITAL_ASSET_NUMBER, capitalAssetNumber.trim());
117            }
118            return super.populateNewCollectionLines(fieldValues, maintenanceDocument, methodToCall);
119        }
120    
121        protected CapitalAssetManagementModuleService getCapitalAssetManagementModuleService() {
122            return SpringContext.getBean(CapitalAssetManagementModuleService.class);
123        }
124    
125    
126        @Override
127        public Class<? extends PersistableBusinessObject> getPrimaryEditedBusinessObjectClass() {
128            return Asset.class;
129        }
130    }