package net.sf.minuteProject.plugin.format;
import java.util.List;
import net.sf.minuteProject.configuration.bean.Package;
import net.sf.minuteProject.configuration.bean.Template;
import net.sf.minuteProject.configuration.bean.model.data.Column;
import net.sf.minuteProject.configuration.bean.model.data.Table;
import net.sf.minuteProject.utils.ColumnUtils;
import net.sf.minuteProject.utils.CommonUtils;
import net.sf.minuteProject.utils.FormatUtils;
import net.sf.minuteProject.utils.TemplateUtils;
import org.apache.commons.lang.StringUtils;
public class I18nUtils {
public static final String BLANK = "";
public static final String ONE_SPACE = " ";
public static final String UNDERSCORE = "_";
public static final String SEPARATOR_WORD= ".";
public static final String DEFAULT_SEPARATOR="_";
public static String getColumnDescription(Column column) {
return (column.getDescription()!=null)?column.getDescription():"";
}
public static String getI18nFromDBName (String input) {
return getI18nFromDBName(input, true);
}
public static String getI18nFromDBName (String input, boolean firstUpperCase) {
input = StringUtils.replace(input, UNDERSCORE, ONE_SPACE);
if (firstUpperCase)
input = FormatUtils.firstUpperCaseOnly(input);
else
input = FormatUtils.fullLowerCase(input);
return input;
}
public static String plurializeUppercase(String input) {
return plurialize(input.toLowerCase()).toUpperCase();
}
public static String plurialize(String input) {
if (input!=null) {
String lastChar = getLastChar (input, 1);//StringUtils.substring(input, input.length()-1);
if (lastChar!=null) {
String strippedInput = input.substring(0, input.length()-1);
if (lastChar.equals("y")) {
String last2Char = getLastChar (input, 2);
if ("ay".equals(last2Char) || "uy".equals(last2Char) || "oy".equals(last2Char)|| "ey".equals(last2Char))
return input+"s";
return strippedInput + "ies";
}
if (lastChar.equals("s")) return strippedInput + "ses";
return input + "s";
}
}
return null;
}
public static String singularize (String input) {
if (input!=null) {
String lastChar = getLastChar (input, 1);
if (lastChar!=null) {
if (lastChar.equals("s")) {
// String strippedInput = input.substring(0, input.length()-1);
String last3Char = getLastChar (input, 3);
if ("ies".equals(last3Char))
return getBeforeLastChar(input,3)+"y";
if ("ses".equals(last3Char))
return getBeforeLastChar(input,2);
return getBeforeLastChar(input,1);
}
}
return input;
}
return null;
}
private static String getLastChar(String input, int i) {
if (input!=null && input.length()>=i)
return StringUtils.substring(input, input.length()-i);
return null;
}
private static String getBeforeLastChar(String input, int i) {
if (input!=null && input.length()>=i)
return input.substring(0, input.length()-i);
return null;
}
public static String getI18nFromDBNameStripPrefix (String input) {
if (input==null) return null;
String prefix = StringUtils.substringBefore(input, UNDERSCORE);
if (prefix.equals(input))
return input;
input = StringUtils.removeStart(input, prefix);
input = StringUtils.stripStart(input, UNDERSCORE);
return getI18nFromDBName(input);
}
public static String getI18nFromDBNameStripSufixFromSet (String input, List<String> set) {
if (set!=null) {
String sufix = StringUtils.substringAfterLast(input, UNDERSCORE);
if (!sufix.equals(input))
input = StringUtils.removeEnd(input, sufix);
if (set.contains(input)) {
input = StringUtils.stripStart(input, UNDERSCORE);
return getI18nFromDBName(input);
}
}
return input;
}
public static String getI18nFromDBNameStripSufix (String input, boolean firstUpperCase) {
String sufix = StringUtils.substringAfterLast(input, UNDERSCORE);
if (!sufix.equals(input))
input = StringUtils.removeEnd(input, sufix);
input = StringUtils.stripStart(input, UNDERSCORE);
return getI18nFromDBName(input, firstUpperCase);
}
public static String getI18nFromDBObject (String name) {
return getI18nFromDBObject(name, true);
}
public static String getI18nFromDBObject (String name, boolean firstUpperCase) {
return getI18nFromDBName(name, firstUpperCase);
}
public static String getI18nFromDBObject (Table table) {
String alias = table.getAlias();
// if (table.getName().equals(alias))
// return getI18nFromDBNameStripPrefix(alias);
return getI18nFromDBName(alias);
}
public static String getI18nFromDBObject (Column column) {
return getI18nFromDBObject (column, true);
}
public static String getI18nFromDBObject (Column column, boolean firstUpperCase) {
if (ColumnUtils.isForeignKey(column)){
return getI18nFromDBNameStripSufix(column.getAlias(), firstUpperCase);
}
return getI18nFromDBName(column.getAlias(), firstUpperCase);
}
public static String getSeparator (Template template) {
return getSeparator(template, template.getName());
}
public static String getSeparator (Template template, String i18nTemplateName) {
if (!i18nTemplateName.equals(template.getName()))
template = CommonUtils.getTemplate(template.getTarget(), i18nTemplateName);
return template.getPropertyValue(SEPARATOR_WORD, DEFAULT_SEPARATOR);
}
public static String getPackageName(Package pack) {
return FormatUtils.getJavaName(pack.getAlias());
}
}