package com.brightgenerous.commons; import java.util.Collection; import java.util.Comparator; import java.util.List; import java.util.SortedSet; import com.brightgenerous.lang.Args; public class ObjectUtils { private ObjectUtils() { } public static <T> T defaultIfNull(T obj, T def, T... defs) { if (obj != null) { return obj; } if (def != null) { return def; } if (defs != null) { for (T d : defs) { if (d != null) { return d; } } } return null; } public static <T> boolean allNull(T obj, T... objs) { if (obj != null) { return false; } if ((objs != null) && (0 < objs.length)) { for (T o : objs) { if (o != null) { return false; } } } return true; } public static <T> boolean allNotNull(T obj, T... objs) { if (obj == null) { return false; } if (objs == null) { return false; } if (0 < objs.length) { for (T o : objs) { if (o == null) { return false; } } } return true; } public static <T> boolean anyNull(T obj, T... objs) { return !allNotNull(obj, objs); } public static <T> boolean anyNotNull(T obj, T... objs) { return !allNull(obj, objs); } public static <T> int compareNull(T obj0, T obj1) { return compareNull(obj0, obj1, false); } public static <T> int compareNull(T obj0, T obj1, boolean isNullLower) { if (obj0 == obj1) { return 0; } if (obj0 == null) { return isNullLower ? -1 : 1; } if (obj1 == null) { return isNullLower ? 1 : -1; } return 0; } public static <T> int compareEscapeNull(Comparable<T> obj0, T obj1) { return compareEscapeNull(obj0, obj1, false); } public static <T> int compareEscapeNull(Comparable<T> obj0, T obj1, boolean isNullLower) { if (obj0 == obj1) { return 0; } if (obj0 == null) { return isNullLower ? -1 : 1; } if (obj1 == null) { return isNullLower ? 1 : -1; } return obj0.compareTo(obj1); } public static <T> int compareEscapeNull(T obj0, T obj1, Comparator<T> comparator) { return compareEscapeNull(obj0, obj1, comparator, false); } public static <T> int compareEscapeNull(T obj0, T obj1, Comparator<T> comparator, boolean isNullLower) { if (obj0 == obj1) { return 0; } if (obj0 == null) { return isNullLower ? -1 : 1; } if (obj1 == null) { return isNullLower ? 1 : -1; } Args.notNull(comparator, "comparator"); return comparator.compare(obj0, obj1); } public static boolean equalsValueOrNull(Boolean obj0, Boolean obj1) { if (obj0 == null) { if (obj1 == null) { return true; } return false; } if (obj1 == null) { return false; } return obj0.booleanValue() == obj1.booleanValue(); } public static boolean equalsValueOrNull(Byte obj0, Byte obj1) { if (obj0 == null) { if (obj1 == null) { return true; } return false; } if (obj1 == null) { return false; } return obj0.byteValue() == obj1.byteValue(); } public static boolean equalsValueOrNull(Short obj0, Short obj1) { if (obj0 == null) { if (obj1 == null) { return true; } return false; } if (obj1 == null) { return false; } return obj0.shortValue() == obj1.shortValue(); } public static boolean equalsValueOrNull(Character obj0, Character obj1) { if (obj0 == null) { if (obj1 == null) { return true; } return false; } if (obj1 == null) { return false; } return obj0.charValue() == obj1.charValue(); } public static boolean equalsValueOrNull(Integer obj0, Integer obj1) { if (obj0 == null) { if (obj1 == null) { return true; } return false; } if (obj1 == null) { return false; } return obj0.intValue() == obj1.intValue(); } public static boolean equalsValueOrNull(Long obj0, Long obj1) { if (obj0 == null) { if (obj1 == null) { return true; } return false; } if (obj1 == null) { return false; } return obj0.longValue() == obj1.longValue(); } public static boolean equalsValueOrNull(Float obj0, Float obj1) { if (obj0 == null) { if (obj1 == null) { return true; } return false; } if (obj1 == null) { return false; } return obj0.floatValue() == obj1.floatValue(); } public static boolean equalsValueOrNull(Double obj0, Double obj1) { if (obj0 == null) { if (obj1 == null) { return true; } return false; } if (obj1 == null) { return false; } return obj0.doubleValue() == obj1.doubleValue(); } public static boolean equalsValueOrNull(String obj0, String obj1) { if (obj0 == null) { if (obj1 == null) { return true; } return false; } if (obj1 == null) { return false; } return obj0.equals(obj1); } public static <T> boolean equalsValueOrNull(T obj0, T obj1) { if (obj0 == null) { if (obj1 == null) { return true; } return false; } if (obj1 == null) { return false; } Class<?> clazz0 = obj0.getClass(); Class<?> clazz1 = obj1.getClass(); if (!clazz0.equals(clazz1)) { return false; } if (obj0 instanceof Boolean) { return equalsValueOrNull((Boolean) obj0, (Boolean) obj1); } if (obj0 instanceof Byte) { return equalsValueOrNull((Byte) obj0, (Byte) obj1); } if (obj0 instanceof Short) { return equalsValueOrNull((Short) obj0, (Short) obj1); } if (obj0 instanceof Character) { return equalsValueOrNull((Character) obj0, (Character) obj1); } if (obj0 instanceof Integer) { return equalsValueOrNull((Integer) obj0, (Integer) obj1); } if (obj0 instanceof Long) { return equalsValueOrNull((Long) obj0, (Long) obj1); } if (obj0 instanceof Float) { return equalsValueOrNull((Float) obj0, (Float) obj1); } if (obj0 instanceof Double) { return equalsValueOrNull((Double) obj0, (Double) obj1); } if (obj0 instanceof String) { return equalsValueOrNull((String) obj0, (String) obj1); } return obj0 == obj1; } public static int hashCodeEscapeNull(Object obj) { return hashCodeEscapeNull(obj, 0); } public static int hashCodeEscapeNull(Object obj, int nullValue) { if (obj == null) { return nullValue; } return obj.hashCode(); } public static boolean equalsEscapeNull(Object obj0, Object obj1) { if (obj0 == obj1) { return true; } if ((obj0 == null) || (obj1 == null)) { return false; } return obj0.equals(obj1); } public static <S, T extends S> T cast(S obj, Class<? extends T> clazz) { return cast(obj, null, clazz); } public static <S, T extends S> T cast(S obj, T def, Class<? extends T> clazz) { if (obj == null) { return null; } if (clazz != null) { try { return clazz.cast(obj); } catch (ClassCastException e) { } } return def; } public static boolean isNoSize(boolean[] obj) { return (obj == null) || (obj.length < 1); } public static boolean isNotNoSize(boolean[] obj) { return !isNoSize(obj); } public static boolean isNoSize(byte[] obj) { return (obj == null) || (obj.length < 1); } public static boolean isNotNoSize(byte[] obj) { return !isNoSize(obj); } public static boolean isNoSize(short[] obj) { return (obj == null) || (obj.length < 1); } public static boolean isNotNoSize(short[] obj) { return !isNoSize(obj); } public static boolean isNoSize(char[] obj) { return (obj == null) || (obj.length < 1); } public static boolean isNotNoSize(char[] obj) { return !isNoSize(obj); } public static boolean isNoSize(int[] obj) { return (obj == null) || (obj.length < 1); } public static boolean isNotNoSize(int[] obj) { return !isNoSize(obj); } public static boolean isNoSize(long[] obj) { return (obj == null) || (obj.length < 1); } public static boolean isNotNoSize(long[] obj) { return !isNoSize(obj); } public static boolean isNoSize(float[] obj) { return (obj == null) || (obj.length < 1); } public static boolean isNotNoSize(float[] obj) { return !isNoSize(obj); } public static boolean isNoSize(double[] obj) { return (obj == null) || (obj.length < 1); } public static boolean isNotNoSize(double[] obj) { return !isNoSize(obj); } public static <T> boolean isNoSize(T[] obj) { return (obj == null) || (obj.length < 1); } public static <T> boolean isNotNoSize(T[] obj) { return !isNoSize(obj); } public static boolean isNoSize(Collection<?> obj) { return (obj == null) || obj.isEmpty(); } public static boolean isNotNoSize(Collection<?> obj) { return !isNoSize(obj); } public static boolean getSingleOrException(boolean[] datas, boolean defaultValue) { return getSingleOrException(datas, defaultValue, false); } public static boolean getSingleOrException(boolean[] datas, boolean defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } if (1 < datas.length) { throw new IllegalArgumentException(); } return datas[0]; } public static byte getSingleOrException(byte[] datas, byte defaultValue) { return getSingleOrException(datas, defaultValue, false); } public static byte getSingleOrException(byte[] datas, byte defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } if (1 < datas.length) { throw new IllegalArgumentException(); } return datas[0]; } public static short getSingleOrException(short[] datas, short defaultValue) { return getSingleOrException(datas, defaultValue, false); } public static short getSingleOrException(short[] datas, short defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } if (1 < datas.length) { throw new IllegalArgumentException(); } return datas[0]; } public static char getSingleOrException(char[] datas, char defaultValue) { return getSingleOrException(datas, defaultValue, false); } public static char getSingleOrException(char[] datas, char defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } if (1 < datas.length) { throw new IllegalArgumentException(); } return datas[0]; } public static int getSingleOrException(int[] datas, int defaultValue) { return getSingleOrException(datas, defaultValue, false); } public static int getSingleOrException(int[] datas, int defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } if (1 < datas.length) { throw new IllegalArgumentException(); } return datas[0]; } public static long getSingleOrException(long[] datas, long defaultValue) { return getSingleOrException(datas, defaultValue, false); } public static long getSingleOrException(long[] datas, long defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } if (1 < datas.length) { throw new IllegalArgumentException(); } return datas[0]; } public static float getSingleOrException(float[] datas, float defaultValue) { return getSingleOrException(datas, defaultValue, false); } public static float getSingleOrException(float[] datas, float defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } if (1 < datas.length) { throw new IllegalArgumentException(); } return datas[0]; } public static double getSingleOrException(double[] datas, double defaultValue) { return getSingleOrException(datas, defaultValue, false); } public static double getSingleOrException(double[] datas, double defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } if (1 < datas.length) { throw new IllegalArgumentException(); } return datas[0]; } public static <T> T getSingleOrException(T[] datas) { return getSingleOrException(datas, false); } public static <T> T getSingleOrException(T[] datas, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return null; } if (1 < datas.length) { throw new IllegalArgumentException(); } return datas[0]; } public static <T> T getSingleOrException(Collection<T> datas) { return getSingleOrException(datas, false); } public static <T> T getSingleOrException(Collection<T> datas, boolean notEmpty) { if ((datas == null) || datas.isEmpty()) { if (notEmpty) { throw new IllegalArgumentException(); } return null; } if (1 < datas.size()) { throw new IllegalArgumentException(); } return datas.iterator().next(); } public static boolean getFirst(boolean[] datas, boolean defaultValue) { return getFirst(datas, defaultValue, false); } public static boolean getFirst(boolean[] datas, boolean defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } return datas[0]; } public static boolean getLast(boolean[] datas, boolean defaultValue) { return getLast(datas, defaultValue, false); } public static boolean getLast(boolean[] datas, boolean defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } return datas[datas.length - 1]; } public static byte getFirst(byte[] datas, byte defaultValue) { return getFirst(datas, defaultValue, false); } public static byte getFirst(byte[] datas, byte defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } return datas[0]; } public static byte getLast(byte[] datas, byte defaultValue) { return getLast(datas, defaultValue, false); } public static byte getLast(byte[] datas, byte defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } return datas[datas.length - 1]; } public static short getFirst(short[] datas, short defaultValue) { return getFirst(datas, defaultValue, false); } public static short getFirst(short[] datas, short defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } return datas[0]; } public static short getLast(short[] datas, short defaultValue) { return getLast(datas, defaultValue, false); } public static short getLast(short[] datas, short defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } return datas[datas.length - 1]; } public static char getFirst(char[] datas, char defaultValue) { return getFirst(datas, defaultValue, false); } public static char getFirst(char[] datas, char defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } return datas[0]; } public static char getLast(char[] datas, char defaultValue) { return getLast(datas, defaultValue, false); } public static char getLast(char[] datas, char defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } return datas[datas.length - 1]; } public static int getFirst(int[] datas, int defaultValue) { return getFirst(datas, defaultValue, false); } public static int getFirst(int[] datas, int defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } return datas[0]; } public static int getLast(int[] datas, int defaultValue) { return getLast(datas, defaultValue, false); } public static int getLast(int[] datas, int defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } return datas[datas.length - 1]; } public static long getFirst(long[] datas, long defaultValue) { return getFirst(datas, defaultValue, false); } public static long getFirst(long[] datas, long defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } return datas[0]; } public static long getLast(long[] datas, long defaultValue) { return getLast(datas, defaultValue, false); } public static long getLast(long[] datas, long defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } return datas[datas.length - 1]; } public static float getFirst(float[] datas, float defaultValue) { return getFirst(datas, defaultValue, false); } public static float getFirst(float[] datas, float defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } return datas[0]; } public static float getLast(float[] datas, float defaultValue) { return getLast(datas, defaultValue, false); } public static float getLast(float[] datas, float defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } return datas[datas.length - 1]; } public static double getFirst(double[] datas, double defaultValue) { return getFirst(datas, defaultValue, false); } public static double getFirst(double[] datas, double defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } return datas[0]; } public static double getLast(double[] datas, double defaultValue) { return getLast(datas, defaultValue, false); } public static double getLast(double[] datas, double defaultValue, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return defaultValue; } return datas[datas.length - 1]; } public static <T> T getFirst(T[] datas) { return getFirst(datas, false); } public static <T> T getFirst(T[] datas, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return null; } return datas[0]; } public static <T> T getLast(T[] datas) { return getLast(datas, false); } public static <T> T getLast(T[] datas, boolean notEmpty) { if ((datas == null) || (datas.length < 1)) { if (notEmpty) { throw new IllegalArgumentException(); } return null; } return datas[datas.length - 1]; } public static <T> T getFirst(List<T> datas) { return getFirst(datas, false); } public static <T> T getFirst(List<T> datas, boolean notEmpty) { if ((datas == null) || datas.isEmpty()) { if (notEmpty) { throw new IllegalArgumentException(); } return null; } return datas.get(0); } public static <T> T getLast(List<T> datas) { return getLast(datas, false); } public static <T> T getLast(List<T> datas, boolean notEmpty) { if ((datas == null) || datas.isEmpty()) { if (notEmpty) { throw new IllegalArgumentException(); } return null; } return datas.get(datas.size() - 1); } public static <T> T getFirst(SortedSet<T> datas) { return getFirst(datas, false); } public static <T> T getFirst(SortedSet<T> datas, boolean notEmpty) { if ((datas == null) || datas.isEmpty()) { if (notEmpty) { throw new IllegalArgumentException(); } return null; } return datas.first(); } public static <T> T getLast(SortedSet<T> datas) { return getLast(datas, false); } public static <T> T getLast(SortedSet<T> datas, boolean notEmpty) { if ((datas == null) || datas.isEmpty()) { if (notEmpty) { throw new IllegalArgumentException(); } return null; } return datas.last(); } public static String convertBytesToHexString(byte[] bytes) { return convertBytesToHexString(bytes, false); } public static String convertBytesToHexString(byte[] bytes, boolean upperCase) { if (bytes == null) { return null; } StringBuilder sb = new StringBuilder(); for (byte b : bytes) { String s = Integer.toHexString(0xff & b); if (s.length() < 2) { sb.append("0"); } sb.append(s); } // Integer.toHexString() method returns lower-case characters. return upperCase ? sb.toString().toUpperCase() : sb.toString(); } /** * Convert Hex String to Byte Array. * * @param hex * @return * @throws NumberFormatException */ public static byte[] convertHexStringToBytes(String hex) { if (hex == null) { return null; } byte[] bytes = new byte[hex.length() / 2]; for (int index = 0; index < bytes.length; index++) { bytes[index] = (byte) Integer.parseInt(hex.substring(index * 2, (index + 1) * 2), 16); } return bytes; } }