package org.raidenjpa.query.parser; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.raidenjpa.util.BadSmell; public class FromClause { private List<FromClauseItem> itens = new ArrayList<FromClauseItem>(); @BadSmell("Organize") public void parse(QueryWords words) { words.require("FROM"); do { words.next(); FromClauseItem item = new FromClauseItem(); if (words.current().equalsIgnoreCase("IN")) { words.next(); // IN item.setInFrom(true); String element = words.next(); element = element.replace("(", "").replace(")", ""); item.setInPath(new ArrayList<String>(Arrays.asList(element.split("\\.")))); item.setAliasName(words.next()); } else { item.setClassName(words.next()); item.setAliasName(null); if (words.existAlias()) { item.setAliasName(words.next()); } } itens.add(item); } while (words.hasMoreFromItem()); } public List<FromClauseItem> getItens() { return itens; } public String getClassName(int index) { return itens.get(index).getClassName(); } public String getAliasName(int index) { return itens.get(index).getAliasName(); } public String toString() { return "FromClause [className=" + itens.get(0).getClassName() + ", aliasName=" + itens.get(0).getAliasName() + "]"; } public FromClauseItem getItem(String alias) { for(FromClauseItem item : itens) { if (item.getAliasName().equals(alias)) { return item; } } throw new RuntimeException("There is no from item with alias '" + alias + "'"); } }