51 lines
1.7 KiB
Java
51 lines
1.7 KiB
Java
package eu.eudat.query.engine.builder;
|
|
|
|
import eu.eudat.query.engine.expressions.ComparisonExpression;
|
|
import eu.eudat.query.engine.expressions.Expression;
|
|
import eu.eudat.query.engine.predicates.Predicate;
|
|
|
|
import java.lang.annotation.Annotation;
|
|
import java.util.Arrays;
|
|
import java.util.LinkedList;
|
|
import java.util.List;
|
|
import java.util.Optional;
|
|
|
|
/**
|
|
* Created by ikalyvas on 7/5/2018.
|
|
*/
|
|
public class QueryBuilderImpl<T> implements QueryBuilder<T> {
|
|
|
|
private List<Expression> expressions = new LinkedList<>();
|
|
private Class<T> tClass;
|
|
|
|
public QueryBuilderImpl(Class<T> tClass) {
|
|
this.tClass = tClass;
|
|
}
|
|
|
|
@Override
|
|
public <P extends Predicate> Expression where(P wherePredicate) {
|
|
ComparisonExpression comparisonExpression = new ComparisonExpression();
|
|
Expression expression = wherePredicate.apply(comparisonExpression);
|
|
this.expressions.add(expression);
|
|
return expression;
|
|
}
|
|
|
|
@Override
|
|
public List<T> toList() {
|
|
String query = "Select * from ";
|
|
Optional<Annotation> optionalAnnotation = Arrays.stream(this.tClass.getAnnotations())
|
|
.filter(x-> x.annotationType().equals(javax.persistence.Table.class))
|
|
.findFirst();
|
|
|
|
javax.persistence.Table annotation = optionalAnnotation.isPresent() ? (javax.persistence.Table)optionalAnnotation.get() : null;
|
|
query += annotation.name()+" ";
|
|
for (Expression expression : expressions) {
|
|
if(expressions.indexOf(expression) > 0) query+= " and ";
|
|
else query += " where ";
|
|
query += expression.evaluate();
|
|
}
|
|
System.out.println(query);
|
|
return null;
|
|
}
|
|
}
|