001package springdao.support;
002
003import java.util.ArrayList;
004import java.util.List;
005
006/**
007 *
008 * @author Kent Yeh
009 */
010public class AliasHelper {
011
012    static final List<Integer> reservedWord = new ArrayList<Integer>();
013
014    static {
015        reservedWord.add("abs".hashCode());
016        reservedWord.add("all".hashCode());
017        reservedWord.add("and".hashCode());
018        reservedWord.add("any".hashCode());
019        reservedWord.add("as".hashCode());
020        reservedWord.add("asc".hashCode());
021        reservedWord.add("ascending".hashCode());
022        reservedWord.add("avg".hashCode());
023        reservedWord.add("between".hashCode());
024        reservedWord.add("bit_length".hashCode());
025        reservedWord.add("by".hashCode());
026        reservedWord.add("case".hashCode());
027        reservedWord.add("cast".hashCode());
028        reservedWord.add("coalesce".hashCode());
029        reservedWord.add("concat".hashCode());
030        reservedWord.add("count".hashCode());
031        reservedWord.add("current_date".hashCode());
032        reservedWord.add("current_time".hashCode());
033        reservedWord.add("current_timestamp".hashCode());
034        reservedWord.add("day".hashCode());
035        reservedWord.add("desc".hashCode());
036        reservedWord.add("descending".hashCode());
037        reservedWord.add("distinct".hashCode());
038        reservedWord.add("element".hashCode());
039        reservedWord.add("else".hashCode());
040        reservedWord.add("end".hashCode());
041        reservedWord.add("exclude".hashCode());
042        reservedWord.add("extract".hashCode());
043        reservedWord.add("exists".hashCode());
044        reservedWord.add("from".hashCode());
045        reservedWord.add("group".hashCode());
046        reservedWord.add("having".hashCode());
047        reservedWord.add("hour".hashCode());
048        reservedWord.add("in".hashCode());
049        reservedWord.add("inner".hashCode());
050        reservedWord.add("index".hashCode());
051        reservedWord.add("indices".hashCode());
052        reservedWord.add("into".hashCode());
053        reservedWord.add("imports".hashCode());
054        reservedWord.add("is".hashCode());
055        reservedWord.add("join".hashCode());
056        reservedWord.add("length".hashCode());
057        reservedWord.add("like".hashCode());
058        reservedWord.add("length".hashCode());
059        reservedWord.add("lower".hashCode());
060        reservedWord.add("max".hashCode());
061        reservedWord.add("maxelement".hashCode());
062        reservedWord.add("member".hashCode());
063        reservedWord.add("min".hashCode());
064        reservedWord.add("minindex".hashCode());
065        reservedWord.add("minelement".hashCode());
066        reservedWord.add("minindex".hashCode());
067        reservedWord.add("minute".hashCode());
068        reservedWord.add("mod".hashCode());
069        reservedWord.add("month".hashCode());
070        reservedWord.add("nopt".hashCode());
071        reservedWord.add("not".hashCode());
072        reservedWord.add("null".hashCode());
073        reservedWord.add("nullif".hashCode());
074        reservedWord.add("object".hashCode());
075        reservedWord.add("of".hashCode());
076        reservedWord.add("or".hashCode());
077        reservedWord.add("order".hashCode());
078        reservedWord.add("parameters".hashCode());
079        reservedWord.add("range".hashCode());
080        reservedWord.add("rtrim".hashCode());
081        reservedWord.add("second".hashCode());
082        reservedWord.add("select".hashCode());
083        reservedWord.add("sign".hashCode());
084        reservedWord.add("sin".hashCode());
085        reservedWord.add("size".hashCode());
086        reservedWord.add("some".hashCode());
087        reservedWord.add("sqrt".hashCode());
088        reservedWord.add("str".hashCode());
089        reservedWord.add("substring".hashCode());
090        reservedWord.add("subclasses".hashCode());
091        reservedWord.add("sum".hashCode());
092        reservedWord.add("then".hashCode());
093        reservedWord.add("to".hashCode());
094        reservedWord.add("trim".hashCode());
095        reservedWord.add("trunc".hashCode());
096        reservedWord.add("union".hashCode());
097        reservedWord.add("unique".hashCode());
098        reservedWord.add("values".hashCode());
099        reservedWord.add("variables".hashCode());
100        reservedWord.add("when".hashCode());
101        reservedWord.add("where".hashCode());
102        reservedWord.add("year".hashCode());
103    }
104
105    /**
106     * get Alias Name
107     *
108     * @param clazz
109     * @return aliasName
110     */
111    public static String $a(Class<?> clazz) {
112        String aliasName = clazz.getSimpleName();
113        aliasName = aliasName.substring(0, 1).toLowerCase() + aliasName.substring(1);
114        if (reservedWord.contains(aliasName.toLowerCase().hashCode())) {
115            aliasName = "_" + aliasName;
116        }
117        return aliasName;
118    }
119
120    /**
121     * get entityName + &quot;AS&quot; + aliasName
122     *
123     * @param clazz
124     * @return {@link Class#getName() clazz.getName()} + &quot;AS&quot; +
125     * {@link AliasHelper#$a(java.lang.Class) $a(clazz)}
126     */
127    public static String $ea(Class<?> clazz) {
128        return clazz.getName() + " AS " + $a(clazz);
129    }
130}