Skip to content

Commit

Permalink
csv import for Tasks table
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Mar 13, 2017
1 parent a8837dc commit 0657b9e
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 12 deletions.
Expand Up @@ -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<T> extends AbstractColumn<T, String> {
public class LinkColumn<T> extends AbstractColumn<T, String> implements IExportableColumn<T, String> {
private static final long serialVersionUID = 1L;

private String propertyExpression;
Expand Down Expand Up @@ -78,5 +82,10 @@ public boolean isEnabled(IModel<T> rowModel) {

public void onClick(AjaxRequestTarget target, IModel<T> rowModel) {
}


@Override
public IModel<String> getDataModel(IModel<T> rowModel) {
return new PropertyModel<String>(rowModel, propertyExpression);
}

}
Expand Up @@ -70,25 +70,33 @@
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;
import org.apache.wicket.model.IModel;
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;
Expand Down Expand Up @@ -252,6 +260,20 @@ public TaskDto createTaskDto(PrismObject<TaskType> 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);

Expand Down Expand Up @@ -456,7 +478,7 @@ public void populateItem(Item<ICellPopulator<TaskDto>> item, String componentId,
}
});

columns.add(new AbstractColumn<TaskDto, String>(createStringResource("pageTasks.task.objectRef")) {
columns.add(new AbstractExportableColumn<TaskDto, String>(createStringResource("pageTasks.task.objectRef")) {

@Override
public void populateItem(Item<ICellPopulator<TaskDto>> item, String componentId,
Expand All @@ -469,10 +491,16 @@ public Object getObject() {
}
}));
}

@Override
public IModel<String> getDataModel(IModel<TaskDto> rowModel) {
return Model.of(createObjectRef(rowModel));
}

});
columns.add(createTaskExecutionStatusColumn(this, "pageTasks.task.execution"));
columns.add(new PropertyColumn<TaskDto, String>(createStringResource("pageTasks.task.executingAt"), "executingAt"));
columns.add(new AbstractColumn<TaskDto, String>(createStringResource("pageTasks.task.progress")) {
columns.add(new AbstractExportableColumn<TaskDto, String>(createStringResource("pageTasks.task.progress")) {

@Override
public void populateItem(Item<ICellPopulator<TaskDto>> cellItem, String componentId, final IModel<TaskDto> rowModel) {
Expand All @@ -483,8 +511,13 @@ public Object getObject() {
}
}));
}

@Override
public IModel<String> getDataModel(IModel<TaskDto> rowModel) {
return Model.of(createProgress(rowModel));
}
});
columns.add(new AbstractColumn<TaskDto, String>(createStringResource("pageTasks.task.currentRunTime")) {
columns.add(new AbstractExportableColumn<TaskDto, String>(createStringResource("pageTasks.task.currentRunTime")) {

@Override
public void populateItem(final Item<ICellPopulator<TaskDto>> item, final String componentId,
Expand All @@ -494,13 +527,35 @@ public void populateItem(final Item<ICellPopulator<TaskDto>> 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<String> getDataModel(IModel<TaskDto> 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<TaskDto, String>(createStringResource("pageTasks.task.scheduledToRunAgain")) {
columns.add(new AbstractExportableColumn<TaskDto, String>(createStringResource("pageTasks.task.scheduledToRunAgain")) {

@Override
public void populateItem(Item<ICellPopulator<TaskDto>> item, String componentId,
Expand All @@ -513,7 +568,11 @@ public Object getObject() {
}
}));
}
});
@Override
public IModel<String> getDataModel(IModel<TaskDto> rowModel) {
return Model.of(createScheduledToRunAgain(rowModel));
}
});

columns.add(new IconColumn<TaskDto>(createStringResource("pageTasks.task.status")) {

Expand Down Expand Up @@ -671,13 +730,18 @@ public boolean isEnabled(IModel<TaskDto> rowModel) {
}

public static AbstractColumn<TaskDto, String> createTaskCategoryColumn(final Component component, String label) {
return new AbstractColumn<TaskDto, String>(createStringResourceStatic(component, label)) {
return new AbstractExportableColumn<TaskDto, String>(createStringResourceStatic(component, label)) {

@Override
public void populateItem(Item<ICellPopulator<TaskDto>> item, String componentId,
final IModel<TaskDto> rowModel) {
item.add(new Label(componentId, WebComponentUtil.createCategoryNameModel(component, new PropertyModel<String>(rowModel, TaskDto.F_CATEGORY))));
}

@Override
public IModel<String> getDataModel(IModel<TaskDto> rowModel) {
return WebComponentUtil.createCategoryNameModel(component, new PropertyModel<String>(rowModel, TaskDto.F_CATEGORY));
}
};
}

Expand Down Expand Up @@ -789,7 +853,7 @@ private String createProgress(IModel<TaskDto> taskModel) {
}
}

private Date createCurrentRuntime(IModel<TaskDto> taskModel, DateLabel dateLabel) {
private Date createCurrentRuntime(IModel<TaskDto> taskModel) {
TaskDto task = taskModel.getObject();

if (task.getRawExecutionStatus() == TaskExecutionStatus.CLOSED) {
Expand All @@ -799,7 +863,6 @@ private Date createCurrentRuntime(IModel<TaskDto> taskModel, DateLabel dateLabel
if (time == null) {
return null;
}
dateLabel.setBefore("closed at ");
return new Date(time);

} else {
Expand All @@ -808,7 +871,6 @@ private Date createCurrentRuntime(IModel<TaskDto> taskModel, DateLabel dateLabel
return null;
}
//todo i18n
dateLabel.setBefore(DurationFormatUtils.formatDurationWords(time, true, true));
return null;
}
}
Expand Down

0 comments on commit 0657b9e

Please sign in to comment.