package net.sf.minuteProject.utils;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.StringTokenizer;
import java.util.regex.Pattern;
import net.sf.minuteProject.configuration.bean.GeneratorBean;
import net.sf.minuteProject.configuration.bean.model.data.Column;
import net.sf.minuteProject.utils.format.FormatCache;
import net.sf.minuteProject.utils.format.FormatCacheEntry;
import net.sf.minuteProject.utils.java.JavaUtils;
import org.apache.commons.lang.StringUtils;
public class FormatUtils {
public static final String CONVERT_TO_JAVA_NAME = "CONVERT_TO_JAVA_NAME";
public static final String CONVERT_TO_JAVA_VARIABLE_NAME = "CONVERT_TO_JAVA_VARIABLE_NAME";
public static final String CONVERT_TO_JAVA_VARIABLE_NAME_CONVERTING_RESERVED_WORD = "CONVERT_TO_JAVA_VARIABLE_NAME_CONVERTING_RESERVED_WORD";
public static String getJavaName(String name) {
FormatCacheEntry fce = new FormatCacheEntry(name, CONVERT_TO_JAVA_NAME);
String value = FormatCache.getInstance().getCacheEntry(fce);
if (value == null) {
value = performGetJavaName(name);
FormatCache.getInstance().putCacheEntryValue(fce, value);
}
return value;
}
public static String getJavaNameVariable(String name) {
FormatCacheEntry fce = new FormatCacheEntry(name, CONVERT_TO_JAVA_VARIABLE_NAME);
String value = FormatCache.getInstance().getCacheEntry(fce);
if (value == null) {
value = performGetJavaNameVariable(name);
FormatCache.getInstance().putCacheEntryValue(fce, value);
}
return value;
}
public static String getJavaNameVariableConvertReservedWord(String name) {
FormatCacheEntry fce = new FormatCacheEntry(name, CONVERT_TO_JAVA_VARIABLE_NAME_CONVERTING_RESERVED_WORD);
String value = FormatCache.getInstance().getCacheEntry(fce);
if (value == null) {
value = performGetJavaNameVariableConvertReservedWord(name);
FormatCache.getInstance().putCacheEntryValue(fce, value);
}
return value;
}
public static String getUppercaseUnderscore (String name) {
if (name!=null) {
String underscoreName = StringUtils.replace(name, "-", "_");
underscoreName = StringUtils.replace(name, " ", "_");
return underscoreName.toUpperCase();
}
return "";
}
public static String getLowcaseHyphen (String name) {
name = name.toLowerCase();
return StringUtils.replace(name, "_", "-");
}
public static String getDirFromPackage(String packageSt) {
return getDirFromPackage(packageSt, true);
}
public static String getDirFromPackage(String packageSt, boolean toConvert) {
if (!toConvert)
return (packageSt != null) ? packageSt: "";
return (packageSt != null) ? StringUtils.replace(packageSt, ".", "/"): "";
}
public static String getDirToPackage(String packageSt) {
return StringUtils.replace(packageSt, "/", ".");
}
private static String performGetJavaName(String name) {
if (StringUtils.isEmpty(name))
return "JAVA_NAME_RETURNS_NULL";
String underscoreName = StringUtils.replace(name, "-", "_");
underscoreName = StringUtils.replace(name, " ", "_");
return getJavaNameViaCharStrip(underscoreName, "_");
}
private static String getJavaNameViaCharStrip(String name,
String charToStrip) {
StringTokenizer st = new StringTokenizer(name, charToStrip);
StringBuffer sb = new StringBuffer();
while (st.hasMoreTokens()) {
sb.append(firstUpperCaseOnly(st.nextToken()));
}
return sb.toString();
}
private static String performGetJavaNameVariableConvertReservedWord(
String name) {
String value = performGetJavaNameVariable(name);
if (JavaUtils.isReservedWord(name))
value = convertReservedWord(value);
return value;
}
private static String performGetJavaNameVariable(String name) {
if (name == null)
return "ERROR_GET_JAVANAMEVARIABLE_WITH_NULL";
if (name.equals(""))
return name;
String javaname = getJavaName(name);
if (isStandardBean(name))
return firstLowerCase(javaname);
// trick java part
// this is due to have correct getter
// to create a correct getter apply the following rule
// if second letter is a Capital then the first one should also be a
// capital
//
return firstUpperCase(javaname);
}
public static String getJavaNameVariableFirstLetter(String name) {
return firstLowerCase(name);
}
public static String firstUpperCaseOnly(String st) {
if (st == null)
return "INPUT_STRING_IS_NULL";
int len = Math.min (st.length(),1);
return st.substring(0, len).toUpperCase()
+ st.substring(len, st.length()).toLowerCase();
}
public static String fullLowerCase(String st) {
if (st == null)
return "INPUT_STRING_IS_NULL";
return st.substring(0, 1).toLowerCase()
+ st.substring(1, st.length()).toLowerCase();
}
public static String firstLowerCaseOnly(String st) {
if (st == null)
return "INPUT_STRING_IS_NULL";
return st.substring(0, 1).toLowerCase()
+ st.substring(1, st.length());
}
public static String lowerCase(String st) {
return st.toLowerCase();
}
public static String firstLowerCase(String st) {
if (st == null)
return "INPUT_STRING_IS_NULL";
return st.substring(0, 1).toLowerCase() + st.substring(1, st.length());
}
public static String firstUpperCase(String st) {
if (st == null)
return "INPUT_STRING_IS_NULL";
return st.substring(0, 1).toUpperCase() + st.substring(1, st.length());
}
public static String remove_ID_patternFromColumnName(String input) {
input = StringUtils.removeStart(input, "ID_");
input = StringUtils.removeEnd(input, "_ID");
return input;
}
public static String formatToSQLSingleString(String input) {
input = StringUtils.replace(input, " ", "_");
return upperCase(input);
}
public static String upperCase(String st) {
return StringUtils.upperCase(st);
}
private static boolean isStandardBean(String name) {
if (name.indexOf("_") == 1)
return false;
return true;
}
public static String getShortNameFromVerbose(String name) {
name = getEachWordFirstLetterUpper(name, " ");
name = getEachWordFirstLetterUpper(name, "-");
return name;
}
private static String getEachWordFirstLetterUpper(String name, String token) {
StringTokenizer st = new StringTokenizer(name, token);
StringBuffer sb = new StringBuffer();
while (st.hasMoreTokens()) {
String s = st.nextToken();
sb.append(firstUpperCase(s));
}
return sb.toString();
}
public static final String convertToValidJava(String input, String regEx,
String replacement, boolean upperCase) {
input = input.trim();
String res = convertToValidJava(input, regEx, replacement);
if (upperCase)
res = res.toUpperCase();
return res;
}
public static final String convertToValidJava(String input, String regEx,
String replacement) {
String res = input.trim();
Pattern pattern = Pattern.compile(regEx);
java.util.regex.Matcher matcher = pattern.matcher(res);
while (matcher.find()) {
String val = matcher.group();
res = res.replace(val, replacement);
}
return res;
}
public static final String trimExpression(String inputExpression,
String trimmedValue) {
// TODO some validation needed
if (inputExpression.startsWith(trimmedValue)) {
int startIndex = inputExpression.indexOf(trimmedValue);
inputExpression = inputExpression.substring(startIndex
+ trimmedValue.length());
}
if (inputExpression.endsWith(trimmedValue)) {
int lastIndex = inputExpression.lastIndexOf(trimmedValue);
inputExpression = inputExpression.substring(0, lastIndex);
}
return inputExpression;
}
public static final String eliminateMultipleSequenceOfChar(
String inputExpression, char... seq) {
StringBuffer result = new StringBuffer();
char prevChar = 0;
for (int i = 0; i < inputExpression.length(); i++) {
char currentChar = inputExpression.charAt(i);
if (existCharInSequence(currentChar, seq)) {
if (i > 0 && currentChar != prevChar) {
result.append(currentChar);
}
} else {
result.append(currentChar);
}
if (i > 0)
prevChar = currentChar;
}
return result.toString();
}
private static boolean existCharInSequence(char c, char... seq) {
for (int i = 0; i < seq.length; i++) {
if (c == seq[i]) {
return true;
}
}
return false;
}
private static String convertReservedWord(String word) {
return "_" + word;
}
public static String convertAttributeText(String description) {
if (StringUtils.isEmpty(description)) return "";
return StringUtils.replace(description, "\\", "\n");
}
public static boolean isCamelCaseAlias(GeneratorBean bean) {
return true;
// return isCamelCaseAlias(bean.getName());
}
private static boolean isCamelCaseAlias(String name) {
return name.matches("^[A-Z]$");
}
public static String decamelCase(String name) {
StringBuffer sb = new StringBuffer();
String[] split = StringUtils.splitByCharacterTypeCamelCase(name);
for (int i=0; i<split.length;i++) {
sb.append(split[i]);
if (i+1!=split.length)
sb.append("_");
}
return sb.toString();
}
public static String renderCurrentTime() {
return renderTime(new Date());
}
private static String renderTime(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd G 'at' HH:mm:ss z");
return sdf.format(date);
}
}