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 @Override 010 public String convertTableName(String tableName) { 011 return translate(tableName); 012 } 013 014 @Override 015 public String convertColumnName(String columnName) { 016 return translate(columnName); 017 } 018 019 private static String translate(String name) { 020 if(StringUtil.isEmpty(name)) return ""; 021 022 int len=name.length(); 023 StringBuilder sb = new StringBuilder(); 024 char c,p,n; 025 for(int i=0;i<len;i++) { 026 c=name.charAt(i); 027 if(i==0 || i+1==len) { 028 sb.append(Character.toUpperCase(c)); 029 continue; 030 } 031 p=name.charAt(i-1); 032 n=name.charAt(i+1); 033 034 // is Camel 035 if(Character.isLowerCase(p) && Character.isUpperCase(c) && Character.isLowerCase(n)) { 036 sb.append('_'); 037 sb.append(Character.toUpperCase(c)); 038 sb.append(Character.toUpperCase(n)); 039 i++; 040 } 041 else 042 sb.append(Character.toUpperCase(c)); 043 } 044 return sb.toString(); 045 } 046 047 @Override 048 public String getType() { 049 return "smart"; 050 } 051 052 }