/*
* Copyright (C) 2016 Patrick Favre-Bulle
*
* 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 at.favre.tools.dconvert.util;
import java.io.File;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
/**
* Misc util methods
*/
public class MiscUtil {
public static String getStackTrace(Throwable t) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
t.printStackTrace(pw);
return sw.toString();
}
public static String duration(long ms) {
if (ms >= 1000) {
return String.format(Locale.US, "%.2f sec", (double) ms / 1000);
}
return ms + " ms";
}
public static <T> T[] concat(T[] first, T[] second) {
T[] result = Arrays.copyOf(first, first.length + second.length);
System.arraycopy(second, 0, result, first.length, second.length);
return result;
}
public static File createAndCheckFolder(String path, boolean dryRun) {
File f = new File(path);
if (dryRun) {
return f;
}
if (!f.exists()) {
f.mkdirs();
}
if (!f.exists() || !f.isDirectory()) {
throw new IllegalStateException("could not create folder: " + path);
}
return f;
}
public static String getFileExtensionLowerCase(File file) {
return getFileExtension(file).toLowerCase();
}
public static String getFileExtension(File file) {
if (file == null) {
return "";
}
return file.getName().substring(file.getName().lastIndexOf(".") + 1);
}
public static String getFileNameWithoutExtension(File file) {
String fileName = file.getName();
int pos = fileName.lastIndexOf(".");
if (pos > 0) {
fileName = fileName.substring(0, pos);
}
return fileName;
}
public static String getCmdProgressBar(float progress) {
int loadingBarCount = 40;
int bars = Math.round((float) loadingBarCount * progress);
StringBuilder sb = new StringBuilder("\r[");
for (int i = 0; i < loadingBarCount; i++) {
if (i < bars) {
sb.append("-");
} else {
sb.append(" ");
}
}
sb.append("] ");
if (progress < 1f) {
sb.append(String.format("%6s", String.format(Locale.US, "%.2f", progress * 100f))).append("%");
} else {
sb.append("100.00%\n");
}
return sb.toString();
}
public static <T> Set<T> toSet(T elem) {
Set<T> set = new HashSet<>(1);
set.add(elem);
return set;
}
public static void deleteFolder(File folder) {
if (folder != null && folder.exists()) {
File[] files = folder.listFiles();
if (files != null) { //some JVMs return null for empty dirs
for (File f : files) {
if (f.isDirectory()) {
deleteFolder(f);
} else {
f.delete();
}
}
}
folder.delete();
}
}
}