/******************************************************************************* * Copyright (c) 2010 Robert "Unlogic" Olofsson (unlogic@unlogic.se). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/lgpl-3.0-standalone.html ******************************************************************************/ package se.unlogic.standardutils.dao; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * This class represents a SQL query and is used together with a AnnotatedDAO typed with a matching type.<p> * * A high level abstracts away all and also verifies that the query parameters and order by criterias are of the correct type to avoid SQL exceptions.<p> * * @param <T> The type of bean this query is supposed to return * * @author Robert "Unlogic" Olofsson (unlogic@unlogic.se) */ public class HighLevelQuery<T> extends RelationQuery{ private List<QueryParameter<T,?>> parameters; private List<OrderByCriteria<T>> orderByCriterias; public HighLevelQuery() {} public HighLevelQuery(List<QueryParameter<T, ?>> parameters, List<OrderByCriteria<T>> orderByCriterias) { super(); this.parameters = parameters; this.orderByCriterias = orderByCriterias; } public HighLevelQuery(Field... relations) { this.addRelations(relations); } public HighLevelQuery(QueryParameter<T, ?> parameter, Field... relations) { this.addParameter(parameter); this.addRelations(relations); } public HighLevelQuery(QueryParameter<T, ?>... queryParameters) { this.addParameter(queryParameters); } public void setParameters(List<QueryParameter<T,?>> parameters) { this.parameters = parameters; } public synchronized void addParameter(QueryParameter<T,?> parameter){ if(this.parameters == null){ this.parameters = new ArrayList<QueryParameter<T,?>>(); } this.parameters.add(parameter); } public synchronized void addParameter(QueryParameter<T,?>... parameters){ if(this.parameters == null){ this.parameters = new ArrayList<QueryParameter<T,?>>(); } this.parameters.addAll(Arrays.asList(parameters)); } public List<OrderByCriteria<T>> getOrderByCriterias() { return orderByCriterias; } public void setOrderByCriterias(List<OrderByCriteria<T>> orderByCriterias) { this.orderByCriterias = orderByCriterias; } public List<QueryParameter<T, ?>> getParameters() { return parameters; } public synchronized void addOrderByCriteria(OrderByCriteria<T> criteria){ if(this.orderByCriterias == null){ this.orderByCriterias = new ArrayList<OrderByCriteria<T>>(); } this.orderByCriterias.add(criteria); } public synchronized void addOrderByCriteria(OrderByCriteria<T>... criterias){ if(this.orderByCriterias == null){ this.orderByCriterias = new ArrayList<OrderByCriteria<T>>(); } this.orderByCriterias.addAll(Arrays.asList(criterias)); } }