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.endow.document.validation.impl;
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.kuali.kfs.module.endow.EndowKeyConstants;
024 import org.kuali.kfs.module.endow.EndowPropertyConstants;
025 import org.kuali.kfs.module.endow.businessobject.SecurityReportingGroup;
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.MessageMap;
032
033 /**
034 * This class represents the business rules for the maintenance of {@link SecurityReportingGroup} business objects
035 */
036 public class SecurityReportingGroupRule extends MaintenanceDocumentRuleBase {
037
038 protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(SecurityReportingGroupRule.class);
039
040 private SecurityReportingGroup newReportingGroup;
041
042 /**
043 * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#setupConvenienceObjects()
044 */
045 @Override
046 public void setupConvenienceObjects() {
047 newReportingGroup = (SecurityReportingGroup) super.getNewBo();
048 }
049
050 /**
051 * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#processCustomRouteDocumentBusinessRules(org.kuali.rice.kns.document.MaintenanceDocument)
052 */
053 @Override
054 protected boolean processCustomRouteDocumentBusinessRules(MaintenanceDocument document) {
055
056 boolean isValid = true;
057 isValid &= super.processCustomRouteDocumentBusinessRules(document);
058 MessageMap errorMap = GlobalVariables.getMessageMap();
059 isValid &= errorMap.hasNoErrors();
060
061 if (isValid) {
062
063 isValid = validateReportingGroupOrder(newReportingGroup);
064 }
065
066 return isValid;
067 }
068
069 /**
070 * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#processCustomSaveDocumentBusinessRules(org.kuali.rice.kns.document.MaintenanceDocument)
071 */
072 @Override
073 protected boolean processCustomSaveDocumentBusinessRules(MaintenanceDocument document) {
074 return true;
075 }
076
077 /**
078 * Checks if there is another active security reporting group in the database with the same order number
079 *
080 * @param reportingGroup the reporting group to validate
081 * @return true if there is no othersecurity reporting group in the database with the same order number, false otherwise
082 */
083 public boolean validateReportingGroupOrder(SecurityReportingGroup reportingGroup) {
084 boolean success = true;
085 BusinessObjectService businessObjectService = SpringContext.getBean(BusinessObjectService.class);
086
087 // get all the active security reporting groups in the database
088 Map<String, String> fieldValues = new HashMap<String, String>();
089 fieldValues.put(EndowPropertyConstants.SECURITY_REPORTING_GROUP_ACTIVE_INFICATOR, Boolean.TRUE.toString());
090 fieldValues.put(EndowPropertyConstants.SECURITY_REPORTING_GROUP_ORDER, String.valueOf(reportingGroup.getSecurityReportingGrpOrder()));
091
092 List<SecurityReportingGroup> dataToValidateList = new ArrayList<SecurityReportingGroup>(businessObjectService.findMatching(SecurityReportingGroup.class, fieldValues));
093
094 // iterate throught the retrieved list of reporting groups and check if there is another reporting group with the same order
095 // number
096 for (SecurityReportingGroup record : dataToValidateList) {
097 if (reportingGroup.getCode() != null && !reportingGroup.getCode().equals(record.getCode())) {
098 putFieldError(EndowPropertyConstants.SECURITY_REPORTING_GROUP_ORDER, EndowKeyConstants.SecurityReportingGroupConstants.ERROR_SECURITY_REPORTING_GROUP_ORDER_DUPLICATE_VALUE);
099 success = false;
100 break;
101 }
102
103 }
104 return success;
105 }
106
107 }