/*
* #%L
* BroadleafCommerce Framework Web
* %%
* Copyright (C) 2009 - 2014 Broadleaf Commerce
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package org.broadleafcommerce.common.web.validator;
import org.broadleafcommerce.common.util.BLCSystemProperty;
import org.broadleafcommerce.common.web.form.BroadleafFormType;
import org.broadleafcommerce.profile.core.domain.Address;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import javax.annotation.Resource;
/**
* Generic Address Validator not specific to a particular Country.
* Some modules may provide custom validation which can be enabled by setting
* the {@link org.broadleafcommerce.common.config.domain.SystemProperty} "validator.custom.enabled"
*
* If a custom validation is not performed, a generic set of address validation is used.
* You may configure this validator to only validate a Full Name rather than a separate first and last name,
* by setting the {@link org.broadleafcommerce.common.config.domain.SystemProperty} "validator.address.fullNameOnly"
*
* @author Elbert Bautista (elbertbautista)
*/
public class BroadleafCommonAddressValidator {
@Resource(name = "blBroadleafCommonAddressValidatorExtensionManager")
protected BroadleafCommonAddressValidatorExtensionManager validatorExtensionManager;
public boolean isValidateFullNameOnly() {
return BLCSystemProperty.resolveBooleanSystemProperty("validator.address.fullNameOnly");
}
public boolean isCustomValidationEnabled() {
return BLCSystemProperty.resolveBooleanSystemProperty("validator.custom.enabled");
}
public void validate(BroadleafFormType formType, Address address, Errors errors) {
if (isCustomValidationEnabled()) {
validatorExtensionManager.getProxy().validate(formType, address, errors);
return;
}
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "address.addressLine1", "addressLine1.required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "address.city", "city.required");
if (isValidateFullNameOnly()) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "address.fullName", "fullName.required");
} else {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "address.firstName", "firstName.required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "address.lastName", "lastName.required");
}
if (address.getIsoCountryAlpha2() == null && address.getCountry() == null) {
errors.rejectValue("address.isoCountryAlpha2", "country.required", null, null);
}
}
}