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

com.github.redsolo.vcm.commands.ExportFilesCommand Maven / Gradle / Ivy

package com.github.redsolo.vcm.commands;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
import java.util.List;

import net.lingala.zip4j.exception.ZipException;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;

import com.beust.jcommander.Parameter;
import com.beust.jcommander.Parameters;
import com.github.redsolo.vcm.Model;
import com.github.redsolo.vcm.ModelResource;
import com.github.redsolo.vcm.ModelResourceParser;
import com.github.redsolo.vcm.ModelResourceWriter;

@Parameters(commandDescription = "Export files from VCM")
public class ExportFilesCommand implements Command {
    private static Logger log = Logger.getLogger(ExportFilesCommand.class);

    private ModelResourceParser parser = new ModelResourceParser();
    private ModelResourceWriter writer = new ModelResourceWriter();

    @Parameter(description = "prefix to file name", names = { "--prefix" }) 
    private String prefixToFilename = "";
    
    @Parameter(description = "indent resource files (file needs to be text and a resource)", names = { "-i", "--indent" }) 
    private boolean indentResource;

    @Parameter(description = "vcm_file [files...]", required=true, variableArity=true)
    private List filenames;

    @Parameter(description = "output folder", names = { "-o", "--output" }) 
    private String outputFolder = System.getProperty("user.dir");

    @Override
    public String getName() {
        return "export";
    }

    @Override
    public int execute(MainConfiguration mainConfiguration) {
        try {
            Model model = new Model(filenames.get(0));          
            log.debug(String.format("Target model '%s'", model.getFile()));
            for (int i = 1; i < filenames.size(); i++) {
                
                File outputFile = new File(outputFolder, String.format("%s%s", prefixToFilename, filenames.get(i)));
                InputStream input = null;
                OutputStream output = null;
                try {

                    input = model.getInputStream(filenames.get(i));
                    output = new FileOutputStream(outputFile);
                    log.debug(String.format("Exporting '%s' as '%s'", filenames.get(i), outputFile));
                    IOUtils.copy(input, output);
                } finally {
                    IOUtils.closeQuietly(input);
                    IOUtils.closeQuietly(output);
                }
                
                if (indentResource && 
                        (StringUtils.endsWithIgnoreCase(filenames.get(i), ".rsc") ||
                         StringUtils.endsWithIgnoreCase(filenames.get(i), ".dat"))) {
                    String resourceText = FileUtils.readFileToString(outputFile);
                    ModelResource fileResource = parser.parse(resourceText);
                    Writer fileWriter = null;
                    try {
                        fileWriter = new FileWriter(outputFile);
                        writer.write(fileResource, fileWriter);
                    } finally {
                        IOUtils.closeQuietly(fileWriter);
                    }
                }
            }           
        } catch (IOException e) {
            throw new CommandExecutionException(3, e);
        } catch (ZipException e) {
            throw new CommandExecutionException(5, e);
        }
        
        return 0;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy