package eu.europeana.cloud.service.dps.storm.topologies.ic.converter.converter;
import eu.europeana.cloud.service.dps.storm.topologies.ic.converter.command.CommandBuilderContext;
import eu.europeana.cloud.service.dps.storm.topologies.ic.converter.exceptions.ConversionException;
import eu.europeana.cloud.service.dps.storm.topologies.ic.converter.exceptions.UnexpectedExtensionsException;
import eu.europeana.cloud.service.dps.storm.topologies.ic.converter.extension.ExtensionCheckerContext;
import eu.europeana.cloud.service.dps.storm.topologies.ic.converter.utlis.CommandExecutor;
import java.io.IOException;
import java.util.List;
/**
* Service for converting one file to another by executing shell command
*/
public class ConsoleBasedConverter implements Converter {
private CommandBuilderContext commandBuilderContext;
private ExtensionCheckerContext inputFileExtensionChecker;
private ExtensionCheckerContext outputFileExtensionChecker;
/**
* Constructs a ConsoleBasedConverter with the specified command context and extension checkers contexts.
*
* @param commandBuilderContext Command builder context
* @param inputFileExtensionChecker Extension checker context for input file
* @param outputFileExtensionChecker Extension checker context for output file
*/
public ConsoleBasedConverter(CommandBuilderContext commandBuilderContext,
ExtensionCheckerContext inputFileExtensionChecker,
ExtensionCheckerContext outputFileExtensionChecker) {
this.commandBuilderContext = commandBuilderContext;
this.inputFileExtensionChecker = inputFileExtensionChecker;
this.outputFileExtensionChecker = outputFileExtensionChecker;
}
/**
* Converts File to another by executing a shell command and list of properties
*
* @param inputFilePath The input file full path
* @param outputFilePath The output file full path
* @param properties List of properties attached to the kakadu command
* @throws UnexpectedExtensionsException : throws when providing invalid or inconsistent extensions
* @throws IOException
*/
public void convert(String inputFilePath, String outputFilePath,
List<String> properties) throws UnexpectedExtensionsException, ConversionException, IOException {
if (inputFileExtensionChecker.isGoodExtension(inputFilePath) && (outputFileExtensionChecker.isGoodExtension(outputFilePath))) {
String command = commandBuilderContext.constructCommand(
inputFilePath, outputFilePath, properties);
CommandExecutor commandExecutor = new CommandExecutor();
commandExecutor.execute(command);
} else
throw new UnexpectedExtensionsException("Check the input file or the output file extensions");
}
}