From 0657b9e5348deb535a3ac604b9355167f6085f3c Mon Sep 17 00:00:00 2001 From: honchar Date: Mon, 13 Mar 2017 13:59:33 +0100 Subject: [PATCH] csv import for Tasks table --- .../web/component/data/column/LinkColumn.java | 13 ++- .../web/page/admin/server/PageTasks.java | 82 ++++++++++++++++--- 2 files changed, 83 insertions(+), 12 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/LinkColumn.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/LinkColumn.java index bc977b231ae..89122377d5b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/LinkColumn.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/LinkColumn.java @@ -16,17 +16,21 @@ package com.evolveum.midpoint.web.component.data.column; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.web.component.util.SelectableBean; import org.apache.wicket.ajax.AjaxRequestTarget; 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.export.IExportableColumn; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; /** * @author lazyman */ -public class LinkColumn extends AbstractColumn { +public class LinkColumn extends AbstractColumn implements IExportableColumn { private static final long serialVersionUID = 1L; private String propertyExpression; @@ -78,5 +82,10 @@ public boolean isEnabled(IModel rowModel) { public void onClick(AjaxRequestTarget target, IModel rowModel) { } - + + @Override + public IModel getDataModel(IModel rowModel) { + return new PropertyModel(rowModel, propertyExpression); + } + } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTasks.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTasks.java index 2e859f2a8ef..a5677bb571e 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTasks.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTasks.java @@ -70,18 +70,24 @@ import org.apache.wicket.MarkupContainer; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; +import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.datetime.markup.html.basic.DateLabel; 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.extensions.markup.html.repeater.data.table.export.AbstractExportableColumn; +import org.apache.wicket.extensions.markup.html.repeater.data.table.export.CSVDataExporter; +import org.apache.wicket.extensions.markup.html.repeater.data.table.export.ExportToolbar; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.EnumChoiceRenderer; import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.link.AbstractLink; +import org.apache.wicket.markup.html.link.ResourceLink; import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.AbstractReadOnlyModel; @@ -89,6 +95,8 @@ import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.request.resource.ResourceStreamResource; +import org.apache.wicket.util.resource.IResourceStream; import org.apache.wicket.util.string.StringValue; import javax.xml.namespace.QName; @@ -252,6 +260,20 @@ public TaskDto createTaskDto(PrismObject task, Task opTask, OperationR protected WebMarkupContainer createHeader(String headerId) { return new SearchFragment(headerId, ID_TABLE_HEADER, PageTasks.this, searchModel); } + + @Override + protected WebMarkupContainer createButtonToolbar(String id) { + String fileName = "TaskType_" + createStringResource("MainObjectListPanel.exportFileName").getString(); + CSVDataExporter csvDataExporter = new CSVDataExporter(); + ResourceStreamResource resource = (new ResourceStreamResource() { + protected IResourceStream getResourceStream() { + return new ExportToolbar.DataExportResourceStreamWriter(csvDataExporter, getTaskTable().getDataTable()); + } + }).setFileName(fileName + "." + csvDataExporter.getFileNameExtension()); + AbstractLink exportDataLink = (new ResourceLink(id, resource)).setBody(csvDataExporter.getDataFormatNameModel()); + exportDataLink.add(new AttributeAppender("class", " btn btn-primary btn-sm")); + return exportDataLink; + } }; taskTable.setOutputMarkupId(true); @@ -456,7 +478,7 @@ public void populateItem(Item> item, String componentId, } }); - columns.add(new AbstractColumn(createStringResource("pageTasks.task.objectRef")) { + columns.add(new AbstractExportableColumn(createStringResource("pageTasks.task.objectRef")) { @Override public void populateItem(Item> item, String componentId, @@ -469,10 +491,16 @@ public Object getObject() { } })); } + + @Override + public IModel getDataModel(IModel rowModel) { + return Model.of(createObjectRef(rowModel)); + } + }); columns.add(createTaskExecutionStatusColumn(this, "pageTasks.task.execution")); columns.add(new PropertyColumn(createStringResource("pageTasks.task.executingAt"), "executingAt")); - columns.add(new AbstractColumn(createStringResource("pageTasks.task.progress")) { + columns.add(new AbstractExportableColumn(createStringResource("pageTasks.task.progress")) { @Override public void populateItem(Item> cellItem, String componentId, final IModel rowModel) { @@ -483,8 +511,13 @@ public Object getObject() { } })); } + + @Override + public IModel getDataModel(IModel rowModel) { + return Model.of(createProgress(rowModel)); + } }); - columns.add(new AbstractColumn(createStringResource("pageTasks.task.currentRunTime")) { + columns.add(new AbstractExportableColumn(createStringResource("pageTasks.task.currentRunTime")) { @Override public void populateItem(final Item> item, final String componentId, @@ -494,13 +527,35 @@ public void populateItem(final Item> item, final String @Override public Date getObject() { - return createCurrentRuntime(rowModel,(DateLabelComponent) item.get(componentId)); + Date date = createCurrentRuntime(rowModel); + TaskDto task = rowModel.getObject(); + if (task.getRawExecutionStatus() == TaskExecutionStatus.CLOSED) { + ((DateLabelComponent) item.get(componentId)).setBefore("closed at "); + } else if (date != null){ + ((DateLabelComponent) item.get(componentId)).setBefore(DurationFormatUtils.formatDurationWords(date.getTime(), true, true)); + } + return date; } }, DateLabelComponent.MEDIUM_MEDIUM_STYLE); item.add(dateLabel); } + + @Override + public IModel getDataModel(IModel rowModel) { + TaskDto task = rowModel.getObject(); + Date date = createCurrentRuntime(rowModel); + String displayValue = ""; + if (date != null) { + if (task.getRawExecutionStatus() == TaskExecutionStatus.CLOSED) { + displayValue = "closed at " + WebComponentUtil.getLocalizedDate(date, DateLabelComponent.LONG_MEDIUM_STYLE); + } else { + displayValue = DurationFormatUtils.formatDurationWords(date.getTime(), true, true); + } + } + return Model.of(displayValue); + } }); - columns.add(new AbstractColumn(createStringResource("pageTasks.task.scheduledToRunAgain")) { + columns.add(new AbstractExportableColumn(createStringResource("pageTasks.task.scheduledToRunAgain")) { @Override public void populateItem(Item> item, String componentId, @@ -513,7 +568,11 @@ public Object getObject() { } })); } - }); + @Override + public IModel getDataModel(IModel rowModel) { + return Model.of(createScheduledToRunAgain(rowModel)); + } + }); columns.add(new IconColumn(createStringResource("pageTasks.task.status")) { @@ -671,13 +730,18 @@ public boolean isEnabled(IModel rowModel) { } public static AbstractColumn createTaskCategoryColumn(final Component component, String label) { - return new AbstractColumn(createStringResourceStatic(component, label)) { + return new AbstractExportableColumn(createStringResourceStatic(component, label)) { @Override public void populateItem(Item> item, String componentId, final IModel rowModel) { item.add(new Label(componentId, WebComponentUtil.createCategoryNameModel(component, new PropertyModel(rowModel, TaskDto.F_CATEGORY)))); } + + @Override + public IModel getDataModel(IModel rowModel) { + return WebComponentUtil.createCategoryNameModel(component, new PropertyModel(rowModel, TaskDto.F_CATEGORY)); + } }; } @@ -789,7 +853,7 @@ private String createProgress(IModel taskModel) { } } - private Date createCurrentRuntime(IModel taskModel, DateLabel dateLabel) { + private Date createCurrentRuntime(IModel taskModel) { TaskDto task = taskModel.getObject(); if (task.getRawExecutionStatus() == TaskExecutionStatus.CLOSED) { @@ -799,7 +863,6 @@ private Date createCurrentRuntime(IModel taskModel, DateLabel dateLabel if (time == null) { return null; } - dateLabel.setBefore("closed at "); return new Date(time); } else { @@ -808,7 +871,6 @@ private Date createCurrentRuntime(IModel taskModel, DateLabel dateLabel return null; } //todo i18n - dateLabel.setBefore(DurationFormatUtils.formatDurationWords(time, true, true)); return null; } }