package org.sculptor.framework.accessimpl.jpa; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; /** * Holds the expressions of the query * * @author Oliver Ringel * */ public class QueryExpressions<T> { private List<String> selections = new ArrayList<String>(); private List<String> groups = new ArrayList<String>(); private List<String> orders = new ArrayList<String>(); private List<QueryPropertyRestriction> restrictions = new ArrayList<QueryPropertyRestriction>(); private Map<String, Object> parameters = new HashMap<String, Object>(); private Class<T> type = null; public QueryExpressions() { } public QueryExpressions(Class<T> type) { this.type = type; } public List<String> getSelections() { return selections; } public void setSelections(List<String> expressions) { this.selections = expressions; } public void addSelections(String expressions) { String[] exp = expressions.split(","); for (int i = 0; i < exp.length; i++) { this.selections.add(exp[i].trim()); } } public void addSelections(String... expressions) { for (int i = 0; i < expressions.length; i++) { this.selections.add(expressions[i].trim()); } } /** * Tries to select all fields from a class with same name and type declared in entity * * @param selectionType */ // TODO: support for references and collections public void addSelections(Class<?> selectionType) { List<Field> fields = JpaHelper.listFields(selectionType); for (Field field : fields) { if (field.getName().equals("serialVersionUID")) continue; if (type != null && JpaHelper.findField(type, field.getName()) != null) { if (JpaHelper.findField(type, field.getName()).getType().equals(field.getType())) { this.selections.add(field.getName()); } } } } public void addSelection(String selection) { this.selections.add(selection); } public boolean hasSelections() { if (selections != null && !selections.isEmpty()) { return true; } return false; } public List<String> getGroups() { return groups; } public void setGroups(List<String> groups) { this.groups = groups; } public void addGroups(String groups) { String[] grp = groups.split(","); for (int i = 0; i < grp.length; i++) { this.groups.add(grp[i].trim()); } } public void addGroups(String... groups) { for (int i = 0; i < groups.length; i++) { this.groups.add(groups[i].trim()); } } public void addGroup(String selection) { this.groups.add(selection); } public boolean hasGroups() { if (groups != null && !groups.isEmpty()) { return true; } return false; } public List<String> getOrders() { return orders; } public String getOrdersAsString() { return JpaHelper.toSeparatedString(orders, ","); } public void setOrders(List<String> orders) { this.orders = orders; } public void addOrders(String orders) { String[] ord = orders.split(","); for (int i = 0; i < ord.length; i++) { this.orders.add(ord[i].trim()); } } public void addOrders(String... orders) { for (int i = 0; i < orders.length; i++) { this.orders.add(orders[i].trim()); } } public void addOrder(String selection) { this.orders.add(selection); } public boolean hasOrders() { if (orders != null && !orders.isEmpty()) { return true; } return false; } public List<QueryPropertyRestriction> getRestrictions() { return restrictions; } public void setRestrictions(List<QueryPropertyRestriction> restrictions) { this.restrictions = restrictions; } public void addRestrictions(Map<String, Object> restrictions) { for (Entry<String, Object> restriction : restrictions.entrySet()) { this.restrictions.add( new QueryPropertyRestriction(restriction.getKey(), restriction.getValue())); } } public void addRestriction(String property, Object value) { this.restrictions.add( new QueryPropertyRestriction(property, value)); } public void addRestriction(String property, QueryPropertyRestriction.Operator operator, Object value) { this.restrictions.add( new QueryPropertyRestriction(property, operator, value)); } public Map<String, Object> getParameters() { return parameters; } public void setParameters(Map<String, Object> parameters) { this.parameters = parameters; } public void addParameter(String parameter, Object value) { parameters.put(parameter, value); } }