/*******************************************************************************
* Copyright (c) 2007 Bruno Medeiros and other Contributors.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Bruno Medeiros - initial implementation
*******************************************************************************/
package melnorme.utilbox.misc;
import static melnorme.utilbox.core.Assert.AssertNamespace.assertFail;
import static melnorme.utilbox.core.Assert.AssertNamespace.assertNotNull;
import static melnorme.utilbox.core.Assert.AssertNamespace.assertTrue;
import static melnorme.utilbox.misc.StreamUtil.readAllBytesFromStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Optional;
import java.util.function.Predicate;
public class MiscUtil extends PathUtil {
public static <T> Optional<T> toOptional(Optional<T> project) {
return project == null ? Optional.empty() : project;
}
/* ----------------- System ----------------- */
public static final String OS_NAME = StringUtil.nullAsEmpty(System.getProperty("os.name"));
public static final boolean OS_IS_WINDOWS = OS_NAME.startsWith("Windows");
public static final boolean OS_IS_LINUX = OS_NAME.startsWith("Linux") || OS_NAME.startsWith("LINUX");
public static final boolean OS_IS_MAC = OS_NAME.startsWith("Mac");
public static String getExecutableSuffix() {
return OS_IS_WINDOWS ? ".exe" : "";
}
public static String getSystemProperty(String propName, String defaultValue) {
String propValue = System.getProperty(propName);
if(propValue == null) {
return defaultValue;
}
return propValue;
}
public static boolean getSystemProperty(String propName, boolean defaultValue) {
String propValue = System.getProperty(propName);
if(propValue == null) {
return defaultValue;
}
return propValue != null;
}
/* ----------------- ----------------- */
public static boolean parseBoolean(String string) {
return string == null ? false : Boolean.valueOf(string).booleanValue();
}
/* ----------------- ----------------- */
public static <T> Predicate<T> getNotNullPredicate() {
return new NotNullPredicate<T>();
}
public static final class NotNullPredicate<T> implements Predicate<T> {
@Override
public boolean test(T obj) {
return obj != null;
}
}
public static <T> Predicate<T> getIsNullPredicate() {
return new IsNullPredicate<T>();
}
public static final class IsNullPredicate<T> implements Predicate<T> {
@Override
public boolean test(T obj) {
return obj == null;
}
}
/** Loads given klass. */
public static void loadClass(Class<?> klass) {
try {
// We use klass.getClassLoader(), in case klass cannot be loaded in the default (caller) classloader
// that could happen in OSGi runtimes for example
Class.forName(klass.getName(), true, klass.getClassLoader());
} catch (ClassNotFoundException e) {
assertFail();
}
}
/** Combines two hash codes to make a new one. */
public static int combineHashCodes(int hashCode1, int hashCode2) {
return HashcodeUtil.combineHashCodes(hashCode1, hashCode2);
}
/** Returns the first element of objs array that is not null.
* At least one element must be non-null. */
@SafeVarargs
public static <T> T firstNonNull(T... objs) {
for (int i = 0; i < objs.length; i++) {
if(objs[i] != null)
return objs[i];
}
assertFail();
return null;
}
/** Convenience method for extracting the element of a single element collection . */
public static <T> T getSingleElement(Collection<T> singletonDefunits) {
assertTrue(singletonDefunits.size() == 1);
return singletonDefunits.iterator().next();
}
/** Synchronizes on the given collection, and returns a copy suitable for iteration. */
public static <T> Iterable<T> synchronizedCreateIterable(Collection<T> collection) {
Iterable<T> iterable;
synchronized (collection) {
iterable = new ArrayList<T>(collection);
}
return iterable;
}
/** Sleeps current thread for given millis amount.
* If interrupted throws an unchecked exception. */
public static void sleepUnchecked(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
throw melnorme.utilbox.core.ExceptionAdapter.unchecked(e);
}
}
public static <T> T nullToOther(T object, T altValue) {
return object == null ? altValue : object;
}
/** @return true if given throwable is a Java unchecked throwable, false otherwise. */
public static boolean isUncheckedException(Throwable throwable) {
return throwable instanceof RuntimeException || throwable instanceof Error;
}
public static String getClassResource(Class<?> klass, String resourceName) {
return getClassResource(klass, resourceName, StringUtil.UTF8);
}
public static String getClassResource(Class<?> klass, String resourceName, Charset charset) {
try {
InputStream resourceStream = klass.getResourceAsStream(resourceName);
assertNotNull(resourceStream);
return readAllBytesFromStream(resourceStream).toString(charset);
} catch (IOException e) {
throw assertFail();
}
}
}