001 /**
002 * Copyright 2004-2013 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.kpme.pm.positiondepartment.validation;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.kuali.kpme.core.department.Department;
020 import org.kuali.kpme.core.service.HrServiceLocator;
021 import org.kuali.kpme.core.util.ValidationUtils;
022 import org.kuali.kpme.pm.positiondepartment.PositionDepartment;
023 import org.kuali.kpme.pm.util.PmValidationUtils;
024 import org.kuali.rice.krad.maintenance.MaintenanceDocument;
025 import org.kuali.rice.krad.rules.MaintenanceDocumentRuleBase;
026
027 @SuppressWarnings("deprecation")
028 public class PositionDepartmentValidation extends MaintenanceDocumentRuleBase {
029 @Override
030 protected boolean processCustomRouteDocumentBusinessRules(MaintenanceDocument document) {
031 boolean valid = false;
032 LOG.debug("entering custom validation for Position Department");
033 PositionDepartment positionDepartment = (PositionDepartment) this.getNewDataObject();
034
035 if (positionDepartment != null) {
036 valid = true;
037 valid &= this.validateInstitution(positionDepartment);
038 valid &= this.validateLocation(positionDepartment);
039 valid &= this.validateDepartment(positionDepartment);
040 valid &= this.validateAffiliation(positionDepartment);
041 }
042 return valid;
043 }
044
045 private boolean validateInstitution(PositionDepartment positionDepartment) {
046 if (StringUtils.isNotEmpty(positionDepartment.getInstitution())
047 && !ValidationUtils.validateInstitution(positionDepartment.getInstitution(), positionDepartment.getEffectiveLocalDate())) {
048 this.putFieldError("institution", "error.existence", "Institution '"
049 + positionDepartment.getInstitution() + "'");
050 return false;
051 } else {
052 return true;
053 }
054 }
055
056 private boolean validateLocation(PositionDepartment positionDepartment) {
057 if (StringUtils.isNotEmpty(positionDepartment.getLocation())
058 && !ValidationUtils.validateLocation(positionDepartment.getLocation(), positionDepartment.getEffectiveLocalDate())) {
059 this.putFieldError("location", "error.existence", "Location '"
060 + positionDepartment.getLocation() + "'");
061 return false;
062 } else {
063 return true;
064 }
065 }
066
067 private boolean validateDepartment(PositionDepartment positionDepartment) {
068 if (StringUtils.isNotEmpty(positionDepartment.getDepartment())
069 && !ValidationUtils.validateDepartment(positionDepartment.getDepartment(), positionDepartment.getEffectiveLocalDate())) {
070 this.putFieldError("department", "error.existence", "Department '"
071 + positionDepartment.getDepartment() + "'");
072 return false;
073 }
074 Department dep = HrServiceLocator.getDepartmentService().getDepartment(positionDepartment.getDepartment(), positionDepartment.getEffectiveLocalDate());
075 if(dep == null ) {
076 this.putFieldError("department", "error.existence", "Department '"
077 + positionDepartment.getDepartment() + "'");
078 return false;
079 } else {
080 if(!ValidationUtils.wildCardMatch(dep.getLocation(), positionDepartment.getLocation())) {
081 String[] params = new String[3];
082 params[0] = positionDepartment.getLocation();
083 params[1] = dep.getLocation();
084 params[2] = "Department '" + positionDepartment.getDepartment() + "'";
085 this.putFieldError("department", "location.inconsistent", params);
086 return false;
087 }
088 }
089
090 return true;
091 }
092
093 private boolean validateAffiliation(PositionDepartment positionDepartment) {
094 if (StringUtils.isNotEmpty(positionDepartment.getPositionDeptAffl())
095 && !PmValidationUtils.validateAffiliation(positionDepartment.getPositionDeptAffl(), positionDepartment.getEffectiveLocalDate())) {
096 this.putFieldError("positionDeptAffl", "error.existence", "Affiliation '"
097 + positionDepartment.getPositionDeptAffl() + "'");
098 return false;
099 } else {
100 return true;
101 }
102 }
103 }
104