1 /* 2 * (c) Copyright 2006-2020 by rapiddweller GmbH & Volker Bergmann. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, is permitted under the terms of the 6 * GNU General Public License. 7 * 8 * For redistributing this software or a derivative work under a license other 9 * than the GPL-compatible Free Software License as defined by the Free 10 * Software Foundation or approved by OSI, you must first obtain a commercial 11 * license to this software product from rapiddweller GmbH & Volker Bergmann. 12 * 13 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 14 * WITHOUT A WARRANTY OF ANY KIND. ALL EXPRESS OR IMPLIED CONDITIONS, 15 * REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE 17 * HEREBY EXCLUDED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 18 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 19 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 20 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 21 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 22 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 23 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 24 * POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27 package com.rapiddweller.domain.address; 28 29 import com.rapiddweller.common.ConfigurationError; 30 import com.rapiddweller.common.Encodings; 31 import com.rapiddweller.common.IOUtil; 32 import com.rapiddweller.common.Validator; 33 import com.rapiddweller.common.validator.bean.AbstractConstraintValidator; 34 35 import javax.validation.ConstraintValidatorContext; 36 import java.io.IOException; 37 import java.util.Map; 38 import java.util.regex.Pattern; 39 40 /** 41 * {@link Validator} that verifies postal codes.<br/><br/> 42 * Created: 28.08.2010 15:27:35 43 * 44 * @author Volker Bergmann 45 * @since 0.6.4 46 */ 47 public class PostalCodeValidator 48 extends AbstractConstraintValidator<PostalCode, String> { 49 50 /** 51 * The Pattern. 52 */ 53 Pattern pattern; 54 55 /** 56 * Instantiates a new Postal code validator. 57 */ 58 public PostalCodeValidator() { 59 this(Country.getDefault().getIsoCode()); 60 } 61 62 /** 63 * Instantiates a new Postal code validator. 64 * 65 * @param countryCode the country code 66 */ 67 public PostalCodeValidator(String countryCode) { 68 setCountry(countryCode); 69 } 70 71 @Override 72 public void initialize(PostalCode params) { 73 setCountry(params.country()); 74 } 75 76 private void setCountry(String countryCode) { 77 try { 78 Map<String, String> formats = IOUtil.readProperties( 79 "/com/rapiddweller/domain/address/postalCodeFormat.properties", 80 Encodings.UTF_8); 81 pattern = Pattern.compile(formats.get(countryCode)); 82 } catch (IOException e) { 83 throw new ConfigurationError( 84 "Error initializing " + getClass().getSimpleName() + 85 " with country code '" + countryCode + "'"); 86 } 87 } 88 89 @Override 90 public boolean isValid(String candidate, 91 ConstraintValidatorContext context) { 92 return (candidate != null && pattern.matcher(candidate).matches()); 93 } 94 95 }