Repository: logging-log4j2 Updated Branches: refs/heads/master b0daba63f -> 61b3ab301
Extract isEmpty() logic from RequiredValidator Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/61b3ab30 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/61b3ab30 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/61b3ab30 Branch: refs/heads/master Commit: 61b3ab301a4d54c28e736ca3a37f984475969377 Parents: b0daba6 Author: Matt Sicker <[email protected]> Authored: Fri Jan 6 21:50:49 2017 -0600 Committer: Matt Sicker <[email protected]> Committed: Fri Jan 6 21:50:49 2017 -0600 ---------------------------------------------------------------------- .../validators/RequiredValidator.java | 24 +------ .../apache/logging/log4j/core/util/Assert.java | 46 +++++++++++++ .../logging/log4j/core/util/AssertTest.java | 68 ++++++++++++++++++++ 3 files changed, 116 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/61b3ab30/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/validation/validators/RequiredValidator.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/validation/validators/RequiredValidator.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/validation/validators/RequiredValidator.java index 5e6cec0..98c0a71 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/validation/validators/RequiredValidator.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/validation/validators/RequiredValidator.java @@ -22,6 +22,7 @@ import java.util.Map; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.core.config.plugins.validation.ConstraintValidator; import org.apache.logging.log4j.core.config.plugins.validation.constraints.Required; +import org.apache.logging.log4j.core.util.Assert; import org.apache.logging.log4j.status.StatusLogger; /** @@ -49,28 +50,7 @@ public class RequiredValidator implements ConstraintValidator<Required> { @Override public boolean isValid(final String name, final Object value) { - if (value == null) { - return err(name); - } - if (value instanceof CharSequence) { - final CharSequence sequence = (CharSequence) value; - return sequence.length() != 0 || err(name); - } - final Class<?> clazz = value.getClass(); - if (clazz.isArray()) { - final Object[] array = (Object[]) value; - return array.length != 0 || err(name); - } - if (Collection.class.isAssignableFrom(clazz)) { - final Collection<?> collection = (Collection<?>) value; - return collection.size() != 0 || err(name); - } - if (Map.class.isAssignableFrom(clazz)) { - final Map<?, ?> map = (Map<?, ?>) value; - return map.size() != 0 || err(name); - } - // LOGGER.debug("Encountered type [{}] which can only be checked for null.", clazz.getName()); - return true; + return Assert.isNonEmpty(value) || err(name); } private boolean err(final String name) { http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/61b3ab30/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Assert.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Assert.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Assert.java index e37090f..d46c06a 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Assert.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Assert.java @@ -16,6 +16,8 @@ */ package org.apache.logging.log4j.core.util; +import java.util.Map; + /** * Utility class providing common validation logic. */ @@ -23,6 +25,50 @@ public final class Assert { private Assert() { } + /** + * Checks if an object has empty semantics. The following scenarios are considered empty: + * <ul> + * <li>{@code null}</li> + * <li>empty {@link CharSequence}</li> + * <li>empty array</li> + * <li>empty {@link Iterable}</li> + * <li>empty {@link Map}</li> + * </ul> + * + * @param o value to check for emptiness + * @return true if the value is empty, false otherwise + * @since 2.8 + */ + public static boolean isEmpty(final Object o) { + if (o == null) { + return true; + } + if (o instanceof CharSequence) { + return ((CharSequence) o).length() == 0; + } + if (o.getClass().isArray()) { + return ((Object[]) o).length == 0; + } + if (o instanceof Iterable) { + return !((Iterable<?>) o).iterator().hasNext(); + } + if (o instanceof Map) { + return ((Map<?, ?>) o).isEmpty(); + } + return false; + } + + /** + * Opposite of {@link #isEmpty(Object)}. + * + * @param o value to check for non-emptiness + * @return true if the value is non-empty, false otherwise + * @since 2.8 + */ + public static boolean isNonEmpty(final Object o) { + return !isEmpty(o); + } + public static int valueIsAtLeast(final int value, final int minValue) { if (value < minValue) { throw new IllegalArgumentException("Value should be at least " + minValue + " but was " + value); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/61b3ab30/log4j-core/src/test/java/org/apache/logging/log4j/core/util/AssertTest.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/util/AssertTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/util/AssertTest.java new file mode 100644 index 0000000..242c41e --- /dev/null +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/util/AssertTest.java @@ -0,0 +1,68 @@ +/* + * 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.logging.log4j.core.util; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.junit.Assert.*; + +/** + * + */ +@RunWith(Parameterized.class) +public class AssertTest { + + private final Object value; + private final boolean isEmpty; + + @Parameterized.Parameters + public static Object[][] data() { + return new Object[][]{ + // value, isEmpty + {null, true}, + {"", true}, + {new Object[0], true}, + {new ArrayList<>(), true}, + {new HashMap<>(), true}, + {0, false}, + {1, false}, + {false, false}, + {true, false}, + {new Object[]{null}, false}, + {Collections.singletonList(null), false}, + {Collections.singletonMap("", null), false}, + {"null", false} + }; + } + + public AssertTest(final Object value, final boolean isEmpty) { + this.value = value; + this.isEmpty = isEmpty; + } + + @Test + public void isEmpty() throws Exception { + assertEquals(isEmpty, Assert.isEmpty(value)); + } + +} \ No newline at end of file
