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, 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
asLong(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
binaryToHex(@org.jetbrains.annotations.NotNull byte[] bytes)
static @Nullable String
binaryToHexPreview(@org.jetbrains.annotations.Nullable byte[] bytes)
Returns first 8 bytes from provided byte array as hexadecimal and adds length information.static @Nullable String
binaryToHexPreview(@org.jetbrains.annotations.Nullable byte[] bytes, int previewLen)
Returns 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, 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 Comparator<V> comparator)
static String
fixFileName(String originalName)
Crude attempt at replacing all illegal chars with underscores.static String
formatExceptionMessageWithCause(Throwable t)
static String
formatExceptionMessageWithCause(Throwable t, int indent)
static String
getClass(Object object)
static String
getClassWithMessage(Throwable e)
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[]
hexToBinary(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 boolean
onWindows()
Are we running on Windows? (Rough estimate.)static double
or0(Double value)
static int
or0(Integer value)
static long
or0(Long value)
static <K,V>
Map<K,V>paramsToMap(Object[] params)
static String
readFile(File file)
static String
readZipFile(File file, Charset charset)
static String
replaceIllegalCharInFileNameOnWindows(String path)
Replacing illegal characters in file name on Windows.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 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, Comparator<T> comparator)
Only zero vs non-zero value of comparator is important.static <T> boolean
unorderedCollectionCompare(Collection<T> a, Collection<T> b, Comparator<T> comparator)
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, HeteroComparator<A,B> 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)
-
unorderedCollectionCompare
public static <T> boolean unorderedCollectionCompare(Collection<T> a, Collection<T> b, Comparator<T> comparator)
Only zero vs non-zero value of comparator is important.
-
unorderedCollectionEquals
public static <A,B> boolean unorderedCollectionEquals(Collection<A> a, Collection<B> b, HeteroComparator<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, Comparator<T> comparator)
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.
-
asLong
public static Long asLong(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)
-
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)
-
binaryToHex
@NotNull public static @NotNull String binaryToHex(@NotNull @org.jetbrains.annotations.NotNull byte[] bytes)
-
hexToBinary
public static byte[] hexToBinary(String hex)
-
binaryToHexPreview
@Nullable public static @Nullable String binaryToHexPreview(@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.
-
binaryToHexPreview
@Nullable public static @Nullable String binaryToHexPreview(@Nullable @org.jetbrains.annotations.Nullable byte[] bytes, int previewLen)
Returns 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)
-
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)
-
find
public static <V> V find(Collection<V> values, V value, @NotNull @NotNull Comparator<V> comparator)
-
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
-
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 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.
-
replaceIllegalCharInFileNameOnWindows
public static String replaceIllegalCharInFileNameOnWindows(String path)
Replacing illegal characters in file name on Windows.
-
onWindows
public static boolean onWindows()
Are we running on Windows? (Rough estimate.)
-
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!
-
-