// Path: src/main/java/com/eharmony/pho/query/criterion/Criterion.java
// public interface Criterion {
// }
// 
// Path: src/main/java/com/eharmony/pho/query/criterion/GroupCriterion.java
// public interface GroupCriterion  extends Criterion{
// }
// 
// Path: src/main/java/com/eharmony/pho/query/criterion/Orderings.java
// public class Orderings {
// 
//     private final List<Ordering> orderings = new ArrayList<Ordering>();
// 
//     public Orderings() {
//     }
// 
//     public Orderings(Ordering... orderings) {
//         this.orderings.addAll(Arrays.asList(orderings));
//     }
// 
//     public void add(Ordering ordering) {
//         orderings.add(ordering);
//     }
// 
//     // Discuss: defensive copy?
//     public List<Ordering> get() {
//         return orderings;
//     }
// 
//     @Override
//     public String toString() {
//         return "Orderings [" + orderings + "]";
//     }
// }
// 
// Path: src/main/java/com/eharmony/pho/query/criterion/projection/Projection.java
// public class Projection implements Criterion, WithAggregateFunction {
//     private final Aggregate function;
//     private final List<String> propertyNames;
// 
//     protected Projection(Aggregate function, String... propertyNames) {
//         this.function = function;
//         this.propertyNames = Arrays.asList(propertyNames);
//     }
// 
//     @Override
//     public Aggregate getAggregate() {
//         return this.function;
//     }
// 
//     public List<String> getPropertyNames() {
//         return this.propertyNames;
//     }
// }


import java.util.List;
import com.eharmony.pho.query.criterion.Criterion;
import com.eharmony.pho.query.criterion.GroupCriterion;
import com.eharmony.pho.query.criterion.Orderings;
import com.eharmony.pho.query.criterion.projection.Projection;
     * (non-Javadoc)
     * 
     * @see com.eharmony.matching.seeking.query.Query#getReturnFields()
     */
    @Override
    public List<String> getReturnFields() {
        return returnFields;
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.eharmony.matching.seeking.query.Query#getCriteria()
     */
    @Override
    public Criterion getCriteria() {
        return criteria;
    }

    @Override
    public Criterion getGroupCriteria() {
        return groupCriterion;
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.eharmony.matching.seeking.query.Query#getOrder()
     */
    @Override
// Path: src/main/java/com/eharmony/pho/query/criterion/Criterion.java
// public interface Criterion {
// }
// 
// Path: src/main/java/com/eharmony/pho/query/criterion/GroupCriterion.java
// public interface GroupCriterion  extends Criterion{
// }
// 
// Path: src/main/java/com/eharmony/pho/query/criterion/Orderings.java
// public class Orderings {
// 
//     private final List<Ordering> orderings = new ArrayList<Ordering>();
// 
//     public Orderings() {
//     }
// 
//     public Orderings(Ordering... orderings) {
//         this.orderings.addAll(Arrays.asList(orderings));
//     }
// 
//     public void add(Ordering ordering) {
//         orderings.add(ordering);
//     }
// 
//     // Discuss: defensive copy?
//     public List<Ordering> get() {
//         return orderings;
//     }
// 
//     @Override
//     public String toString() {
//         return "Orderings [" + orderings + "]";
//     }
// }
// 
// Path: src/main/java/com/eharmony/pho/query/criterion/projection/Projection.java
// public class Projection implements Criterion, WithAggregateFunction {
//     private final Aggregate function;
//     private final List<String> propertyNames;
// 
//     protected Projection(Aggregate function, String... propertyNames) {
//         this.function = function;
//         this.propertyNames = Arrays.asList(propertyNames);
//     }
// 
//     @Override
//     public Aggregate getAggregate() {
//         return this.function;
//     }
// 
//     public List<String> getPropertyNames() {
//         return this.propertyNames;
//     }
// }


// Path: src/main/java/com/eharmony/pho/query/QuerySelectImpl.java
import java.util.List;
import com.eharmony.pho.query.criterion.Criterion;
import com.eharmony.pho.query.criterion.GroupCriterion;
import com.eharmony.pho.query.criterion.Orderings;
import com.eharmony.pho.query.criterion.projection.Projection;

     * (non-Javadoc)
     * 
     * @see com.eharmony.matching.seeking.query.Query#getReturnFields()
     */
    @Override
    public List<String> getReturnFields() {
        return returnFields;
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.eharmony.matching.seeking.query.Query#getCriteria()
     */
    @Override
    public Criterion getCriteria() {
        return criteria;
    }

    @Override
    public Criterion getGroupCriteria() {
        return groupCriterion;
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.eharmony.matching.seeking.query.Query#getOrder()
     */
    @Override
    public Orderings getOrder() {