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 }