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.sec.document.validation.impl; 017 018 import java.util.HashMap; 019 import java.util.Map; 020 021 import org.kuali.kfs.sec.SecConstants; 022 import org.kuali.kfs.sec.SecKeyConstants; 023 import org.kuali.kfs.sec.businessobject.SecurityDefinition; 024 import org.kuali.kfs.sec.businessobject.SecurityModel; 025 import org.kuali.kfs.sys.KFSPropertyConstants; 026 import org.kuali.kfs.sys.context.SpringContext; 027 import org.kuali.rice.kns.document.MaintenanceDocument; 028 import org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase; 029 import org.kuali.rice.kns.service.BusinessObjectService; 030 import org.kuali.rice.kns.util.GlobalVariables; 031 import org.kuali.rice.kns.util.KNSConstants; 032 033 034 /** 035 * Implements business rules checks on the SecurityDefinition maintenance document 036 */ 037 public class SecurityDefinitionRule extends MaintenanceDocumentRuleBase { 038 protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(SecurityDefinitionRule.class); 039 040 private SecurityDefinition oldSecurityDefinition; 041 private SecurityDefinition newSecurityDefinition; 042 043 public SecurityDefinitionRule() { 044 super(); 045 } 046 047 /** 048 * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#processCustomApproveDocumentBusinessRules(org.kuali.rice.kns.document.MaintenanceDocument) 049 */ 050 @Override 051 protected boolean processCustomApproveDocumentBusinessRules(MaintenanceDocument document) { 052 boolean isValid = super.processCustomApproveDocumentBusinessRules(document); 053 054 if (!isValid) { 055 return isValid; 056 } 057 058 boolean isMaintenanceEdit = document.isEdit(); 059 060 isValid &= validateSecurityDefinition(isMaintenanceEdit); 061 062 return isValid; 063 } 064 065 /** 066 * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#processCustomRouteDocumentBusinessRules(org.kuali.rice.kns.document.MaintenanceDocument) 067 */ 068 @Override 069 protected boolean processCustomRouteDocumentBusinessRules(MaintenanceDocument document) { 070 boolean isValid = super.processCustomRouteDocumentBusinessRules(document); 071 072 if (!isValid) { 073 return isValid; 074 } 075 076 boolean isMaintenanceEdit = document.isEdit(); 077 078 isValid &= validateSecurityDefinition(isMaintenanceEdit); 079 080 return isValid; 081 } 082 083 /** 084 * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#setupConvenienceObjects() 085 */ 086 @Override 087 public void setupConvenienceObjects() { 088 oldSecurityDefinition = (SecurityDefinition) super.getOldBo(); 089 newSecurityDefinition = (SecurityDefinition) super.getNewBo(); 090 } 091 092 /** 093 * Validates business rules against a security definition record 094 * 095 * @param isMaintenanceEdit boolean indicating whether the maintenance action is an edit (true), or a new/copy (false) 096 * @return boolean true if all rules pass, false if at least one fails 097 */ 098 protected boolean validateSecurityDefinition(boolean isMaintenanceEdit) { 099 boolean isValid = true; 100 101 if (!isMaintenanceEdit) { 102 boolean validDefinitionName = verifyDefinitionNameIsUnique(newSecurityDefinition, KNSConstants.MAINTENANCE_NEW_MAINTAINABLE); 103 if (!validDefinitionName) { 104 isValid = false; 105 } 106 } 107 108 return isValid; 109 } 110 111 /** 112 * For new or copy action verifies the name given for the definition is not being used by another definition 113 * 114 * @param securityDefinition SecurityDefinition with name to check 115 * @param errorKeyPrefix String errorPrefix to use if any errors are found 116 * @return boolean true if name exists, false if not 117 */ 118 protected boolean verifyDefinitionNameIsUnique(SecurityDefinition securityDefinition, String errorKeyPrefix) { 119 boolean isValid = true; 120 121 Map<String, String> searchValues = new HashMap<String, String>(); 122 searchValues.put(KFSPropertyConstants.NAME, securityDefinition.getName()); 123 124 int matchCount = SpringContext.getBean(BusinessObjectService.class).countMatching(SecurityDefinition.class, searchValues); 125 if (matchCount > 0) { 126 GlobalVariables.getMessageMap().putError(errorKeyPrefix + KFSPropertyConstants.NAME, SecKeyConstants.ERROR_DEFINITION_NAME_NON_UNIQUE, securityDefinition.getName()); 127 isValid = false; 128 } 129 130 return isValid; 131 } 132 133 134 }