/*
* Copyright (c) [2011-2016] "Pivotal Software, Inc." / "Neo Technology" / "Graph Aware Ltd."
*
* This product is licensed to you under the Apache License, Version 2.0 (the "License").
* You may not use this product except in compliance with the License.
*
* This product may include a number of subcomponents with
* separate copyright notices and license terms. Your use of the source
* code for these subcomponents is subject to the terms and
* conditions of the subcomponent's license, as noted in the LICENSE file.
*
*/
package org.springframework.data.neo4j.repository.query.derived;
import org.neo4j.ogm.cypher.BooleanOperator;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.query.parser.AbstractQueryCreator;
import org.springframework.data.repository.query.parser.Part;
import org.springframework.data.repository.query.parser.PartTree;
import java.util.Iterator;
/**
* An {@link AbstractQueryCreator} that builds a graph query.
*
* @author Luanne Misquitta
*/
public class DerivedQueryCreator extends AbstractQueryCreator<DerivedQueryDefinition, DerivedQueryBuilder> {
private final Class<?> entityType;
public DerivedQueryCreator(PartTree tree, Class<?> entityType) {
super(tree);
this.entityType = entityType;
}
@Override
protected DerivedQueryBuilder create(Part part, Iterator<Object> iterator) {
DerivedQueryBuilder queryBuilder = new DerivedQueryBuilder(entityType, part);
queryBuilder.addPart(part, BooleanOperator.NONE);
return queryBuilder;
}
@Override
protected DerivedQueryBuilder and(Part part, DerivedQueryBuilder base, Iterator<Object> iterator) {
base.addPart(part, BooleanOperator.AND);
return base;
}
@Override
protected DerivedQueryBuilder or(DerivedQueryBuilder base, DerivedQueryBuilder criteria) {
base.addPart(criteria, BooleanOperator.OR);
return base;
}
@Override
protected DerivedQueryDefinition complete(DerivedQueryBuilder builder, Sort sort) {
return builder.buildQuery();
}
}