Package com.evolveum.midpoint.util
Class MiscUtil
- java.lang.Object
-
- com.evolveum.midpoint.util.MiscUtil
-
public class MiscUtil extends Object
- Author:
- semancik
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
MiscUtil.ExceptionSupplier<E>
-
Constructor Summary
Constructors Constructor Description MiscUtil()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static <T> void
addAllIfNotPresent(List<T> receivingList, List<T> supplyingList)
static <T> void
addIfNotPresent(List<T> receivingList, T supplyingElement)
static Boolean
and(Boolean... operands)
n-ary and that ignores null values.static void
argCheck(boolean condition, String template, Object... arguments)
static <T> T
argNonNull(T value, String template, Object... arguments)
static <T> T
argNonNull(T value, Supplier<String> messageSupplier)
static Date
asDate(int year, int month, int date, int hrs, int min, int sec)
static Date
asDate(XMLGregorianCalendar xgc)
Converts an XMLGregorianCalendar to an instance of java.util.Datestatic @Nullable Instant
asInstant(@Nullable Long millis)
static @Nullable Instant
asInstant(@Nullable XMLGregorianCalendar xgc)
static <T> List<T>
asListTreatingNull(T[] values)
LikeArrays.asList(Object[])
but if there's a single null value at input, creates an empty list.static Long
asMillis(XMLGregorianCalendar xgc)
static void
assertCheck(boolean condition, String template, Object... arguments)
static @Nullable XMLGregorianCalendar
asXMLGregorianCalendar(@Nullable Long timeInMillis)
Returns null for null input, but also for value of 0L.static @Nullable XMLGregorianCalendar
asXMLGregorianCalendar(@Nullable Instant instant)
static @Nullable XMLGregorianCalendar
asXMLGregorianCalendar(@Nullable Date date)
Converts a java.util.Date into an instance of XMLGregorianCalendarstatic @NotNull String
bytesToHex(@org.jetbrains.annotations.NotNull byte[] bytes)
static @Nullable String
bytesToHexPreview(@org.jetbrains.annotations.Nullable byte[] bytes)
Returns first 8 bytes from provided byte array as hexadecimal and adds length information.static @Nullable String
bytesToHexPreview(@org.jetbrains.annotations.Nullable byte[] bytes, int previewLen)
Returns a couple of bytes from provided byte array as hexadecimal and adds length information.static <T> void
carthesian(List<? extends Collection<T>> valuesForDimensions, Processor<List<T>> tupleProcessor)
We have n dimensions (D1...Dn), each containing a number of values.static <T> T
castSafely(Object value, Class<T> expectedClass)
static void
checkCollectionImmutable(Collection<?> collection)
static <K,V>
Map<K,V>cloneMap(Map<K,V> orig)
Shallow clonestatic Integer
compareNullLast(Object o1, Object o2)
static <T> @NotNull Collection<? extends T>
concat(@NotNull Collection<? extends T> collection1, @NotNull Collection<? extends T> collection2)
Returns a concatenation of two collections.static String
concat(Collection<String> stringCollection)
static void
configCheck(boolean condition, String template, Object... arguments)
static <T> T
configNonNull(T value, String template, Object... arguments)
static <T> T
configNonNull(T value, Supplier<String> messageSupplier)
static <T> boolean
contains(T element, T[] array)
static void
copyDirectory(File src, File dst)
Copy a directory and its contents.static void
copyFile(File sourceFile, File destFile)
static <T> Collection<T>
createCollection(T... items)
static <T extends Throwable>
TcreateSame(T original, String message)
static Class<?>
determineCommonAncestor(Collection<Class<?>> classes)
static @NotNull String
emptyIfNull(String s)
static <T> @NotNull Collection<T>
emptyIfNull(Collection<T> collection)
static <T> @NotNull List<T>
emptyIfNull(List<T> list)
static <T extends Enum<T>>
TenumFromOrdinal(Class<T> enumType, Integer ordinal)
Converts integer ordinal number to enum value of the defined enum type.static @Nullable Integer
enumOrdinal(@Nullable Enum<?> enumValue)
Returns ordinal value from nullable enum or returnsnull
.static boolean
equals(Object a, Object b)
static <T> T
extractSingleton(Collection<T> collection)
static <T,E extends Throwable>
TextractSingleton(Collection<T> collection, Supplier<E> exceptionSupplier)
static <T> T
extractSingletonRequired(Collection<T> collection)
static <T,E extends Throwable>
TextractSingletonRequired(Collection<T> collection, Supplier<E> multiExceptionSupplier, Supplier<E> noneExceptionSupplier)
static <T> Collection<T>
filter(Collection<T> input, Predicate<? super T> predicate)
static <T> Set<T>
filter(Set<T> input, Predicate<? super T> predicate)
static <V> V
find(Collection<V> values, V value, @NotNull EqualsChecker<V> equalsChecker)
static <V> V
findWithComparator(Collection<V> values, V value, @NotNull Comparator<V> comparator)
static String
fixFileName(String originalName)
Crude attempt at replacing all illegal chars with underscores.static String
formatExceptionMessage(Throwable t)
static String
formatExceptionMessageWithCause(Throwable t)
static String
formatExceptionMessageWithCause(Throwable t, int indent)
static String
getClass(Object object)
static String
getClassWithMessage(Throwable e)
static String
getDiagInfo(Object o)
static String
getDiagInfo(Object o, int maxLength)
static String
getDiagInfo(Collection<?> objects, int maxItems, int maxLengthPerObject)
static Object
getDiagInfoLazy(Object o)
static XMLGregorianCalendar
getEarliestTimeIgnoringNull(Collection<XMLGregorianCalendar> realValues)
static <T> T
getFirstNonNull(T... values)
static <T> T
getFirstNonNullFromList(List<T> values)
static String
getFirstNonNullString(Object... values)
static String
getObjectName(Object o)
static <T> T
getRandomItem(List<T> collection)
static String
getSimpleClassName(Object o)
static <T> T
getSingleValue(Collection<T> values, T defaultValue, String contextDescription)
static <T> Collection<T>
getValuesFromDisplayableValues(Collection<? extends DisplayableValue<T>> disps)
static String
getValueWithClass(Object object)
static <T> boolean
hasDuplicates(Collection<T> collection)
Returns true if the collection contains at least one pair of equals elements.static boolean
hasNoValue(Collection<?> collection)
static byte[]
hexToBytes(String hex)
static String
hexToUtf8String(String hex)
static <E> Function<Object,Stream<E>>
instancesOf(Class<E> cls)
static boolean
isAllNull(Collection<?> collection)
static boolean
isBetween(XMLGregorianCalendar date, XMLGregorianCalendar start, XMLGregorianCalendar end)
static boolean
isCollectionOf(Object object, @NotNull Class<?> memberClass)
static boolean
isNoValue(Collection<?> collection)
static boolean
isSingleNull(Object[] values)
static <T> List<T>
join(Collection<T> a, Collection<T> b)
static <T> T
last(List<T> list)
static Integer
max(Integer a, Integer b)
static Long
max(Long a, Long b)
static Integer
min(Integer a, Integer b)
static Long
min(Long a, Long b)
static <V> @NotNull Collection<V>
nonNullValues(@NotNull Collection<V> values)
static boolean
nullableCollectionsEqual(Collection<?> c1, Collection<?> c2)
static String
nullIfEmpty(String s)
static double
or0(Double value)
static int
or0(Integer value)
static long
or0(Long value)
static BigDecimal
or0(BigDecimal value)
static <K,V>
Map<K,V>paramsToMap(Object[] params)
static String
readFile(File file)
static String
readZipFile(File file, Charset charset)
static <T,E extends Throwable>
TrequireNonNull(T value, MiscUtil.ExceptionSupplier<E> exceptionSupplier)
static <T> T
requireNonNull(T value, Supplier<String> messageSupplier)
static <T> T
runChecked(CheckedFunction<Producer<T>,T> function, CheckedProducer<T> checkedProducer)
static void
schemaCheck(boolean condition, String template, Object... arguments)
static <T> List<T>
singletonOrEmptyList(T value)
static <T> Set<T>
singletonOrEmptySet(T value)
static void
sleepCatchingInterruptedException(long delay)
Sleeps for specified time.static void
sleepNonInterruptibly(long delay)
Sleeps for specified time.static void
sleepWatchfully(long until, long increment, Supplier<Boolean> canRunSupplier)
Sleeps watching "can run" flag.static List<String>
splitLines(String string)
static boolean
startsWith(List<?> wholeList, List<?> subList)
static void
stateCheck(boolean condition, String template, Object... arguments)
static <T> T
stateNonNull(T value, Supplier<String> messageSupplier)
static <T> @NotNull Stream<T>
streamOf(Collection<T> collection)
static String
stripHtmlMarkup(String htmlString)
static String
takeThreadDump(@Nullable Thread thread)
Thanks for this code go to https://crunchify.com/how-to-generate-java-thread-dump-programmatically/static <T extends Throwable>
voidthrowAsSame(Throwable original, String message)
Re-throws the original exception wrapped in the same class (e.g.static <T extends Throwable>
voidthrowException(Throwable exception)
static void
throwExceptionAsUnchecked(Throwable t)
static Integer
toInteger(Long value)
static Long
toLong(Integer value)
static String
toString(Object o)
static URL
toUrlUnchecked(URI uri)
static @Nullable String
trimString(@Nullable String value, int size)
static <T> @NotNull Collection<T>
union(Collection<T>... sets)
static <T> Collection<? extends T>
unionExtends(Collection<? extends T>... sets)
static <T> boolean
unorderedArrayEquals(T[] a, T[] b)
static <T> boolean
unorderedArrayEquals(T[] a, T[] b, EqualsChecker<T> equalsChecker)
Only zero vs non-zero value of comparator is important.static <T> boolean
unorderedCollectionEquals(Collection<? extends T> a, Collection<? extends T> b)
static <A,B>
booleanunorderedCollectionEquals(Collection<A> a, Collection<B> b, HeteroEqualsChecker<A,B> comparator)
Only zero vs non-zero value of comparator is important.static <T> boolean
unorderedCollectionEqualsWithComparator(Collection<T> a, Collection<T> b, Comparator<T> comparator)
Only zero vs non-zero value of comparator is important.static <T> int
unorderedCollectionHashcode(Collection<T> collection, Predicate<T> filter)
static <T> T
unwrapTunnelledException(TunnelException te)
static <T> T
unwrapTunnelledExceptionToRuntime(TunnelException te)
static void
writeZipFile(File file, String entryName, String content, Charset charset)
-
-
-
Method Detail
-
union
@SafeVarargs @NotNull public static <T> @NotNull Collection<T> union(Collection<T>... sets)
-
unionExtends
@SafeVarargs public static <T> Collection<? extends T> unionExtends(Collection<? extends T>... sets)
-
unorderedCollectionEquals
public static <T> boolean unorderedCollectionEquals(Collection<? extends T> a, Collection<? extends T> b)
-
unorderedCollectionEqualsWithComparator
public static <T> boolean unorderedCollectionEqualsWithComparator(Collection<T> a, Collection<T> b, Comparator<T> comparator)
Only zero vs non-zero value of comparator is important. Prefer otherunorderedCollectionEquals
whenever possible. If you are provided with comparator for good reason, you may use this. If you create comparator for this method, you probably should createEqualsChecker
instead.
-
unorderedCollectionEquals
public static <A,B> boolean unorderedCollectionEquals(Collection<A> a, Collection<B> b, HeteroEqualsChecker<A,B> comparator)
Only zero vs non-zero value of comparator is important.
-
unorderedArrayEquals
public static <T> boolean unorderedArrayEquals(T[] a, T[] b)
-
unorderedArrayEquals
public static <T> boolean unorderedArrayEquals(T[] a, T[] b, EqualsChecker<T> equalsChecker)
Only zero vs non-zero value of comparator is important.
-
unorderedCollectionHashcode
public static <T> int unorderedCollectionHashcode(Collection<T> collection, Predicate<T> filter)
-
readFile
public static String readFile(File file) throws IOException
- Throws:
IOException
-
copyFile
public static void copyFile(File sourceFile, File destFile) throws IOException
- Throws:
IOException
-
copyDirectory
public static void copyDirectory(File src, File dst) throws IOException
Copy a directory and its contents.- Parameters:
src
- The name of the directory to copy.dst
- The name of the destination directory.- Throws:
IOException
- If the directory could not be copied.
-
createCollection
@SafeVarargs public static <T> Collection<T> createCollection(T... items)
-
asXMLGregorianCalendar
@Nullable public static @Nullable XMLGregorianCalendar asXMLGregorianCalendar(@Nullable @Nullable Date date)
Converts a java.util.Date into an instance of XMLGregorianCalendar- Parameters:
date
- Instance of java.util.Date or a null reference- Returns:
- XMLGregorianCalendar instance whose value is based upon the value in the date parameter. If the date parameter is null then this method will simply return null.
-
asXMLGregorianCalendar
@Nullable public static @Nullable XMLGregorianCalendar asXMLGregorianCalendar(@Nullable @Nullable Long timeInMillis)
Returns null for null input, but also for value of 0L.
-
asXMLGregorianCalendar
@Nullable public static @Nullable XMLGregorianCalendar asXMLGregorianCalendar(@Nullable @Nullable Instant instant)
-
asInstant
@Nullable public static @Nullable Instant asInstant(@Nullable @Nullable XMLGregorianCalendar xgc)
-
asDate
public static Date asDate(XMLGregorianCalendar xgc)
Converts an XMLGregorianCalendar to an instance of java.util.Date- Parameters:
xgc
- Instance of XMLGregorianCalendar or a null reference- Returns:
- java.util.Date instance whose value is based upon the value in the xgc parameter. If the xgc parameter is null then this method will simply return null.
-
asMillis
public static Long asMillis(XMLGregorianCalendar xgc)
-
asDate
public static Date asDate(int year, int month, int date, int hrs, int min, int sec)
-
carthesian
public static <T> void carthesian(List<? extends Collection<T>> valuesForDimensions, Processor<List<T>> tupleProcessor)
We have n dimensions (D1...Dn), each containing a number of values.This method sequentially creates all n-tuples of these values (one value from each dimension) and invokes tupleProcessor on them.
-
concat
public static String concat(Collection<String> stringCollection)
-
isAllNull
public static boolean isAllNull(Collection<?> collection)
-
getDiagInfoLazy
@Experimental public static Object getDiagInfoLazy(Object o)
-
getDiagInfo
@Experimental public static String getDiagInfo(Collection<?> objects, int maxItems, int maxLengthPerObject)
-
getDiagInfo
@Experimental public static String getDiagInfo(Object o)
-
getDiagInfo
@Experimental public static String getDiagInfo(Object o, int maxLength)
-
isNoValue
public static boolean isNoValue(Collection<?> collection)
-
hasNoValue
public static boolean hasNoValue(Collection<?> collection)
-
isBetween
public static boolean isBetween(XMLGregorianCalendar date, XMLGregorianCalendar start, XMLGregorianCalendar end)
-
contains
public static <T> boolean contains(T element, T[] array)
-
getValuesFromDisplayableValues
public static <T> Collection<T> getValuesFromDisplayableValues(Collection<? extends DisplayableValue<T>> disps)
-
bytesToHex
@NotNull public static @NotNull String bytesToHex(@NotNull @org.jetbrains.annotations.NotNull byte[] bytes)
-
hexToBytes
public static byte[] hexToBytes(String hex)
-
bytesToHexPreview
@Nullable public static @Nullable String bytesToHexPreview(@Nullable @org.jetbrains.annotations.Nullable byte[] bytes)
Returns first 8 bytes from provided byte array as hexadecimal and adds length information. Returns null if null array is provided.
-
bytesToHexPreview
@Nullable public static @Nullable String bytesToHexPreview(@Nullable @org.jetbrains.annotations.Nullable byte[] bytes, int previewLen)
Returns a couple of bytes from provided byte array as hexadecimal and adds length information. Returns null if null array is provided.- Parameters:
previewLen
- max number of bytes in the hexadecimal preview
-
addAllIfNotPresent
public static <T> void addAllIfNotPresent(List<T> receivingList, List<T> supplyingList)
-
addIfNotPresent
public static <T> void addIfNotPresent(List<T> receivingList, T supplyingElement)
-
nullableCollectionsEqual
public static boolean nullableCollectionsEqual(Collection<?> c1, Collection<?> c2)
-
getFirstNonNull
@SafeVarargs public static <T> T getFirstNonNull(T... values)
-
getFirstNonNullFromList
public static <T> T getFirstNonNullFromList(List<T> values)
-
extractSingleton
public static <T> T extractSingleton(Collection<T> collection)
-
extractSingleton
public static <T,E extends Throwable> T extractSingleton(Collection<T> collection, Supplier<E> exceptionSupplier) throws E extends Throwable
- Throws:
E extends Throwable
-
extractSingletonRequired
@NotNull public static <T,E extends Throwable> T extractSingletonRequired(Collection<T> collection, Supplier<E> multiExceptionSupplier, Supplier<E> noneExceptionSupplier) throws E extends Throwable
- Throws:
E extends Throwable
-
extractSingletonRequired
@NotNull public static <T> T extractSingletonRequired(Collection<T> collection)
-
getSingleValue
public static <T> T getSingleValue(Collection<T> values, T defaultValue, String contextDescription)
-
isCollectionOf
public static boolean isCollectionOf(Object object, @NotNull @NotNull Class<?> memberClass)
-
last
public static <T> T last(List<T> list)
-
emptyIfNull
@NotNull public static <T> @NotNull Collection<T> emptyIfNull(Collection<T> collection)
-
streamOf
@NotNull public static <T> @NotNull Stream<T> streamOf(Collection<T> collection)
-
hasDuplicates
public static <T> boolean hasDuplicates(Collection<T> collection)
Returns true if the collection contains at least one pair of equals elements.
-
formatExceptionMessageWithCause
public static String formatExceptionMessageWithCause(Throwable t, int indent)
-
throwException
public static <T extends Throwable> void throwException(Throwable exception) throws T extends Throwable
- Throws:
T extends Throwable
-
throwExceptionAsUnchecked
public static void throwExceptionAsUnchecked(Throwable t)
-
runChecked
public static <T> T runChecked(CheckedFunction<Producer<T>,T> function, CheckedProducer<T> checkedProducer) throws CommonException
- Throws:
CommonException
-
unwrapTunnelledException
public static <T> T unwrapTunnelledException(TunnelException te) throws CommonException
- Throws:
CommonException
-
unwrapTunnelledExceptionToRuntime
public static <T> T unwrapTunnelledExceptionToRuntime(TunnelException te)
-
filter
public static <T> Collection<T> filter(Collection<T> input, Predicate<? super T> predicate)
-
nonNullValues
@NotNull public static <V> @NotNull Collection<V> nonNullValues(@NotNull @NotNull Collection<V> values)
-
join
public static <T> List<T> join(Collection<T> a, Collection<T> b)
-
takeThreadDump
public static String takeThreadDump(@Nullable @Nullable Thread thread)
Thanks for this code go to https://crunchify.com/how-to-generate-java-thread-dump-programmatically/
-
writeZipFile
public static void writeZipFile(File file, String entryName, String content, Charset charset) throws IOException
- Throws:
IOException
-
readZipFile
public static String readZipFile(File file, Charset charset) throws IOException
- Throws:
IOException
-
singletonOrEmptySet
public static <T> Set<T> singletonOrEmptySet(T value)
-
singletonOrEmptyList
public static <T> List<T> singletonOrEmptyList(T value)
-
castSafely
public static <T> T castSafely(Object value, Class<T> expectedClass) throws SchemaException
- Throws:
SchemaException
-
determineCommonAncestor
public static Class<?> determineCommonAncestor(Collection<Class<?>> classes)
-
throwAsSame
@Experimental public static <T extends Throwable> void throwAsSame(Throwable original, String message) throws T extends Throwable
Re-throws the original exception wrapped in the same class (e.g. SchemaException as SchemaException) but with additional message. It is used to preserve meaning of the exception but adding some contextual information.- Throws:
T extends Throwable
-
createSame
@Experimental public static <T extends Throwable> T createSame(T original, String message)
-
getEarliestTimeIgnoringNull
public static XMLGregorianCalendar getEarliestTimeIgnoringNull(Collection<XMLGregorianCalendar> realValues)
-
findWithComparator
public static <V> V findWithComparator(Collection<V> values, V value, @NotNull @NotNull Comparator<V> comparator)
-
find
public static <V> V find(Collection<V> values, V value, @NotNull @NotNull EqualsChecker<V> equalsChecker)
-
enumFromOrdinal
public static <T extends Enum<T>> T enumFromOrdinal(Class<T> enumType, Integer ordinal)
Converts integer ordinal number to enum value of the defined enum type.- Parameters:
enumType
- type of enum (class object)ordinal
- ordinal value- Returns:
- enum value or null if ordinal is null
- Throws:
IndexOutOfBoundsException
- If the ordinal value is out of enum value range
-
enumOrdinal
@Nullable public static @Nullable Integer enumOrdinal(@Nullable @Nullable Enum<?> enumValue)
Returns ordinal value from nullable enum or returnsnull
.
-
trimString
@Nullable public static @Nullable String trimString(@Nullable @Nullable String value, int size)
-
requireNonNull
public static <T> T requireNonNull(T value, Supplier<String> messageSupplier) throws SchemaException
- Throws:
SchemaException
-
configNonNull
public static <T> T configNonNull(T value, Supplier<String> messageSupplier) throws ConfigurationException
- Throws:
ConfigurationException
-
configNonNull
public static <T> T configNonNull(T value, String template, Object... arguments) throws ConfigurationException
- Throws:
ConfigurationException
-
isSingleNull
public static boolean isSingleNull(Object[] values)
-
sleepWatchfully
public static void sleepWatchfully(long until, long increment, Supplier<Boolean> canRunSupplier)
Sleeps watching "can run" flag.InterruptedException
is caught (causing checking can run flag) but not propagated.
-
sleepCatchingInterruptedException
public static void sleepCatchingInterruptedException(long delay)
Sleeps for specified time.InterruptedException
is caught (causing immediate exit) but not propagated.
-
sleepNonInterruptibly
public static void sleepNonInterruptibly(long delay)
Sleeps for specified time.InterruptedException
is ignored - after we get it, we simply continue sleeping, until the whole specified time elapses. This is e.g. to simulate non-interruptible execution of a task.
-
getRandomItem
public static <T> T getRandomItem(List<T> collection)
-
requireNonNull
public static <T,E extends Throwable> T requireNonNull(T value, MiscUtil.ExceptionSupplier<E> exceptionSupplier) throws E extends Throwable
- Throws:
E extends Throwable
-
checkCollectionImmutable
public static void checkCollectionImmutable(Collection<?> collection)
-
schemaCheck
public static void schemaCheck(boolean condition, String template, Object... arguments) throws SchemaException
- Throws:
SchemaException
-
configCheck
public static void configCheck(boolean condition, String template, Object... arguments) throws ConfigurationException
- Throws:
ConfigurationException
-
assertCheck
public static void assertCheck(boolean condition, String template, Object... arguments)
-
asListTreatingNull
public static <T> List<T> asListTreatingNull(T[] values)
LikeArrays.asList(Object[])
but if there's a single null value at input, creates an empty list.
-
or0
public static BigDecimal or0(BigDecimal value)
-
or0
public static int or0(Integer value)
-
or0
public static long or0(Long value)
-
or0
public static double or0(Double value)
-
fixFileName
public static String fixFileName(String originalName)
Crude attempt at replacing all illegal chars with underscores. Maybe too strict.
-
concat
@NotNull public static <T> @NotNull Collection<? extends T> concat(@NotNull @NotNull Collection<? extends T> collection1, @NotNull @NotNull Collection<? extends T> collection2)
Returns a concatenation of two collections. (No trying to remove multiplicities.) Optimizing the operation if one of collections is empty. The return value should not be used for modifications!
-
-