package net.csdn.jpa.hql; import java.util.*; import static net.csdn.common.collections.WowCollections.join; /** * User: WilliamZhu * Date: 12-7-23 * Time: 下午3:26 */ public class WowSelectParser { public static final String HQL_SELECT_SEPARATORS = WowWhereParser.HQL_SEPARATORS; private Set columns = new HashSet<String>(); private String alias = ""; private List<String> selectConditions = new ArrayList<String>(); public WowSelectParser(Set columns, String alias) { this.columns = columns; this.alias = alias; } public void parse(String wheres) { StringTokenizer tokens = new StringTokenizer(wheres, HQL_SELECT_SEPARATORS, true); while (tokens.hasMoreElements()) { String token = tokens.nextToken(); selectConditions.add(this.token(token)); } } public String toHql() { return join(selectConditions); } //private String private String token(String token) { String prefixName = root(token); if (columns.contains(prefixName)) { if (prefixName.equals(alias)) { return token; } else { return alias + "." + token; } } return token; } public static String root(String qualifiedName) { int loc = qualifiedName.indexOf("."); return (loc < 0) ? qualifiedName : qualifiedName.substring(0, loc); } }