net.rrm.ehour.ui.admin.audit.AuditReportDataPanel.java Source code

Java tutorial

Introduction

Here is the source code for net.rrm.ehour.ui.admin.audit.AuditReportDataPanel.java

Source

/*
 * This program 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 2
 * of the License, or (at your option) any later version.
 * 
 * This program 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 this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */

package net.rrm.ehour.ui.admin.audit;

import net.rrm.ehour.config.EhourConfig;
import net.rrm.ehour.data.AuditReportRequest;
import net.rrm.ehour.domain.Audit;
import net.rrm.ehour.report.criteria.ReportCriteria;
import net.rrm.ehour.ui.common.border.GreyBlueRoundedBorder;
import net.rrm.ehour.ui.common.component.HoverPagingNavigator;
import net.rrm.ehour.ui.common.model.DateModel;
import net.rrm.ehour.ui.common.panel.AbstractAjaxPanel;
import net.rrm.ehour.ui.common.report.ExcelReport;
import net.rrm.ehour.ui.common.report.ExcelReportLink;
import net.rrm.ehour.ui.common.session.EhourWebSession;
import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackHeadersToolbar;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.html.IHeaderContributor;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.border.Border;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.OddEvenItem;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.request.resource.CssResourceReference;

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

public class AuditReportDataPanel extends AbstractAjaxPanel<ReportCriteria> implements IHeaderContributor {
    private static final long serialVersionUID = -2380789244030608920L;

    public AuditReportDataPanel(String id, IModel<ReportCriteria> model) {
        super(id, model);

        setOutputMarkupId(true);

        addComponents(model);
    }

    private void addComponents(IModel<ReportCriteria> model) {
        Border greyBorder = new GreyBlueRoundedBorder("border");
        add(greyBorder);

        greyBorder.add(getPagingDataView(model));

        addExcelLink();
    }

    private void addExcelLink() {
        Link<?> excelLink = new ExcelReportLink("excelLink") {
            @Override
            protected ExcelReport createReportBuilder() {
                return new AuditReportExcel(getPanelModel());
            }
        };

        add(excelLink);
    }

    /**
     * @param model
     * @return
     */
    @SuppressWarnings("unchecked")
    private WebMarkupContainer getPagingDataView(IModel<ReportCriteria> model) {
        final WebMarkupContainer dataContainer = new WebMarkupContainer("dataContainer");
        dataContainer.setOutputMarkupId(true);
        final EhourConfig config = EhourWebSession.getEhourConfig();

        List<IColumn<Audit, Date>> columns = new ArrayList<>();
        columns.add(new DateColumn(new ResourceModel("audit.report.column.date"), config));
        columns.add(
                new PropertyColumn<Audit, Date>(new ResourceModel("audit.report.column.lastName"), "userFullName"));
        columns.add(new PropertyColumn<Audit, Date>(new ResourceModel("audit.report.column.action"), "action"));
        columns.add(new PropertyColumn<Audit, Date>(new ResourceModel("audit.report.column.type"),
                "auditActionType.value"));

        AuditReportDataProvider dataProvider = new AuditReportDataProvider(getReportRequest(model));
        DataTable<Audit, Date> table = new DataTable<Audit, Date>("data", columns, dataProvider, 20) {
            @Override
            protected Item<Audit> newRowItem(String id, int index, IModel<Audit> model) {
                return new OddEvenItem<>(id, index, model);
            }
        };

        table.setOutputMarkupId(true);

        dataContainer.add(table);
        table.addTopToolbar(new AjaxFallbackHeadersToolbar(table, dataProvider));

        dataContainer.add(new HoverPagingNavigator("navigator", table));

        return dataContainer;
    }

    private AuditReportRequest getReportRequest(IModel<ReportCriteria> model) {
        ReportCriteria criteria = model.getObject();

        return (AuditReportRequest) criteria.getUserSelectedCriteria();
    }

    @Override
    public void renderHead(IHeaderResponse response) {
        super.renderHead(response);

        response.render(
                CssHeaderItem.forReference(new CssResourceReference(AuditReportDataPanel.class, "auditStyle.css")));
    }

    private static class DateColumn extends AbstractColumn<Audit, Date> {
        private static final long serialVersionUID = -5517077439980001335L;
        private EhourConfig config;

        public DateColumn(IModel<String> displayModel, EhourConfig config) {
            super(displayModel);

            this.config = config;
        }

        public void populateItem(Item<ICellPopulator<Audit>> item, String componentId, IModel<Audit> model) {
            Date date = model.getObject().getDate();
            item.add(new Label(componentId, new DateModel(date, config, DateModel.DATESTYLE_DATE_TIME)));
        }
    }
}