package org.openstack.atlas.util.staticutils; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.regex.Pattern; public class StaticStringUtils { public static String lpadLong(long val, String pad, int npad) { return lpad(Long.toString(val), pad, npad); } public static String lpad(String val, String pad, int npad) { StringBuilder sb = new StringBuilder(); int nspaces = npad - val.length(); for (int i = 0; i < nspaces; i++) { sb.append(pad); } sb.append(val); return sb.toString(); } public static String getExtendedStackTrace(Throwable th) { Throwable t; StringBuilder sb = new StringBuilder(); Exception currEx; String msg; t = th; while (t != null) { if (t instanceof Exception) { currEx = (Exception) t; sb.append(String.format("\"%s\":\"%s\"\n", currEx.getClass().getName(), currEx.getMessage())); for (StackTraceElement se : currEx.getStackTrace()) { sb.append(String.format("%s\n", se.toString())); } sb.append("\n"); t = t.getCause(); } } return sb.toString(); } public static <K, V> String mapToString(Map<K, V> map, String delimiter) { if (map == null) { return "null"; } if (map.isEmpty()) { return "[]"; } List<K> keys = new ArrayList<K>(map.keySet()); StringBuilder sb = new StringBuilder(); sb.append("["); for (int i = 0; i < keys.size() - 1; i++) { K key = keys.get(i); V val = map.get(key); if (key == null) { sb.append("null"); } else { sb.append(key.toString()); } sb.append("="); if (val == null) { sb.append("null"); } else { sb.append(val.toString()); } sb.append(delimiter); } K key = keys.get(keys.size() - 1); V val = map.get(key); if (key == null) { sb.append("null"); } else { sb.append(key.toString()); } sb.append("="); if (val == null) { sb.append("null"); } else { sb.append(val.toString()); } sb.append("]"); return sb.toString(); } public static <T> String collectionToString(Collection<T> collection, String delimiter) { if (collection == null) { return "null"; } if (collection.isEmpty()) { return "[]"; } StringBuilder sb = new StringBuilder(); sb.append("["); List<T> list = new ArrayList<T>(collection); for (int i = 0; i < list.size() - 1; i++) { T entry = list.get(i); if (entry == null) { sb.append("null").append(delimiter); continue; } sb.append(entry.toString()).append(delimiter); } sb.append(list.get(list.size() - 1)).append("]"); return sb.toString(); } public static String truncate(String stringIn, int maxLen) { if (stringIn == null) { return stringIn; } return stringIn.substring(0, Math.min(maxLen, stringIn.length() - 1)); } public static <K, V> String mapToString(Map<K, V> mapIn) { if (mapIn == null) { return "null"; } if (mapIn.size() <= 0) { return "[]"; } StringBuilder sb = new StringBuilder(); sb.append("["); for (Entry<K, V> entry : mapIn.entrySet()) { K key = entry.getKey(); V val = entry.getValue(); sb.append("("); if (key == null) { sb.append("null:"); } else { sb.append(key.toString()).append(":"); } if (val == null) { sb.append("null),"); } else { sb.append(val.toString()).append("),"); } } sb.append("]"); return sb.toString(); } public static String[] stripBlankArgs(String line) { int nargs = 0; int i; int j; String[] argsIn = line.replace("\r", "").replace("\n", "").split(" "); for (i = 0; i < argsIn.length; i++) { if (argsIn[i].length() > 0) { nargs++; } } String[] argsOut = new String[nargs]; j = 0; for (i = 0; i < argsIn.length; i++) { if (argsIn[i].length() > 0) { argsOut[j] = argsIn[i]; j++; } } return argsOut; } public static String justOneCR(String strIn) { StringBuilder sb = new StringBuilder(); String[] Strs = strIn.split("\n"); for (String str : Strs) { sb.append(str); } sb.append("\n"); return sb.toString(); } public static String showDiff(String a, String b) { StringBuilder sb = new StringBuilder(); int i; int la = a.length(); int lb = b.length(); int li = Math.max(la, lb); for (i = 0; i < li; i++) { int aPoint = (i < la) ? a.codePointAt(i) : 0; int bPoint = (i < lb) ? b.codePointAt(i) : 0; String aStr = new String(new int[]{aPoint}, 0, 1); String bStr = new String(new int[]{bPoint}, 0, 1); int delta = aPoint ^ bPoint; sb.append(String.format("str[%3d]: \"%s\" == \"%s\": Diff %8d\n", i, aStr, bStr, delta)); } return sb.toString(); } }