package com.avaje.util.codegen;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import com.avaje.ebean.server.plugin.Plugin;
import com.avaje.ebean.server.plugin.PluginProperties;
import com.avaje.lib.util.StringHelper;
public class TableNaming {
String defaultPackage;
String trimPrefix;
/**
* Array of Trimmable prefixes. The trimPrefix can be a comma delimited
* list.
*/
String[] prefixTrimArray = null;
String defaultBeanPrefix;
String defaultBeanSuffix;
boolean upperCaseFirstLetter = true;
HashMap aliasMap = new HashMap();
Plugin plugin;
HashMap tableNameMap = new HashMap();
public TableNaming(Plugin plugin) {
this.plugin = plugin;
PluginProperties props = plugin.getProperties();
defaultBeanPrefix = props.getProperty("codegen.beanprefix", null);
defaultBeanSuffix = props.getProperty("codegen.beansuffix", null);
trimPrefix = props.getProperty("codegen.tabletrimprefix", null);
defaultPackage = props.getProperty("codegen.javapackage", null);
String nameMap = props.getProperty("codegen.table.namemap", null);
if (nameMap != null){
// load a map of Table name to Bean class names
Map map = StringHelper.delimitedToMap(nameMap, ",", "=");
Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
String tableName = (String)entry.getKey();
String beanClassName = (String)entry.getValue();
tableNameMap.put(tableName.toLowerCase(), beanClassName);
}
}
}
public void addAlias(String from, String to){
aliasMap.put(from.toLowerCase(), to);
}
public void setDefaultBeanPrefix(String defaultBeanPrefix) {
this.defaultBeanPrefix = defaultBeanPrefix;
}
public void setDefaultBeanSuffix(String defaultBeanSuffix) {
this.defaultBeanSuffix = defaultBeanSuffix;
}
public void setTrimPrefix(String trimPrefix) {
this.trimPrefix = trimPrefix;
}
public String toPackage(String dbTableName) {
return defaultPackage;
}
public String toBeanClassName(String dbTableName) {
String javaBeanName = (String)tableNameMap.get(dbTableName.toLowerCase());
if (javaBeanName != null){
return javaBeanName;
}
javaBeanName = trimFirst(dbTableName);
javaBeanName = convertUnderscore(javaBeanName);
if (upperCaseFirstLetter) {
char firstLetter = Character.toUpperCase(javaBeanName.charAt(0));
javaBeanName = firstLetter + javaBeanName.substring(1);
}
StringBuffer sb = new StringBuffer();
if (defaultBeanPrefix != null) {
sb.append(defaultBeanPrefix);
}
sb.append(javaBeanName);
if (defaultBeanSuffix != null) {
sb.append(defaultBeanSuffix);
}
javaBeanName = sb.toString();
// make sure the bean name starts with a capital letter
char firstLetter = Character.toUpperCase(javaBeanName.charAt(0));
javaBeanName = firstLetter + javaBeanName.substring(1);
// if (javaPackage != null) {
// javaBeanName = javaPackage + "." + javaBeanName;
// }
return javaBeanName;
}
public String convertUnderscore(String source) {
String upperCased = source.toUpperCase();
boolean forceLower = upperCased.equals(source);
StringBuffer result = new StringBuffer();
String[] vals = source.split("_");
if (aliasMap.size()>0){
// convert using from to alias
// example prodoption to productOption
for (int y=0; y<vals.length; y++) {
String to = (String)aliasMap.get(vals[y].toLowerCase());
if (to != null){
vals[y] = to;
}
}
}
for (int i = 0; i < vals.length; i++) {
String section = vals[i];
if (forceLower) {
section = section.toLowerCase();
}
if (i > 0) {
char c = Character.toUpperCase(section.charAt(0));
result.append(c);
result.append(section.substring(1));
} else {
result.append(section);
}
}
return result.toString();
}
protected String trimFirst(String beanName) {
if (trimPrefix == null) {
return beanName;
}
if (prefixTrimArray == null) {
prefixTrimArray = trimPrefix.split("[,;]");
}
// search and trim table prefix
for (int i = 0; i < prefixTrimArray.length; i++) {
if (0 == beanName.indexOf(prefixTrimArray[i])) {
int newStart = prefixTrimArray[i].length();
return beanName.substring(newStart);
}
}
return beanName;
}
}
|