/* * Copyright 2013 Samppa Saarela * * 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. */ package org.javersion.util; import static java.lang.String.format; import static java.lang.System.arraycopy; import java.util.Collection; import java.util.Map; import java.util.function.Predicate; import javax.annotation.Nonnull; public final class Check { public static final String NOT_NULL_FMT = "%s should not be null"; public static final String NOT_EMPTY_FMT = "%s should not be empty"; public static final Predicate<Boolean> IS_TRUE = v -> v; public static final Predicate<Object> NOT_NULL = v -> v != null; public static final Predicate<String> NOT_EMPTY_STRING = s -> !s.isEmpty(); public static final Predicate<Iterable<?>> NOT_EMPTY_ITERABLE = i -> i.iterator().hasNext(); public static final Predicate<Collection<?>> NOT_EMPTY_COLLECTION = c -> !c.isEmpty(); public static final Predicate<Map<?, ?>> NOT_EMPTY_MAP = m -> !m.isEmpty(); private Check() {} @Nonnull public static <T> T notNull(T object, String fieldName) { return that(object, NOT_NULL, NOT_NULL_FMT, fieldName); } @Nonnull public static String notNullOrEmpty(String string, String fieldName) { notNull(string, fieldName); return that(string, NOT_EMPTY_STRING, NOT_EMPTY_FMT, fieldName); } @Nonnull public static <T, I extends Iterable<T>> I notNullOrEmpty(I iterable, String fieldName) { notNull(iterable, fieldName); return that(iterable, NOT_EMPTY_ITERABLE, NOT_EMPTY_FMT, fieldName); } @Nonnull public static <T, C extends Collection<T>> C notNullOrEmpty(C collection, String fieldName) { notNull(collection, fieldName); return that(collection, NOT_EMPTY_COLLECTION, NOT_EMPTY_FMT, fieldName); } @Nonnull public static <K, V, M extends Map<K, V>> M notNullOrEmpty(M map, String fieldName) { notNull(map, fieldName); return that(map, NOT_EMPTY_MAP, NOT_EMPTY_FMT, fieldName); } public static void that(boolean expression, String message) { that(expression, IS_TRUE, message); } public static void that(boolean expression, String messageFormat, Object arg1) { that(expression, IS_TRUE, messageFormat, arg1); } public static void that(boolean expression, String messageFormat, Object arg1, Object arg2) { that(expression, IS_TRUE, messageFormat, arg1, arg2); } public static void that(boolean expression, String messageFormat, Object arg1, Object arg2, Object arg3, Object... rest) { that(expression, IS_TRUE, messageFormat, arg1, arg2, arg3, rest); } public static <T> T that(T value, Predicate<? super T> predicate, String message) { if (!predicate.test(value)) { throw new IllegalArgumentException(message); } return value; } public static <T> T that(T value, Predicate<? super T> predicate, String messageFormat, Object arg1) { if (!predicate.test(value)) { throw new IllegalArgumentException(format(messageFormat, arg1)); } return value; } public static <T> T that(T value, Predicate<? super T> predicate, String messageFormat, Object arg1, Object arg2) { if (!predicate.test(value)) { throw new IllegalArgumentException(format(messageFormat, arg1, arg2)); } return value; } public static <T> T that(T value, Predicate<? super T> predicate, String messageFormat, Object arg1, Object arg2, Object arg3, Object... rest) { if (!predicate.test(value)) { Object[] args = new Object[3 + rest.length]; args[0] = arg1; args[1] = arg2; args[2] = arg3; arraycopy(rest, 0, args, 3, rest.length); throw new IllegalArgumentException(format(messageFormat, args)); } return value; } }