package jpasearch.repository.query.builder; import javax.persistence.metamodel.PluralAttribute; import javax.persistence.metamodel.SingularAttribute; import jpasearch.repository.query.ResultParameters; /** * @author speralta */ public class ResultBuilder<F, FROM, TO> extends AbstractPathBuilder<Void, F, FROM, TO> { private final Class<TO> to; public ResultBuilder(PluralAttribute<? super F, ?, TO> attribute) { super(null, attribute); this.to = attribute.getBindableJavaType(); } public ResultBuilder(SingularAttribute<? super F, TO> attribute) { super(null, attribute); this.to = attribute.getBindableJavaType(); } private <E> ResultBuilder(ResultBuilder<F, E, FROM> resultBuilder, PluralAttribute<? super FROM, ?, TO> attribute) { super(null, resultBuilder, attribute); this.to = attribute.getBindableJavaType(); } private <E> ResultBuilder(ResultBuilder<F, E, FROM> resultBuilder, SingularAttribute<? super FROM, TO> attribute) { super(null, resultBuilder, attribute); this.to = attribute.getBindableJavaType(); } public <E> ResultBuilder<F, TO, E> to(SingularAttribute<? super TO, E> attribute) { return new ResultBuilder<F, TO, E>(this, attribute); } public <E> ResultBuilder<F, TO, E> to(PluralAttribute<? super TO, ?, E> attribute) { return new ResultBuilder<F, TO, E>(this, attribute); } public ResultParameters<F, TO> build() { return new ResultParameters<>(getPath(), to); } }