Package com.balancedpayments.core

Source Code of com.balancedpayments.core.ResourceQuery

package com.balancedpayments.core;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import org.apache.commons.lang3.StringUtils;

import com.balancedpayments.errors.HTTPError;
import com.balancedpayments.errors.MultipleResultsFound;
import com.balancedpayments.errors.NoResultsFound;

public class ResourceQuery<T> extends ResourcePagination<T> {

    protected static SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");

    public ResourceQuery(Class<T> cls, String uri) {
        super(cls, uri);
    }

    public T first() throws HTTPError {
        Integer limit = getLimit();
        setLimit(1);
        ArrayList<T> items = all();
        setLimit(limit);
        if (items.size() == 0)
            return null;
        return items.get(0);
    }

    public T one() throws NoResultsFound, MultipleResultsFound, HTTPError {
        Integer limit = getLimit();
        setLimit(2);
        ArrayList<T> items = all();
        setLimit(limit);
        if (items.size() == 0)
            throw new NoResultsFound();
        if (items.size() > 1)
            throw new MultipleResultsFound();
        return items.get(0);
    }

    // filtering

    public ResourceQuery<T> filter(String field, String op, String value) {
        String name = String.format("%s[%s]", field, op);
        uri_builder.addParameter(name, value);
        return this;
    }

    public ResourceQuery<T> filter(String field, String op, String[] values) {
        String name = String.format("%s[%s]", field, op);
        String value = StringUtils.join(",", values);
        uri_builder.addParameter(name, value);
        return this;
    }

    public ResourceQuery<T> filter(String field, String value) {
        uri_builder.addParameter(field, value);
        return this;
    }

    public ResourceQuery<T> filter(String field, String[] values) {
        String value = StringUtils.join(",", values);
        uri_builder.addParameter(field, value);
        return this;
    }

    public ResourceQuery<T> filter(String field, String op, Date value) {
        return this.filter(field, op, dateTimeFormat.format(value));
    }

    public ResourceQuery<T> filter(String field, String op, Date[] values) {
        String[] transformed = new String[values.length];
        for (int i = 0; i != values.length; i++)
            transformed[i] = dateTimeFormat.format(values[i]);
        return this.filter(field, op, transformed);
    }

    public ResourceQuery<T> filter(String field, Date value) {
        return this.filter(field, dateTimeFormat.format(value));
    }

    public ResourceQuery<T> filter(String field, Date[] values) {
        String[] transformed = new String[values.length];
        for (int i = 0; i != values.length; i++)
            transformed[i] = dateTimeFormat.format(values[i]);
        return this.filter(field, transformed);
    }

    public ResourceQuery<T> filter(String field, String op, Object value) {
        return this.filter(field, op, String.valueOf(value));
    }

    public ResourceQuery<T> filter(String field, String op, Object[] values) {
        String[] transformed = new String[values.length];
        for (int i = 0; i != values.length; i++)
            transformed[i] = String.valueOf(values[i]);
        return this.filter(field, op, transformed);
    }

    public ResourceQuery<T> filter(String field, Object value) {
        return this.filter(field, String.valueOf(value));
    }

    public ResourceQuery<T> filter(String field, Object[] values) {
        String[] transformed = new String[values.length];
        for (int i = 0; i != values.length; i++)
            transformed[i] = String.valueOf(values[i]);
        return this.filter(field, transformed);
    }

    // sorting

    public ResourceQuery<T> order_by(String field) {
        uri_builder.addParameter("sort", field);
        return this;
    }

    public ResourceQuery<T> order_by(String field, boolean ascending) {
        String value = String.format("%s,%s", field, ascending ? "asc" : "desc");
        uri_builder.addParameter("sort", value);
        return this;
    }
}
TOP

Related Classes of com.balancedpayments.core.ResourceQuery

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.