us.mn.state.health.lims.analyzerresults.action.AnalyzerResultsPaging.java Source code

Java tutorial

Introduction

Here is the source code for us.mn.state.health.lims.analyzerresults.action.AnalyzerResultsPaging.java

Source

/**
 * The contents of this file are subject to the Mozilla Public License
 * Version 1.1 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
 * License for the specific language governing rights and limitations under
 * the License.
 *
 * The Original Code is OpenELIS code.
 *
 * Copyright (C) CIRG, University of Washington, Seattle WA.  All Rights Reserved.
 *
 */
package us.mn.state.health.lims.analyzerresults.action;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.beanutils.PropertyUtils;
import org.apache.struts.action.DynaActionForm;

import us.mn.state.health.lims.analyzerresults.action.beanitems.AnalyzerResultItem;
import us.mn.state.health.lims.common.action.IActionConstants;
import us.mn.state.health.lims.common.paging.IPageDivider;
import us.mn.state.health.lims.common.paging.IPageFlattener;
import us.mn.state.health.lims.common.paging.IPageUpdater;
import us.mn.state.health.lims.common.paging.PagingBean;
import us.mn.state.health.lims.common.paging.PagingUtility;
import us.mn.state.health.lims.common.util.IdValuePair;

public class AnalyzerResultsPaging {

    private PagingUtility<List<AnalyzerResultItem>> paging = new PagingUtility<List<AnalyzerResultItem>>();
    private static TestItemPageHelper pagingHelper = new TestItemPageHelper();

    public void setDatabaseResults(HttpServletRequest request, DynaActionForm dynaForm,
            List<AnalyzerResultItem> tests)
            throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {

        paging.setDatabaseResults(request.getSession(), tests, pagingHelper);

        List<AnalyzerResultItem> resultPage = paging.getPage(1, request.getSession());
        if (resultPage != null) {
            PropertyUtils.setProperty(dynaForm, "resultList", resultPage);
            PropertyUtils.setProperty(dynaForm, "paging",
                    paging.getPagingBeanWithSearchMapping(1, request.getSession()));
        }
    }

    @SuppressWarnings("unchecked")
    public void page(HttpServletRequest request, DynaActionForm dynaForm, String newPage)
            throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {

        request.getSession().setAttribute(IActionConstants.SAVE_DISABLED, IActionConstants.FALSE);
        List<AnalyzerResultItem> clientTests = (List<AnalyzerResultItem>) dynaForm.get("resultList");
        PagingBean bean = (PagingBean) dynaForm.get("paging");

        paging.updatePagedResults(request.getSession(), clientTests, bean, pagingHelper);

        int page = Integer.parseInt(newPage);

        List<AnalyzerResultItem> resultPage = paging.getPage(page, request.getSession());
        if (resultPage != null) {
            PropertyUtils.setProperty(dynaForm, "resultList", resultPage);
            PropertyUtils.setProperty(dynaForm, "paging",
                    paging.getPagingBeanWithSearchMapping(page, request.getSession()));
        }
    }

    @SuppressWarnings("unchecked")
    public void updatePagedResults(HttpServletRequest request, DynaActionForm dynaForm) {
        List<AnalyzerResultItem> clientTests = (List<AnalyzerResultItem>) dynaForm.get("resultList");
        PagingBean bean = (PagingBean) dynaForm.get("paging");

        paging.updatePagedResults(request.getSession(), clientTests, bean, pagingHelper);
    }

    public List<AnalyzerResultItem> getResults(HttpServletRequest request) {
        return paging.getAllResults(request.getSession(), pagingHelper);
    }

    public void setEmptyPageBean(HttpServletRequest request, DynaActionForm dynaForm)
            throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
        PropertyUtils.setProperty(dynaForm, "paging",
                paging.getPagingBeanWithSearchMapping(0, request.getSession()));
    }

    private static class TestItemPageHelper implements IPageDivider<List<AnalyzerResultItem>>,
            IPageUpdater<List<AnalyzerResultItem>>, IPageFlattener<List<AnalyzerResultItem>> {

        public void createPages(List<AnalyzerResultItem> tests, List<List<AnalyzerResultItem>> pagedResults) {
            List<AnalyzerResultItem> page = new ArrayList<AnalyzerResultItem>();

            int sampleGroupingNumber = -1;
            int resultCount = 0;

            for (AnalyzerResultItem item : tests) {
                if (sampleGroupingNumber != -1 && sampleGroupingNumber != item.getSampleGroupingNumber()) {
                    resultCount = 0;
                    sampleGroupingNumber = -1;
                    pagedResults.add(page);
                    page = new ArrayList<AnalyzerResultItem>();
                }
                if (resultCount >= IActionConstants.PAGING_SIZE) {
                    sampleGroupingNumber = item.getSampleGroupingNumber();
                }

                page.add(item);
                resultCount++;
            }

            if (!page.isEmpty() || pagedResults.isEmpty()) {
                pagedResults.add(page);
            }
        }

        public void updateCache(List<AnalyzerResultItem> cacheItems, List<AnalyzerResultItem> clientItems) {
            for (int i = 0; i < clientItems.size(); i++) {
                cacheItems.set(i, clientItems.get(i));
            }

        }

        public List<AnalyzerResultItem> flattenPages(List<List<AnalyzerResultItem>> pages) {

            List<AnalyzerResultItem> allResults = new ArrayList<AnalyzerResultItem>();

            for (List<AnalyzerResultItem> page : pages) {
                for (AnalyzerResultItem item : page) {
                    allResults.add(item);
                }
            }
            return allResults;
        }

        @Override
        public List<IdValuePair> createSearchToPageMapping(List<List<AnalyzerResultItem>> allPages) {
            List<IdValuePair> mappingList = new ArrayList<IdValuePair>();

            int page = 0;
            for (List<AnalyzerResultItem> resultList : allPages) {
                page++;
                String pageString = String.valueOf(page);

                String currentAccession = null;

                for (AnalyzerResultItem resultItem : resultList) {
                    if (!resultItem.getAccessionNumber().equals(currentAccession)) {
                        currentAccession = resultItem.getAccessionNumber();
                        mappingList.add(new IdValuePair(currentAccession, pageString));
                    }
                }

            }

            return mappingList;
        }
    }
}