001 package railo.runtime.orm.naming; 002 003 import railo.commons.lang.StringUtil; 004 005 public class SmartNamingStrategy implements NamingStrategy { 006 007 public static final NamingStrategy INSTANCE = new SmartNamingStrategy(); 008 009 /** 010 * @see railo.runtime.orm.NamingStrategy#convertTableName(java.lang.String) 011 */ 012 public String convertTableName(String tableName) { 013 return translate(tableName); 014 } 015 016 /** 017 * @see railo.runtime.orm.NamingStrategy#convertColumnName(java.lang.String) 018 */ 019 public String convertColumnName(String columnName) { 020 return translate(columnName); 021 } 022 023 private static String translate(String name) { 024 if(StringUtil.isEmpty(name)) return ""; 025 026 int len=name.length(); 027 StringBuilder sb = new StringBuilder(); 028 char c,p,n; 029 for(int i=0;i<len;i++) { 030 c=name.charAt(i); 031 if(i==0 || i+1==len) { 032 sb.append(Character.toUpperCase(c)); 033 continue; 034 } 035 p=name.charAt(i-1); 036 n=name.charAt(i+1); 037 038 // is Camel 039 if(Character.isLowerCase(p) && Character.isUpperCase(c) && Character.isLowerCase(n)) { 040 sb.append('_'); 041 sb.append(Character.toUpperCase(c)); 042 sb.append(Character.toUpperCase(n)); 043 i++; 044 } 045 else 046 sb.append(Character.toUpperCase(c)); 047 } 048 return sb.toString(); 049 } 050 051 /** 052 * @see railo.runtime.orm.NamingStrategy#getType() 053 */ 054 public String getType() { 055 return "smart"; 056 } 057 058 }