org.patientview.radar.web.pages.admin.AdminIssuesPage.java Source code

Java tutorial

Introduction

Here is the source code for org.patientview.radar.web.pages.admin.AdminIssuesPage.java

Source

/*
 * PatientView
 *
 * Copyright (c) Worth Solutions Limited 2004-2013
 *
 * This file is part of PatientView.
 *
 * PatientView is free software: you can redistribute it and/or modify it under the terms of the
 * GNU General Public License as published by the Free Software Foundation, either version 3 of the License,
 * or (at your option) any later version.
 * PatientView is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 * You should have received a copy of the GNU General Public License along with PatientView in a file
 * titled COPYING. If not, see <http://www.gnu.org/licenses/>.
 *
 * @package PatientView
 * @link http://www.patientview.org
 * @author PatientView <info@patientview.org>
 * @copyright Copyright (c) 2004-2013, Worth Solutions Limited
 * @license http://www.gnu.org/licenses/gpl-3.0.html The GNU General Public License V3.0
 */

package org.patientview.radar.web.pages.admin;

import org.apache.wicket.datetime.markup.html.basic.DateLabel;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.patientview.radar.model.Issue;
import org.patientview.radar.model.enums.IssuePriority;
import org.patientview.radar.model.enums.IssueStatus;
import org.patientview.radar.model.enums.IssueType;
import org.patientview.radar.model.filter.IssueFilter;
import org.patientview.radar.service.IssueManager;
import org.patientview.radar.web.components.ClearLink;
import org.patientview.radar.web.components.SearchDateField;
import org.patientview.radar.web.components.SearchDropDownChoice;
import org.patientview.radar.web.components.SearchField;
import org.patientview.radar.web.components.SortLink;
import org.patientview.radar.web.dataproviders.IssuesDataProvider;
import org.patientview.radar.web.panels.RadarAjaxPagingNavigator;

