package org.infinispan.objectfilter.test; import java.util.List; import java.util.Map; import org.infinispan.objectfilter.impl.logging.Log; import org.infinispan.protostream.SerializationContext; import org.infinispan.query.dsl.Query; import org.infinispan.query.dsl.QueryBuilder; import org.infinispan.query.dsl.QueryFactory; import org.infinispan.query.dsl.impl.BaseQuery; import org.infinispan.query.dsl.impl.BaseQueryBuilder; import org.infinispan.query.dsl.impl.BaseQueryFactory; import org.infinispan.query.dsl.impl.QueryStringCreator; import org.jboss.logging.Logger; /** * @author anistor@redhat.com * @since 7.2 */ final class FilterQueryFactory extends BaseQueryFactory { private final SerializationContext serializationContext; FilterQueryFactory(SerializationContext serializationContext) { this.serializationContext = serializationContext; } FilterQueryFactory() { this(null); } @Override public Query create(String queryString) { return new FilterQuery(this, queryString, null, null, -1, -1); } @Override public QueryBuilder from(Class<?> entityType) { if (serializationContext != null) { serializationContext.getMarshaller(entityType); } return new FilterQueryBuilder(this, entityType.getName()); } @Override public QueryBuilder from(String entityType) { if (serializationContext != null) { serializationContext.getMarshaller(entityType); } return new FilterQueryBuilder(this, entityType); } private static final class FilterQueryBuilder extends BaseQueryBuilder { private static final Log log = Logger.getMessageLogger(Log.class, FilterQueryBuilder.class.getName()); FilterQueryBuilder(FilterQueryFactory queryFactory, String rootType) { super(queryFactory, rootType); } @Override public Query build() { QueryStringCreator generator = new QueryStringCreator(); String queryString = accept(generator); if (log.isTraceEnabled()) { log.tracef("Query string : %s", queryString); } return new FilterQuery(queryFactory, queryString, generator.getNamedParameters(), getProjectionPaths(), startOffset, maxResults); } } private static final class FilterQuery extends BaseQuery { FilterQuery(QueryFactory queryFactory, String queryString, Map<String, Object> namedParameters, String[] projection, long startOffset, int maxResults) { super(queryFactory, queryString, namedParameters, projection, startOffset, maxResults); } @Override public void resetQuery() { } // TODO [anistor] need to rethink the dsl Query/QueryBuilder interfaces to accommodate the filtering scenario ... @Override public <T> List<T> list() { throw new UnsupportedOperationException(); } @Override public int getResultSize() { throw new UnsupportedOperationException(); } } }