This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-validator.git
commit 81fb171104553621c7b445410d9cee06bdc89273 Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Sun May 5 15:06:11 2024 -0400 Refactor internals for duplicate code --- .../routines/AbstractCalendarValidator.java | 5 ++-- .../routines/AbstractFormatValidator.java | 2 +- .../routines/AbstractNumberValidator.java | 4 +-- .../validator/routines/AbstractValidator.java | 32 ++++++++++++++++++++++ .../commons/validator/routines/CodeValidator.java | 11 ++------ .../validator/routines/CreditCardValidator.java | 6 ++-- .../commons/validator/routines/DateValidator.java | 1 - .../validator/routines/DoubleValidator.java | 1 - .../commons/validator/routines/EmailValidator.java | 5 ---- .../validator/routines/InetAddressValidator.java | 14 ++-------- .../commons/validator/routines/RegexValidator.java | 5 ++-- .../commons/validator/routines/UrlValidator.java | 6 ++-- 12 files changed, 51 insertions(+), 41 deletions(-) diff --git a/src/main/java/org/apache/commons/validator/routines/AbstractCalendarValidator.java b/src/main/java/org/apache/commons/validator/routines/AbstractCalendarValidator.java index 7a46484d..ee1404d8 100644 --- a/src/main/java/org/apache/commons/validator/routines/AbstractCalendarValidator.java +++ b/src/main/java/org/apache/commons/validator/routines/AbstractCalendarValidator.java @@ -367,7 +367,7 @@ public abstract class AbstractCalendarValidator extends AbstractFormatValidator @Override protected Format getFormat(final String pattern, final Locale locale) { DateFormat formatter; - final boolean usePattern = pattern != null && !pattern.isEmpty(); + final boolean usePattern = !isEmpty(pattern); if (!usePattern) { formatter = (DateFormat) getFormat(locale); } else if (locale == null) { @@ -405,9 +405,8 @@ public abstract class AbstractCalendarValidator extends AbstractFormatValidator * @return The parsed value if valid or {@code null} if invalid. */ protected Object parse(String value, final String pattern, final Locale locale, final TimeZone timeZone) { - value = value == null ? null : value.trim(); - if (value == null || value.isEmpty()) { + if (isEmpty(value)) { return null; } final DateFormat formatter = (DateFormat) getFormat(pattern, locale); diff --git a/src/main/java/org/apache/commons/validator/routines/AbstractFormatValidator.java b/src/main/java/org/apache/commons/validator/routines/AbstractFormatValidator.java index 661c90f2..62a98584 100644 --- a/src/main/java/org/apache/commons/validator/routines/AbstractFormatValidator.java +++ b/src/main/java/org/apache/commons/validator/routines/AbstractFormatValidator.java @@ -29,7 +29,7 @@ import java.util.Locale; * * @since 1.3.0 */ -public abstract class AbstractFormatValidator implements Serializable { +public abstract class AbstractFormatValidator extends AbstractValidator implements Serializable { private static final long serialVersionUID = -4690687565200568258L; diff --git a/src/main/java/org/apache/commons/validator/routines/AbstractNumberValidator.java b/src/main/java/org/apache/commons/validator/routines/AbstractNumberValidator.java index e2dc0f1c..7d141d6f 100644 --- a/src/main/java/org/apache/commons/validator/routines/AbstractNumberValidator.java +++ b/src/main/java/org/apache/commons/validator/routines/AbstractNumberValidator.java @@ -154,7 +154,7 @@ public abstract class AbstractNumberValidator extends AbstractFormatValidator { protected Format getFormat(final String pattern, final Locale locale) { NumberFormat formatter; - final boolean usePattern = pattern != null && !pattern.isEmpty(); + final boolean usePattern = !isEmpty(pattern); if (!usePattern) { formatter = (NumberFormat) getFormat(locale); } else if (locale == null) { @@ -260,7 +260,7 @@ public abstract class AbstractNumberValidator extends AbstractFormatValidator { */ protected Object parse(String value, final String pattern, final Locale locale) { value = value == null ? null : value.trim(); - if (value == null || value.isEmpty()) { + if (isEmpty(value)) { return null; } final Format formatter = getFormat(pattern, locale); diff --git a/src/main/java/org/apache/commons/validator/routines/AbstractValidator.java b/src/main/java/org/apache/commons/validator/routines/AbstractValidator.java new file mode 100644 index 00000000..d2edf1c6 --- /dev/null +++ b/src/main/java/org/apache/commons/validator/routines/AbstractValidator.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + */ + +package org.apache.commons.validator.routines; + +abstract class AbstractValidator { + + /** + * Tests whether the given String is null or empty. + * + * @param code the string to test. + * @return whether the given String is null or empty. + */ + boolean isEmpty(final String code) { + return code == null || code.isEmpty(); + } + +} diff --git a/src/main/java/org/apache/commons/validator/routines/CodeValidator.java b/src/main/java/org/apache/commons/validator/routines/CodeValidator.java index 81dd877c..6b7e83d2 100644 --- a/src/main/java/org/apache/commons/validator/routines/CodeValidator.java +++ b/src/main/java/org/apache/commons/validator/routines/CodeValidator.java @@ -66,7 +66,7 @@ import org.apache.commons.validator.routines.checkdigit.CheckDigit; * * @since 1.4 */ -public final class CodeValidator implements Serializable { +public final class CodeValidator extends AbstractValidator implements Serializable { private static final long serialVersionUID = 446960910870938233L; @@ -161,7 +161,7 @@ public final class CodeValidator implements Serializable { */ public CodeValidator(final String regex, final int minLength, final int maxLength, final CheckDigit checkdigit) { - if (regex != null && !regex.isEmpty()) { + if (!isEmpty(regex)) { this.regexValidator = new RegexValidator(regex); } else { this.regexValidator = null; @@ -253,16 +253,13 @@ public final class CodeValidator implements Serializable { * if invalid */ public Object validate(final String input) { - if (input == null) { return null; } - String code = input.trim(); if (code.isEmpty()) { return null; } - // validate/reformat using regular expression if (regexValidator != null) { code = regexValidator.validate(code); @@ -270,20 +267,16 @@ public final class CodeValidator implements Serializable { return null; } } - // check the length (must be done after validate as that can change the code) if (minLength >= 0 && code.length() < minLength || maxLength >= 0 && code.length() > maxLength) { return null; } - // validate the check digit if (checkdigit != null && !checkdigit.isValid(code)) { return null; } - return code; - } } diff --git a/src/main/java/org/apache/commons/validator/routines/CreditCardValidator.java b/src/main/java/org/apache/commons/validator/routines/CreditCardValidator.java index 49474d99..8faa68a2 100644 --- a/src/main/java/org/apache/commons/validator/routines/CreditCardValidator.java +++ b/src/main/java/org/apache/commons/validator/routines/CreditCardValidator.java @@ -80,7 +80,7 @@ import org.apache.commons.validator.routines.checkdigit.LuhnCheckDigit; * * @since 1.4 */ -public class CreditCardValidator implements Serializable { +public class CreditCardValidator extends AbstractValidator implements Serializable { /** * Class that represents a credit card range. @@ -490,7 +490,7 @@ public class CreditCardValidator implements Serializable { * @return Whether the card number is valid. */ public boolean isValid(final String card) { - if (card == null || card.isEmpty()) { + if (isEmpty(card)) { return false; } for (final CodeValidator cardType : cardTypes) { @@ -508,7 +508,7 @@ public class CreditCardValidator implements Serializable { * if invalid. */ public Object validate(final String card) { - if (card == null || card.isEmpty()) { + if (isEmpty(card)) { return null; } Object result = null; diff --git a/src/main/java/org/apache/commons/validator/routines/DateValidator.java b/src/main/java/org/apache/commons/validator/routines/DateValidator.java index d00ad34e..6c62b58a 100644 --- a/src/main/java/org/apache/commons/validator/routines/DateValidator.java +++ b/src/main/java/org/apache/commons/validator/routines/DateValidator.java @@ -217,7 +217,6 @@ public class DateValidator extends AbstractCalendarValidator { * @return The converted <code>Calendar</code>. */ private Calendar getCalendar(final Date value, final TimeZone timeZone) { - Calendar calendar; if (timeZone != null) { calendar = Calendar.getInstance(timeZone); diff --git a/src/main/java/org/apache/commons/validator/routines/DoubleValidator.java b/src/main/java/org/apache/commons/validator/routines/DoubleValidator.java index 46d1abaa..3b68ad4a 100644 --- a/src/main/java/org/apache/commons/validator/routines/DoubleValidator.java +++ b/src/main/java/org/apache/commons/validator/routines/DoubleValidator.java @@ -191,7 +191,6 @@ public class DoubleValidator extends AbstractNumberValidator { */ @Override protected Object processParsedValue(final Object value, final Format formatter) { - if (value instanceof Double) { return value; } diff --git a/src/main/java/org/apache/commons/validator/routines/EmailValidator.java b/src/main/java/org/apache/commons/validator/routines/EmailValidator.java index d370d080..ff0dc63e 100644 --- a/src/main/java/org/apache/commons/validator/routines/EmailValidator.java +++ b/src/main/java/org/apache/commons/validator/routines/EmailValidator.java @@ -171,25 +171,20 @@ public class EmailValidator implements Serializable { if (email == null) { return false; } - if (email.endsWith(".")) { // check this first - it's cheap! return false; } - // Check the whole email address structure final Matcher emailMatcher = EMAIL_PATTERN.matcher(email); if (!emailMatcher.matches()) { return false; } - if (!isValidUser(emailMatcher.group(1))) { return false; } - if (!isValidDomain(emailMatcher.group(2))) { return false; } - return true; } diff --git a/src/main/java/org/apache/commons/validator/routines/InetAddressValidator.java b/src/main/java/org/apache/commons/validator/routines/InetAddressValidator.java index 3550a438..d81a992a 100644 --- a/src/main/java/org/apache/commons/validator/routines/InetAddressValidator.java +++ b/src/main/java/org/apache/commons/validator/routines/InetAddressValidator.java @@ -34,7 +34,7 @@ import java.util.regex.Pattern; * * @since 1.4 */ -public class InetAddressValidator implements Serializable { +public class InetAddressValidator extends AbstractValidator implements Serializable { private static final int MAX_BYTE = 128; @@ -91,35 +91,27 @@ public class InetAddressValidator implements Serializable { public boolean isValidInet4Address(final String inet4Address) { // verify that address conforms to generic IPv4 format final String[] groups = ipv4Validator.match(inet4Address); - if (groups == null) { return false; } - // verify that address subgroups are legal for (final String ipSegment : groups) { - if (ipSegment == null || ipSegment.isEmpty()) { + if (isEmpty(ipSegment)) { return false; } - int iIpSegment = 0; - try { iIpSegment = Integer.parseInt(ipSegment); } catch (final NumberFormatException e) { return false; } - if (iIpSegment > IPV4_MAX_OCTET_VALUE) { return false; } - if (ipSegment.length() > 1 && ipSegment.startsWith("0")) { return false; } - } - return true; } @@ -183,7 +175,7 @@ public class InetAddressValidator implements Serializable { int emptyOctets = 0; // consecutive empty chunks for (int index = 0; index < octets.length; index++) { final String octet = octets[index]; - if (octet.isEmpty()) { + if (isEmpty(octet)) { emptyOctets++; if (emptyOctets > 1) { return false; diff --git a/src/main/java/org/apache/commons/validator/routines/RegexValidator.java b/src/main/java/org/apache/commons/validator/routines/RegexValidator.java index 7b623196..877c9fb9 100644 --- a/src/main/java/org/apache/commons/validator/routines/RegexValidator.java +++ b/src/main/java/org/apache/commons/validator/routines/RegexValidator.java @@ -135,10 +135,11 @@ public class RegexValidator implements Serializable { patterns = new Pattern[regexs.length]; final int flags = caseSensitive ? 0 : Pattern.CASE_INSENSITIVE; for (int i = 0; i < regexs.length; i++) { - if (regexs[i] == null || regexs[i].isEmpty()) { + final String regex = regexs[i]; + if (regex == null || regex.isEmpty()) { throw new IllegalArgumentException("Regular expression[" + i + "] is missing"); } - patterns[i] = Pattern.compile(regexs[i], flags); + patterns[i] = Pattern.compile(regex, flags); } } diff --git a/src/main/java/org/apache/commons/validator/routines/UrlValidator.java b/src/main/java/org/apache/commons/validator/routines/UrlValidator.java index 1312b64e..0ea68543 100644 --- a/src/main/java/org/apache/commons/validator/routines/UrlValidator.java +++ b/src/main/java/org/apache/commons/validator/routines/UrlValidator.java @@ -73,7 +73,7 @@ import java.util.regex.Pattern; * * @since 1.4 */ -public class UrlValidator implements Serializable { +public class UrlValidator extends AbstractValidator implements Serializable { private static final long serialVersionUID = 7557161713937335013L; @@ -372,7 +372,7 @@ public class UrlValidator implements Serializable { } final String authority = uri.getRawAuthority(); - if ("file".equals(scheme) && (authority == null || authority.isEmpty())) { // Special case - file: allows an empty authority + if ("file".equals(scheme) && isEmpty(authority)) { // Special case - file: allows an empty authority return true; // this is a local file - nothing more to do here } if ("file".equals(scheme) && authority != null && authority.contains(":")) { @@ -445,7 +445,7 @@ public class UrlValidator implements Serializable { } } final String port = authorityMatcher.group(PARSE_AUTHORITY_PORT); - if (port != null && !port.isEmpty()) { + if (!isEmpty(port)) { try { final int iPort = Integer.parseInt(port); if (iPort < 0 || iPort > MAX_UNSIGNED_16_BIT_INT) {