/* * 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))); } } }