package railo.runtime.orm.naming; import railo.loader.util.Util; public class SmartNamingStrategy implements NamingStrategy { public static final NamingStrategy INSTANCE = new SmartNamingStrategy(); @Override public String convertTableName(String tableName) { return translate(tableName); } @Override public String convertColumnName(String columnName) { return translate(columnName); } private static String translate(String name) { if(Util.isEmpty(name)) return ""; int len=name.length(); StringBuilder sb = new StringBuilder(); char c,p,n; for(int i=0;i<len;i++) { c=name.charAt(i); if(i==0 || i+1==len) { sb.append(Character.toUpperCase(c)); continue; } p=name.charAt(i-1); n=name.charAt(i+1); // is Camel if(Character.isLowerCase(p) && Character.isUpperCase(c) && Character.isLowerCase(n)) { sb.append('_'); sb.append(Character.toUpperCase(c)); sb.append(Character.toUpperCase(n)); i++; } else sb.append(Character.toUpperCase(c)); } return sb.toString(); } @Override public String getType() { return "smart"; } }