package edu.mayo.bior.cli.cmd;
import java.util.Properties;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Options;
import com.tinkerpop.pipes.util.Pipeline;
import edu.mayo.bior.pipeline.UnixStreamPipeline;
import edu.mayo.cli.CommandPlugin;
import edu.mayo.pipes.history.CompressPipe;
import edu.mayo.pipes.history.HistoryInPipe;
import edu.mayo.pipes.history.HistoryOutPipe;
import edu.mayo.pipes.util.FieldSpecification;
import edu.mayo.pipes.util.FieldSpecification.FieldDirection;
public class CompressCommand implements CommandPlugin
{
private static final String DEFAULT_SEPARATOR = "|";
private static final String DEFAULT_ESCAPE_SEPARATOR = "\\|";
private static final char OPTION_SEPARATOR = 's';
private static final char OPTION_ESCAPE = 'e';
private static final char OPTION_REVERSE = 'r';
private static final char OPTION_ALIGN = 'a';
private UnixStreamPipeline mPipeline = new UnixStreamPipeline();
private String mOperation;
public void init(Properties props) throws Exception {
mOperation = props.getProperty("command.name");
}
public void execute(CommandLine line, Options opts) throws Exception
{
// get COLUMNS argument
String fieldSpecStr = line.getArgs()[0];
FieldDirection direction;
if (line.hasOption(OPTION_REVERSE))
{
direction = FieldDirection.RIGHT_TO_LEFT;
}
else
{
direction = FieldDirection.LEFT_TO_RIGHT;
}
FieldSpecification fieldSpec = new FieldSpecification(fieldSpecStr, direction);
// grab from option flag
String delimiter = DEFAULT_SEPARATOR;
if (line.hasOption(OPTION_SEPARATOR))
{
delimiter = line.getOptionValue(OPTION_SEPARATOR);
}
String escapeDelimiter = DEFAULT_ESCAPE_SEPARATOR;
if (line.hasOption(OPTION_ESCAPE))
{
escapeDelimiter = line.getOptionValue(OPTION_ESCAPE);
}
boolean useSetCompression = true;
if (line.hasOption(OPTION_ALIGN))
{
useSetCompression = false;
}
CompressPipe compressPipe = new CompressPipe(mOperation, fieldSpec, delimiter, escapeDelimiter, useSetCompression);
// Make sure to use the execute that takes 3 parms, else it will try to do two HistoryInPipes
mPipeline.execute(
new HistoryInPipe(compressPipe.getMetadata()),
compressPipe,
new HistoryOutPipe());
}
}