package com.aggrepoint.dao;
import org.hibernate.cfg.ImprovedNamingStrategy;
import org.hibernate.internal.util.StringHelper;
public class DefaultNamingStrategy extends ImprovedNamingStrategy {
private static final long serialVersionUID = 1L;
protected static String addUnderscores(String name) {
StringBuilder buf = new StringBuilder(name.replace('.', '_'));
for (int i = 1; i < buf.length(); i++) {
if ((Character.isLowerCase(buf.charAt(i - 1)) || Character
.isDigit(buf.charAt(i - 1)))
&& Character.isUpperCase(buf.charAt(i))
&& (i < buf.length() - 1
&& Character.isLowerCase(buf.charAt(i + 1)) || i == buf
.length() - 1)) {
buf.insert(i++, '_');
}
}
return buf.toString().toLowerCase();
}
@Override
public String classToTableName(String className) {
String name = addUnderscores(StringHelper.unqualify(className))
.toUpperCase();
if (name.equals("NEWS") || name.endsWith("_NEWS"))
return name;
if (name.endsWith("Y"))
if (!name.endsWith("AY") && !name.endsWith("EY")
&& !name.endsWith("OY") && !name.endsWith("IY")
&& !name.endsWith("UY"))
return name.substring(0, name.length() - 1) + "IES";
if (name.endsWith("S") || name.endsWith("SH") || name.endsWith("CH")
|| name.endsWith("X"))
return name + "ES";
return name + "S";
}
@Override
public String tableName(String tableName) {
return tableName;
}
@Override
public String propertyToColumnName(String propertyName) {
return addUnderscores(StringHelper.unqualify(propertyName))
.toUpperCase();
}
}