ch.unibas.fittingwizard.application.workflows.ExportFitWorkflow.java Source code

Java tutorial

Introduction

Here is the source code for ch.unibas.fittingwizard.application.workflows.ExportFitWorkflow.java

Source

/*
 * Copyright (c) 2015, Florent Hedin, Markus Meuwly, and the University of Basel
 * All rights reserved.
 *
 * The 3-clause BSD license is applied to this software.
 * see LICENSE.txt
 *
 */
package ch.unibas.fittingwizard.application.workflows;

import ch.unibas.fittingwizard.application.fitting.Fit;
import ch.unibas.fittingwizard.application.molecule.MoleculeId;
import ch.unibas.fittingwizard.application.scripts.export.ExportScriptInput;
import ch.unibas.fittingwizard.application.scripts.export.ExportScriptOutput;
import ch.unibas.fittingwizard.application.scripts.export.IExportScript;
import ch.unibas.fittingwizard.application.workflows.base.Workflow;
import ch.unibas.fittingwizard.application.workflows.base.WorkflowContext;
import ch.unibas.fittingwizard.infrastructure.RealFitScript;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.log4j.Logger;

/**
 * User: mhelmer Date: 13.12.13 Time: 15:39
 */
public class ExportFitWorkflow extends Workflow<ExportFitInput, Void> {

    private static final Logger logger = Logger.getLogger(ExportFitWorkflow.class);

    private final IExportScript exportScript;
    private final File sessionDir;

    public ExportFitWorkflow(IExportScript exportScript, File sessionDir) {
        this.exportScript = exportScript;
        this.sessionDir = sessionDir;
    }

    /**
     *
     * @param input
     * @return
     */
    @Override
    public Void execute(WorkflowContext<ExportFitInput> input) {
        logger.info("Executing export workflow.");
        Fit fit = input.getParameter().getFit();
        File destination = input.getParameter().getDestination();

        if (destination == null) {
            destination = getDefaultExportDir();
            logger.info("No destination passed. Using default destination: "
                    + FilenameUtils.normalize(destination.getAbsolutePath()));
        }
        List<File> exportedFiles = new ArrayList<>();
        for (MoleculeId moleculeId : fit.getAllMoleculeIds()) {
            ExportScriptOutput output = exportScript.execute(new ExportScriptInput(fit.getId(), moleculeId));
            exportedFiles.add(output.getExportFile());
        }
        copyToDestinationIfNecessary(exportedFiles, destination);
        return null;
    }

    public List<File> execute(WorkflowContext<ExportFitInput> input, boolean charmm_export) {
        logger.info("Executing export workflow with return of List<File> for CHARMM");
        Fit fit = input.getParameter().getFit();
        File destination = input.getParameter().getDestination();

        if (destination == null) {
            destination = getDefaultExportDir();
            logger.info("No destination passed. Using default destination: "
                    + FilenameUtils.normalize(destination.getAbsolutePath()));
        }
        List<File> exportedFiles = new ArrayList<>();
        for (MoleculeId moleculeId : fit.getAllMoleculeIds()) {
            ExportScriptOutput output = exportScript.execute(new ExportScriptInput(fit.getId(), moleculeId));
            exportedFiles.add(output.getExportFile());
        }
        copyToDestinationIfNecessary(exportedFiles, destination);

        return exportedFiles;
    }

    private void copyToDestinationIfNecessary(List<File> exportedFiles, File destination) {
        destination.mkdir();
        logger.info("copyToDestinationIfNecessary");
        for (File exported : exportedFiles) {
            boolean alreadyInDestination = FilenameUtils
                    .equalsNormalized(exported.getParentFile().getAbsolutePath(), destination.getAbsolutePath());
            if (!alreadyInDestination) {
                try {
                    FileUtils.copyFileToDirectory(exported, destination);
                } catch (IOException e) {
                    throw new RuntimeException(
                            "Could not copy file to destination " + destination.getAbsolutePath(), e);
                }
                if (!exported.delete()) {
                    logger.error("Exported file was not deleted.");
                }
            } else {
                logger.info("Skipping copying to destination, since export file is already in destination.");
            }
        }
    }

    public File getDefaultExportDir() {
        return new File(new File(sessionDir, RealFitScript.OutputDirName), "export");
    }
}