All Downloads are FREE. Search and download functionalities are using the official Maven repository.

step.plugins.table.TableExportTask Maven / Gradle / Ivy

The newest version!
package step.plugins.table;

import org.apache.commons.beanutils.PropertyUtils;
import step.controller.services.async.AsyncTask;
import step.controller.services.async.AsyncTaskHandle;
import step.framework.server.Session;
import step.framework.server.tables.service.TableResponse;
import step.framework.server.tables.service.TableService;
import step.resources.Resource;
import step.resources.ResourceManager;
import step.resources.ResourceRevisionContainer;

import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.stream.Stream;

public class TableExportTask implements AsyncTask {

    private static final String END_OF_LINE = "\n";
    private static final String DELIMITER = ";";
    private final TableExportRequest exportRequest;
    private final String tableName;
    private final ResourceManager resourceManager;
    private final step.framework.server.tables.service.TableService tableService;
    private final Session session;

    public TableExportTask(TableService tableService, ResourceManager resourceManager, String tableName, TableExportRequest exportRequest, Session session) {
        this.tableService = tableService;
        this.resourceManager = resourceManager;
        this.tableName = tableName;
        this.exportRequest = exportRequest;
        this.session = session;
    }

    @Override
    public Resource apply(AsyncTaskHandle exportTaskHandle) throws Exception {
        ResourceRevisionContainer resourceContainer = resourceManager.createResourceContainer(ResourceManager.RESOURCE_TYPE_TEMP, "export.csv");
        PrintWriter writer = new PrintWriter(resourceContainer.getOutputStream());

        List fields = exportRequest.getFields();

        // Write headers
        fields.forEach(field -> writer.append(field).append(DELIMITER));
        writer.append(END_OF_LINE);
        try {
            try (Stream results = tableService.export(tableName, exportRequest.getTableRequest(), session)) {
                results.forEach(o -> {
                    // Write row
                    fields.forEach(field -> {
                        Object property;
                        String formattedValue;
                        try {
                            property = PropertyUtils.getProperty(o, field);
                            if (property != null) {
                                formattedValue = property.toString();
                            } else {
                                formattedValue = "";
                            }
                        } catch (NoSuchMethodException e) {
                            formattedValue = "";
                        } catch (IllegalAccessException | InvocationTargetException e) {
                            throw new RuntimeException("Error while writing column " + field, e);
                        }
                        writer.append(formattedValue).append(DELIMITER);
                    });
                    writer.append(END_OF_LINE);
                });
            }
        } finally {
            writer.close();
            resourceContainer.save(null);
        }

        return resourceContainer.getResource();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy