001package gu.sql2java.generator; 002 003import java.util.Random; 004 005import com.google.common.base.Joiner; 006import com.google.common.base.MoreObjects; 007import com.google.common.base.Strings; 008 009import gu.sql2java.generator.Column; 010import gu.sql2java.generator.Table; 011 012public final class StringUtilities { 013 private static StringUtilities singleton = new StringUtilities(); 014 public static final String PREFIX = ""; 015 static String[] reserved_words = new String[]{"null", "true", "false", "abstract", "double", "int", "strictfp", 016 "boolean", "else", "interface", "super", "break", "extends", "long", "switch", "byte", "final", "native", 017 "synchronized", "case", "finally", "new", "this", "catch", "float", "package", "throw", "char", "for", 018 "private", "throws", "class", "goto", "protected", "transient", "const", "if", "public", "try", "continue", 019 "implements", "return", "void", "default", "import", "short", "volatile", "do", "instanceof", "static", 020 "while", "assert", "enum"}; 021 static String[] latin = new String[]{"Ac", "Aethiopia", "Africae", "Anazarbus", "Argonautarum", "Ciliciam", "Cydno", 022 "Danaes,", "Etenim", "Iovis", "Mopsi,", "Mopsuestia", "Perseus", "Quibus", "Sandan", "Tarsus", "a", 023 "abstractum", "ad", "alacriter", "alia", "amni", "anceps", "artes,", "auctoris", "aureo", "aut", "bene", 024 "certamen", "certe", "cespite", "cognatione", "commune", "concitat", "condidisse", "conmilitio", 025 "consumpsit,", "consurgentem", "continentur.", "cum", "cunctorum.", "dediti", "delatumque", "dicendi", 026 "dici", "direpto", "disciplina,", "distarent,", "dolorem", "dolorum", "domicilium", "ductores", "eius", 027 "eo", "errore", "et", "eum", "ex", "explicatis", "exultat,", "facultas", "feriens", "filius", "forte", 028 "fuimus.", "gestu", "habent", "habitus", "haec", "hanc", "hastisque", "haut", "heroici", "hoc", "huic", 029 "humanitatem", "iam", "illius", "in", "ingeni,", "intempestivum", "inter", "iram", "ita", "litus", "locari", 030 "longe", "manes", "medentur", "memoratur,", "miles", "miretur,", "mors", "muri", "ne", "neque", "nobilis", 031 "nobilitat,", "nobis", "nomine", "nos", "occurrere", "omnes", "opulentus", "ordinibus", "parans", "penitus", 032 "perspicabilis", "pertinax", "pertinent,", "plerumque", "poterat", "profectus", "proximos", "pugnantium", 033 "punico", "quadam", "quae", "quaedam", "quasi", "quem", "qui", "quidam", "quidem", "quis", "quod", 034 "quoddam", "quorum", "rati", "ratio", "redirent,", "referens,", "repentina", "revocavere", "scuta", "se", 035 "securitas", "sed", "sit", "solido", "sospitales.", "studio", "subire", "tecti", "terrebat", "tutela", 036 "umquam", "uni", "urbs", "varietati", "vatis", "vel", "vellere", "vero,", "vinculum,", "vir", "vocabulum"}; 037 private static Random rand = new Random(); 038 039 private StringUtilities() { 040 } 041 042 public static synchronized StringUtilities getInstance() { 043 return singleton; 044 } 045 046 public String getPackageAsPath(String pkg) { 047 if (pkg == null) { 048 return ""; 049 } 050 return pkg.replace('.', '/'); 051 } 052 053 public static String convertClass(String table, String type) { 054 String suffix = ""; 055 String postfix = ""; 056 if (!"".equalsIgnoreCase("")) { 057 suffix = suffix + "_"; 058 } 059 if (!"".equalsIgnoreCase(type)) { 060 postfix = "_" + type; 061 } 062 return StringUtilities.convertName(suffix + table + postfix, false); 063 } 064 065 public static String convertClass(Table table, String type) { 066 return StringUtilities.convertClass(table.getName(), type); 067 } 068 069 public static String convertName(String name, boolean wimpyCaps) { 070 StringBuffer buffer = new StringBuffer(name.length()); 071 char[] list = name.toLowerCase().toCharArray(); 072 for (int i = 0; i < list.length; ++i) { 073 if (i == 0 && !wimpyCaps) { 074 buffer.append(Character.toUpperCase(list[i])); 075 continue; 076 } 077 if (list[i] == '_' && i + 1 < list.length && i != 0) { 078 buffer.append(Character.toUpperCase(list[++i])); 079 continue; 080 } 081 buffer.append(list[i]); 082 } 083 return buffer.toString(); 084 } 085 086 /** 087 * 字符串首字母大写 088 * @param name 089 * @return 090 */ 091 public static String firstUpperCase(String name){ 092 if(Strings.isNullOrEmpty(name))return name; 093 char[] list = name.toCharArray(); 094 list[0] = Character.toUpperCase(list[0]); 095 return new String(list); 096 } 097 public static String escape(String s) { 098 return StringUtilities.isReserved(s) ? "my_" + s : s; 099 } 100 101 public static String escape(Column s) { 102 return StringUtilities.isReserved(s.getName()) ? "my_" + s.getName() : s.getName(); 103 } 104 105 public static boolean isReserved(String s) { 106 for (int i = 0; i < reserved_words.length; ++i) { 107 if (s.compareToIgnoreCase(reserved_words[i]) != 0) 108 continue; 109 return true; 110 } 111 return false; 112 } 113 114 public static String getSampleString(int size) { 115 StringBuffer s = new StringBuffer(size); 116 while (s.length() < size - 5) { 117 s.append(latin[rand.nextInt(latin.length)]).append(" "); 118 } 119 return s.toString(); 120 } 121 public static final String asJavaString(String input){ 122 String[] list = MoreObjects.firstNonNull(input, "").split("\\r?\\n"); 123 return "\"" + Joiner.on("\\n\"\n+\"").join(list) + "\""; 124 } 125 /** 126 * 返回一个类的简单名字 127 * 128 * @param className 129 * @return 130 */ 131 public static final String simpleName(String className) { 132 return className.replaceAll("(?:\\w+\\.)*(\\w+)", "$1"); 133 } 134 public static final String combinePath(String p1,String p2){ 135 StringBuffer buffer = new StringBuffer(); 136 buffer.append(p1); 137 if(!p1.endsWith("/")){ 138 buffer.append("/"); 139 } 140 buffer.append(p2.startsWith("/") ? p2.substring(1) : p2); 141 return buffer.toString(); 142 } 143}