View Javadoc
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  }