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.cg.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.cg.businessobject.SubContractor;
024    import org.kuali.kfs.sys.KFSKeyConstants;
025    import org.kuali.rice.kns.bo.Country;
026    import org.kuali.rice.kns.bo.State;
027    import org.kuali.kfs.sys.context.SpringContext;
028    import org.kuali.rice.kns.service.CountryService;
029    import org.kuali.rice.kns.service.StateService;
030    import org.kuali.rice.kns.document.MaintenanceDocument;
031    import org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase;
032    import org.kuali.rice.kns.service.BusinessObjectService;
033    
034    /**
035     * 
036     */
037    public class SubcontractorRule extends MaintenanceDocumentRuleBase {
038    
039        protected SubContractor newSubcontractor;
040    
041        /**
042         * This method has been overridden to add some additional validation checks to the {@link Subcontractor} maintenance document.
043         * 
044         * @param maintenanceDocument - document to be tested
045         * @return whether maintenance doc passes
046         * @throws org.kuali.rice.kns.exception.ValidationException
047         */
048        @Override
049        protected boolean validateMaintenanceDocument(MaintenanceDocument maintenanceDocument) {
050            boolean success = true;
051    
052            success = super.validateMaintenanceDocument(maintenanceDocument);
053    
054            newSubcontractor = (SubContractor) super.getNewBo();
055            success &= validateCountryCode(newSubcontractor.getSubcontractorCountryCode());
056            success &= validateStateCode(newSubcontractor.getSubcontractorCountryCode(), newSubcontractor.getSubcontractorStateCode());
057    
058            return success;
059        }
060    
061    
062        /**
063         * This method retrieves the entered state code and checks that this value is valid by comparing it against known values in the
064         * SH_STATE_T database table.
065         * 
066         * @param stateCode
067         * @return Whether state code entered is valid
068         */
069        protected boolean validateStateCode(String countryCode, String stateCode) {
070            boolean valid = true;
071    
072            // Perform lookup for state code provided
073            State state = SpringContext.getBean(StateService.class).getByPrimaryId(countryCode, stateCode);
074    
075            // If no values returned, state code is invalid, throw error
076            if (state== null) {
077                putFieldError("subcontractorStateCode", KFSKeyConstants.ERROR_STATE_CODE_INVALID, stateCode);
078                valid = false;
079            }
080    
081            return valid;
082        }
083    
084        /**
085         * This method retrieves the entered country code and checks that this value is valid by comparing it against known values in
086         * the SH_COUNTRY_T database table.
087         * 
088         * @param countryCode
089         * @return Whether country code entered is valid.
090         */
091        protected boolean validateCountryCode(String countryCode) {
092            boolean valid = true;
093    
094            Country country = SpringContext.getBean(CountryService.class).getByPrimaryId(countryCode);
095    
096            // If no values returned, country code is invalid, throw error
097            if (country == null) {
098                putFieldError("subcontractorCountryCode", KFSKeyConstants.ERROR_COUNTRY_CODE_INVALID, countryCode);
099                valid = false;
100            }
101    
102            return valid;
103        }
104    
105    }