All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.commercetools.sunrise.search.pagination.AbstractPaginationControllerComponent Maven / Gradle / Ivy

The newest version!
package com.commercetools.sunrise.search.pagination;

import com.commercetools.sunrise.framework.components.controllers.ControllerComponent;
import com.commercetools.sunrise.framework.hooks.application.PageDataReadyHook;
import com.commercetools.sunrise.framework.viewmodels.PageData;
import com.commercetools.sunrise.search.pagination.viewmodels.AbstractEntriesPerPageSelectorViewModelFactory;
import com.commercetools.sunrise.search.pagination.viewmodels.AbstractPaginationViewModelFactory;
import com.commercetools.sunrise.search.pagination.viewmodels.WithPaginationViewModel;
import io.sphere.sdk.models.Base;
import io.sphere.sdk.queries.PagedResult;
import play.mvc.Http;

import javax.annotation.Nullable;

public abstract class AbstractPaginationControllerComponent extends Base implements ControllerComponent, PageDataReadyHook {

    private final PaginationSettings paginationSettings;
    private final EntriesPerPageFormSettings entriesPerPageFormSettings;

    private final AbstractPaginationViewModelFactory paginationViewModelFactory;
    private final AbstractEntriesPerPageSelectorViewModelFactory entriesPerPageSelectorViewModelFactory;

    protected AbstractPaginationControllerComponent(final PaginationSettings paginationSettings,
                                                    final EntriesPerPageFormSettings entriesPerPageFormSettings,
                                                    final AbstractPaginationViewModelFactory paginationViewModelFactory,
                                                    final AbstractEntriesPerPageSelectorViewModelFactory entriesPerPageSelectorViewModelFactory) {
        this.paginationSettings = paginationSettings;
        this.entriesPerPageFormSettings = entriesPerPageFormSettings;
        this.paginationViewModelFactory = paginationViewModelFactory;
        this.entriesPerPageSelectorViewModelFactory = entriesPerPageSelectorViewModelFactory;
    }

    protected final PaginationSettings getPaginationSettings() {
        return paginationSettings;
    }

    protected final EntriesPerPageFormSettings getEntriesPerPageSettings() {
        return entriesPerPageFormSettings;
    }

    @Nullable
    protected abstract PagedResult getPagedResult();

    @Override
    public void onPageDataReady(final PageData pageData) {
        final PagedResult pagedResult = getPagedResult();
        if (pagedResult != null && pageData.getContent() instanceof WithPaginationViewModel) {
            final WithPaginationViewModel content = (WithPaginationViewModel) pageData.getContent();
            final Long currentPage = paginationSettings.getSelectedValueOrDefault(Http.Context.current());
            content.setPagination(paginationViewModelFactory.create(pagedResult, currentPage));
            content.setDisplaySelector(entriesPerPageSelectorViewModelFactory.create(pagedResult));
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy