argos/dmp-backend/queryengine/src/main/java/eu/eudat/query/engine/builder/QueryBuilderImpl.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;
}
}