/* * Copyright (c) 2010 Mysema Ltd. * All rights reserved. * */ package com.mysema.query.collections; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.collections15.IteratorUtils; import com.mysema.commons.lang.CloseableIterator; import com.mysema.commons.lang.IteratorAdapter; import com.mysema.query.JoinType; import com.mysema.query.QueryException; import com.mysema.query.QueryMetadata; import com.mysema.query.QueryModifiers; import com.mysema.query.SearchResults; import com.mysema.query.support.ProjectableQuery; import com.mysema.query.support.QueryMixin; import com.mysema.query.types.Expr; import com.mysema.query.types.Ops; import com.mysema.query.types.Path; import com.mysema.query.types.expr.EArrayConstructor; import com.mysema.query.types.expr.OSimple; /** * AbstractColQuery provides a base class for Collection query implementations. * Extend it like this * *
* public class MyType extends AbstractColQuery<MyType>{
* ...
* }
*
*
* @see ColQuery
*
* @author tiwe
* @version $Id$
*/
public abstract class AbstractColQuery> extends ProjectableQuery{ private final ExprEvaluatorFactory evaluatorFactory; private final Map, Iterable>> iterables = new HashMap , Iterable>>(); private final IteratorFactory iteratorFactory; @SuppressWarnings("unchecked") public AbstractColQuery(QueryMetadata metadata, ExprEvaluatorFactory evaluatorFactory) { super(new QueryMixin (metadata)); this.queryMixin.setSelf((Q) this); this.evaluatorFactory = evaluatorFactory; this.iteratorFactory = new IteratorFactory(evaluatorFactory); } @Override public long count() { try { Iterator> iterator = createIterator(true); long count = 0l; while (iterator.hasNext()) { iterator.next(); count++; } return count; } catch (Exception e) { throw new QueryException(e.getMessage(), e); }finally{ reset(); } } private