Package com.ponysdk.ui.server.list2.dataprovider

Source Code of com.ponysdk.ui.server.list2.dataprovider.RemoteDataProvider

package com.ponysdk.ui.server.list2.dataprovider;

import java.util.ArrayList;
import java.util.List;

import com.ponysdk.core.query.Query;
import com.ponysdk.core.query.Query.QueryMode;
import com.ponysdk.core.query.SortingType;
import com.ponysdk.ui.server.list2.FilterListener;
import com.ponysdk.ui.server.list2.HasCriteria;
import com.ponysdk.ui.server.list2.HasPData;
import com.ponysdk.ui.server.list2.Queriable;
import com.ponysdk.ui.server.list2.Resetable;
import com.ponysdk.ui.server.list2.Sortable;
import com.ponysdk.ui.server.list2.Validable;
import com.ponysdk.ui.server.list2.paging.Pager;
import com.ponysdk.ui.server.list2.paging.PagerListener;

public abstract class RemoteDataProvider<T> implements PagerListener, FilterListener {

    protected final Pager<T> pager;
    protected final HasPData<T> hasData;

    protected final List<Sortable> sortableList = new ArrayList<Sortable>();
    protected final List<Resetable> resatableList = new ArrayList<Resetable>();
    protected final List<HasCriteria> hasCriteriaList = new ArrayList<HasCriteria>();
    protected final List<Validable> validableList = new ArrayList<Validable>();

    public RemoteDataProvider(final Pager<T> pager, final HasPData<T> hasData) {
        this.pager = pager;
        this.hasData = hasData;
        this.pager.addListener(this);
    }

    public void registerHasCriteria(final Queriable queriable) {
        if (queriable.asSortable() != null) sortableList.add(queriable.asSortable());
        if (queriable.asResetable() != null) resatableList.add(queriable.asResetable());
        if (queriable.asHasCriteria() != null) hasCriteriaList.add(queriable.asHasCriteria());
        if (queriable.asValidable() != null) validableList.add(queriable.asValidable());
    }

    public List<T> getData() {
        final Query query = buildQuery();
        query.setPageNum(pager.getCurrentPage());
        query.setPageSize(pager.getPageSize());
        return getData(query);
    }

    public List<T> getFullData() {
        final Query query = buildQuery();
        query.setQueryMode(QueryMode.FULL_RESULT);
        return getFullData(query);
    }

    @Override
    public void onPageChange(final int page) {
        pager.setCurrentPage(page);
        hasData.setData(getData());
    }

    @Override
    public void onFilterChange() {

        if (!isValid()) return;

        pager.setCurrentPage(0);
        hasData.setData(getData());
    }

    @Override
    public void onSort(final Sortable aSortable) {
        for (final Sortable sortable : sortableList) {
            if (!sortable.equals(aSortable)) {
                sortable.sort(SortingType.NONE);
            }
        }
        hasData.setData(getData());
    }

    public boolean isValid() {
        boolean valid = true;
        for (final Validable validable : validableList) {
            valid = valid & validable.isValid().isValid();
        }
        return valid;
    }

    public void reset() {
        for (final Resetable resetable : resatableList) {
            resetable.reset();
        }
    }

    public Query buildQuery() {
        final Query query = new Query();
        for (final HasCriteria criteriable : hasCriteriaList) {
            query.addCriteria(criteriable.getCriteria());
        }
        return query;
    }

    protected abstract List<T> getData(Query query);

    protected abstract List<T> getFullData(Query query);

}
TOP

Related Classes of com.ponysdk.ui.server.list2.dataprovider.RemoteDataProvider

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.