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.lookup;
017    
018    import java.util.Arrays;
019    import java.util.List;
020    import java.util.Map;
021    import java.util.Properties;
022    
023    import org.kuali.kfs.module.cam.CamsConstants;
024    import org.kuali.kfs.module.cam.CamsPropertyConstants;
025    import org.kuali.kfs.module.cam.businessobject.AssetGlobal;
026    import org.kuali.kfs.module.cam.businessobject.AssetRetirementGlobal;
027    import org.kuali.kfs.module.cam.businessobject.AssetRetirementReason;
028    import org.kuali.kfs.sys.KFSConstants;
029    import org.kuali.kfs.sys.context.SpringContext;
030    import org.kuali.kfs.sys.document.authorization.FinancialSystemMaintenanceDocumentAuthorizerBase;
031    import org.kuali.rice.kns.authorization.BusinessObjectRestrictions;
032    import org.kuali.rice.kns.bo.BusinessObject;
033    import org.kuali.rice.kns.lookup.HtmlData;
034    import org.kuali.rice.kns.lookup.KualiLookupableHelperServiceImpl;
035    import org.kuali.rice.kns.service.DocumentHelperService;
036    import org.kuali.rice.kns.service.ParameterService;
037    import org.kuali.rice.kns.util.GlobalVariables;
038    import org.kuali.rice.kns.web.struts.form.LookupForm;
039    
040    /**
041     * This class overrides the getReturnUrl, setFieldConversions and getActionUrls for
042     * {@link OrganizationRoutingModelName}
043     */
044    public class AssetRetirementReasonLookupableHelperServiceImpl extends KualiLookupableHelperServiceImpl {
045        private boolean initializingAssetRetirement = true;
046    
047    
048        /**
049         * Overrides the base implementation to add in new parameters to the return url
050         * <ul>
051         * <li>{@link KFSConstants.DISPATCH_REQUEST_PARAMETER}</li>
052         * <li>{@link KFSConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE}</li>
053         * <li>{@link KFSConstants.OVERRIDE_KEYS}</li>
054         * </ul>
055         * {@link KFSConstants.DISPATCH_REQUEST_PARAMETER}
056         *
057         * @see org.kuali.rice.kns.lookup.AbstractLookupableHelperServiceImpl#getReturnUrl(org.kuali.rice.kns.bo.BusinessObject, java.util.Map,
058         *      java.lang.String)
059         */
060        @Override
061        public HtmlData getReturnUrl(BusinessObject businessObject, LookupForm lookupForm, List returnKeys, BusinessObjectRestrictions businessObjectRestrictions) {
062            AssetRetirementReason assetRetirementReason = (AssetRetirementReason) businessObject;
063            
064            ParameterService parameterService = SpringContext.getBean(ParameterService.class);
065            
066            if (initializingAssetRetirement) {
067                FinancialSystemMaintenanceDocumentAuthorizerBase documentAuthorizer = (FinancialSystemMaintenanceDocumentAuthorizerBase) SpringContext.getBean(DocumentHelperService.class).getDocumentAuthorizer(CamsConstants.DocumentTypeName.ASSET_RETIREMENT_GLOBAL);
068                
069                // do not allow user to issue a retirement doc. if not active.
070                if (!assetRetirementReason.isActive()) {
071                    return getEmptyAnchorHtmlData();
072                }
073                
074                if (assetRetirementReason.isRetirementReasonRestrictionIndicator()) {
075                    boolean isAuthorized = documentAuthorizer.isAuthorized(businessObject, CamsConstants.CAM_MODULE_CODE, CamsConstants.PermissionNames.USE_RESTRICTED_RETIREMENT_REASON, GlobalVariables.getUserSession().getPerson().getPrincipalId());
076                    
077                    if (!isAuthorized) {
078                        return getEmptyAnchorHtmlData();
079                    }
080                } else if (Arrays.asList(parameterService.getParameterValue(AssetGlobal.class, CamsConstants.Parameters.MERGE_SEPARATE_RETIREMENT_REASONS).split(";")).contains(assetRetirementReason.getRetirementReasonCode())) {
081                    boolean isAuthorized = documentAuthorizer.isAuthorized(businessObject, CamsConstants.CAM_MODULE_CODE, CamsConstants.PermissionNames.MERGE, GlobalVariables.getUserSession().getPerson().getPrincipalId());
082                    
083                    if (!isAuthorized) {
084                        return getEmptyAnchorHtmlData();
085                    }
086                } else if (Arrays.asList(parameterService.getParameterValue(AssetRetirementGlobal.class, CamsConstants.Parameters.RAZE_RETIREMENT_REASONS).split(";")).contains(assetRetirementReason.getRetirementReasonCode())) {
087                    boolean isAuthorized = documentAuthorizer.isAuthorized(businessObject, CamsConstants.CAM_MODULE_CODE, CamsConstants.PermissionNames.RAZE, GlobalVariables.getUserSession().getPerson().getPrincipalId());
088                    
089                    if (!isAuthorized) {
090                        return getEmptyAnchorHtmlData();
091                    }
092                }            
093            }
094            
095            Properties parameters = getParameters(businessObject, lookupForm.getFieldConversions(), lookupForm.getLookupableImplServiceName(), returnKeys);
096            parameters.put(KFSConstants.DISPATCH_REQUEST_PARAMETER, KFSConstants.MAINTENANCE_NEWWITHEXISTING_ACTION);
097            parameters.put(KFSConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, AssetRetirementGlobal.class.getName());
098            parameters.put(KFSConstants.OVERRIDE_KEYS, CamsPropertyConstants.AssetRetirementGlobal.RETIREMENT_REASON_CODE);
099            parameters.put(KFSConstants.REFRESH_CALLER, CamsPropertyConstants.AssetRetirementGlobal.RETIREMENT_REASON_CODE+"::"+assetRetirementReason.getRetirementReasonCode());
100            setBackLocation(KFSConstants.MAINTENANCE_ACTION);
101            return getReturnAnchorHtmlData(businessObject, parameters, lookupForm, returnKeys, businessObjectRestrictions);
102        }
103    
104        /**
105         * Overrides base implementation to determine whether or not we are dealing with looking up the model or editing it
106         *
107         * @see org.kuali.rice.kns.lookup.AbstractLookupableHelperServiceImpl#setFieldConversions(java.util.Map)
108         */
109        @Override
110        public void setFieldConversions(Map fieldConversions) {
111            super.setFieldConversions(fieldConversions);
112            if (fieldConversions == null || fieldConversions.size() == 0) {
113                initializingAssetRetirement = false;
114            }
115        }
116    
117        /**
118         * Overrides base implementation to remove the action urls if we are initializing the asset retirement reason
119         *
120         * @see org.kuali.rice.kns.lookup.AbstractLookupableHelperServiceImpl#getCustomActionUrls(org.kuali.rice.kns.bo.BusinessObject, List pkNames)
121         */
122        @Override
123        public List<HtmlData> getCustomActionUrls(BusinessObject businessObject, List pkNames) {
124            if (!initializingAssetRetirement) {
125                return super.getCustomActionUrls(businessObject, pkNames);
126            }
127            else {
128                return super.getEmptyActionUrls();
129            }
130        }
131    }