package org.zstack.utils; import org.apache.commons.io.IOUtils; import java.io.InputStream; import java.io.StringWriter; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; /** */ public class StringDSL { public static class StringWrapper { private String self; public StringWrapper(String self) { this.self = self; } public StringWrapper(String...strs) { self = ""; for (String str : strs) { self += str; } } @Override public String toString() { return self; } private String substitute(Map<String, Object> tokens) { Pattern pattern = Pattern.compile("\\{(.+?)\\}"); Matcher matcher = pattern.matcher(self); StringBuffer buffer = new StringBuffer(); while (matcher.find()) { Object replacement = tokens.get(matcher.group(1)); if (replacement != null) { matcher.appendReplacement(buffer, ""); buffer.append(replacement.toString()); } } matcher.appendTail(buffer); return buffer.toString(); } public String format(Object...params) { Map<String, Object> tokens = new HashMap<String, Object>(); for (int i=0; i<params.length; i++) { Object p = params[i]; tokens.put(String.valueOf(i), p != null ? p.toString() : "null"); } return substitute(tokens); } public String formatByMap(Map tokens) { return substitute(tokens); } } public static StringWrapper s(String...strs) { return new StringWrapper(strs); } public static StringWrapper ln(String...strs) { String[] ss = new String[strs.length]; for (int i=0; i<strs.length; i++) { ss[i] = strs[i] + '\n'; } return new StringWrapper(ss); } public static boolean equals(String a, String b) { if (a == null && b == null) { return true; } else if (a == null || b == null) { return false; } else { return a.equals(b); } } public static String stripStart(String str, String prefix) { if (!str.startsWith(prefix)) { return str; } return str.substring(prefix.length()); } public static String stripEnd(String str, String suffix) { if (!str.endsWith(suffix)) { return str; } return str.substring(0, str.indexOf(suffix)); } public static String splitCamelCase(String s) { return s.replaceAll( String.format("%s|%s|%s", "(?<=[A-Z])(?=[A-Z][a-z])", "(?<=[^A-Z])(?=[A-Z])", "(?<=[A-Za-z])(?=[^A-Za-z])" ), " " ); } public static String inputStreamToString(InputStream in) { try { StringWriter writer = new StringWriter(); IOUtils.copy(in, writer); return writer.toString(); } catch (Exception e) { throw new RuntimeException(e); } } public static boolean isZstackUuid(String uuid) { return uuid.matches("[0-9a-f]{8}[0-9a-f]{4}[1-5][0-9a-f]{3}[89ab][0-9a-f]{3}[0-9a-f]{12}"); } }