import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class AdminIssuesPage extends AdminsBasePage {

    @SpringBean
    private IssueManager issueManager;

    private static final int RESULTS_PER_PAGE = 10;

    public AdminIssuesPage() {
        final IssuesDataProvider issuesDataProvider = new IssuesDataProvider(issueManager);

        add(new BookmarkablePageLink<AdminIssuesPage>("addNewIssue", AdminIssuePage.class));

        final WebMarkupContainer issuesContainer = new WebMarkupContainer("issuesContainer");
        issuesContainer.setOutputMarkupId(true);
        add(issuesContainer);

        final DataView<Issue> issueList = new DataView<Issue>("issues", issuesDataProvider) {
            @Override
            protected void populateItem(Item<Issue> item) {
                builtDataViewRow(item);
            }
        };
        issueList.setItemsPerPage(RESULTS_PER_PAGE);
        issuesContainer.add(issueList);

        // add paging element
        issuesContainer.add(new RadarAjaxPagingNavigator("navigator", issueList, issuesDataProvider.size()));

        // button to clear all the filter fields for each colum
        final ClearLink clearButton = new ClearLink("clearButton", issuesDataProvider, issueList, issuesContainer);
        add(clearButton);

        // add sort links to the table column headers
        for (Map.Entry<String, String> entry : getSortFields().entrySet()) {
            add(new SortLink(entry.getKey(), entry.getValue(), issuesDataProvider, issueList,
                    Arrays.asList(issuesContainer)));
        }

        // add a search field to the top of each column - these will AND each search
        for (Map.Entry<String, String> entry : getFilterFields().entrySet()) {
            add(new SearchField(entry.getKey(), entry.getValue(), issuesDataProvider, issueList,
                    Arrays.asList(issuesContainer, clearButton)));
        }

        // some of the sort fields are drop downs so add these
        add(new SearchDropDownChoice<IssueType>("searchType", Arrays.asList(IssueType.values()),
                IssueFilter.Field.TYPE.getDatabaseFieldName(), issuesDataProvider, issueList,
                Arrays.asList(issuesContainer, clearButton)));

        add(new SearchDropDownChoice<IssuePriority>("searchPriority", Arrays.asList(IssuePriority.values()),
                IssueFilter.Field.PRIORITY.getDatabaseFieldName(), issuesDataProvider, issueList,
                Arrays.asList(issuesContainer, clearButton)));

        add(new SearchDropDownChoice<IssueStatus>("searchStatus", Arrays.asList(IssueStatus.values()),
                IssueFilter.Field.STATUS.getDatabaseFieldName(), issuesDataProvider, issueList,
                Arrays.asList(issuesContainer, clearButton)));

        add(new SearchDateField("searchDateLogged", IssueFilter.Field.DATE_LOGGED.getDatabaseFieldName(),
                issuesDataProvider, issueList, Arrays.asList(issuesContainer, clearButton)));

        add(new SearchDateField("searchDateResolved", IssueFilter.Field.DATE_RESOLVED.getDatabaseFieldName(),
                issuesDataProvider, issueList, Arrays.asList(issuesContainer, clearButton)));

        add(new SearchDateField("searchUpdated", IssueFilter.Field.UPDATED.getDatabaseFieldName(),
                issuesDataProvider, issueList, Arrays.asList(issuesContainer, clearButton)));
    }

    /**
     * Build a row in the dataview from the object
     * @param item Item<ProfessionalUser>
     */
    private void builtDataViewRow(Item<Issue> item) {
        Issue issue = item.getModelObject();
        item.add(new BookmarkablePageLink<AdminIssuePage>("edit", AdminIssuePage.class,
                AdminIssuePage.getPageParameters(issue)));
        item.add(new Label("id", issue.getId().toString()));
        item.add(new Label("type", issue.getType().getName()));
        item.add(new Label("page", issue.getPage()));
        item.add(DateLabel.forDatePattern("dateLogged", new Model<Date>(issue.getDateLogged()),
                SearchDateField.DATABASE_DATE_PATTERN));
        item.add(DateLabel.forDatePattern("dateResolved", new Model<Date>(issue.getDateLogged()),
                SearchDateField.DATABASE_DATE_PATTERN));
        item.add(new Label("description", issue.getDescription()));
        item.add(new Label("comment", issue.getComments()));
        item.add(new Label("priority", issue.getPriority().getName()));
        item.add(new Label("status", issue.getStatus().getName()));
        item.add(DateLabel.forDatePattern("updated", new Model<Date>(issue.getUpdated()),
                SearchDateField.DATABASE_DATE_PATTERN));
    }

    /**
     * List of columns that can be used to sort the results - will return ID of el to be bound to and the field to sort
     * @return Map<String, IssueFilter.UserField>
     */
    private Map<String, String> getSortFields() {
        return new HashMap<String, String>() {
            {
                put("orderById", IssueFilter.Field.ID.getDatabaseFieldName());
                put("orderByType", IssueFilter.Field.TYPE.getDatabaseFieldName());
                put("orderByPage", IssueFilter.Field.PAGE.getDatabaseFieldName());
                put("orderByDateLogged", IssueFilter.Field.DATE_LOGGED.getDatabaseFieldName());
                put("orderByDateResolved", IssueFilter.Field.DATE_RESOLVED.getDatabaseFieldName());
                put("orderByDescription", IssueFilter.Field.DESC.getDatabaseFieldName());
                put("orderByComment", IssueFilter.Field.COMMENTS.getDatabaseFieldName());
                put("orderByPriority", IssueFilter.Field.PRIORITY.getDatabaseFieldName());
                put("orderByStatus", IssueFilter.Field.STATUS.getDatabaseFieldName());
                put("orderByUpdated", IssueFilter.Field.UPDATED.getDatabaseFieldName());
            }
        };
    }

    /**
     * List of column filters - will return ID of el to be bound to and the field to filter
     * @return Map<String, IssueFilter.UserField>
     */
    private Map<String, String> getFilterFields() {
        return new HashMap<String, String>() {
            {
                put("searchId", IssueFilter.Field.ID.getDatabaseFieldName());
                put("searchPage", IssueFilter.Field.PAGE.getDatabaseFieldName());
                put("searchDescription", IssueFilter.Field.DESC.getDatabaseFieldName());
                put("searchComment", IssueFilter.Field.COMMENTS.getDatabaseFieldName());
            }
        };
    }

}