115 lines
4.0 KiB
Java
115 lines
4.0 KiB
Java
package de.vanitasvitae.imi.codes;
|
|
|
|
import java.io.File;
|
|
import java.io.FileWriter;
|
|
import java.io.IOException;
|
|
import java.io.Writer;
|
|
import java.util.List;
|
|
|
|
import de.vanitasvitae.imi.codes.input.Arguments;
|
|
import de.vanitasvitae.imi.codes.input.InputValidator;
|
|
import de.vanitasvitae.imi.codes.input.InvalidOptionException;
|
|
import de.vanitasvitae.imi.codes.types.SampleTubeCode;
|
|
import de.vanitasvitae.imi.codes.types.SampleType;
|
|
import de.vanitasvitae.imi.codes.types.StudyNumber;
|
|
import org.apache.commons.cli.CommandLine;
|
|
import org.apache.commons.cli.CommandLineParser;
|
|
import org.apache.commons.cli.DefaultParser;
|
|
import org.apache.commons.cli.HelpFormatter;
|
|
import org.apache.commons.cli.Options;
|
|
import org.apache.commons.cli.ParseException;
|
|
|
|
public class Main {
|
|
|
|
private static final String NAME_JAR = "java -jar imicodes.jar";
|
|
private static final String HELP_HEADER = "Generate ID codes for sample tubes.";
|
|
private static final String HELP_FOOTER = "\nAuthor: Paul Schaub <paul.schaub@wwu.de>";
|
|
|
|
/**
|
|
* Entry point to the program.
|
|
* Any provided arguments are parsed and the behaviour of the program is modified respectively.
|
|
* A list of available options can be displayed using "-h".
|
|
*
|
|
* @param args arguments
|
|
*/
|
|
public static void main(String[] args) {
|
|
Options options = Arguments.getCommandLineOptions();
|
|
CommandLineParser parser = new DefaultParser();
|
|
|
|
CommandLine arguments;
|
|
try {
|
|
arguments = parser.parse(options, args);
|
|
} catch (ParseException e) {
|
|
System.out.println(e.getMessage());
|
|
printHelp(options);
|
|
return;
|
|
}
|
|
|
|
// User issues '-h', so just show help text and exit right now.
|
|
if (arguments.hasOption(Arguments.HELP)) {
|
|
printHelp(options);
|
|
return;
|
|
}
|
|
|
|
StudyNumber studyNumber;
|
|
SampleType sampleType;
|
|
int numberOfCodes;
|
|
File outputPath;
|
|
boolean externalBrowser;
|
|
|
|
// Parse arguments
|
|
try {
|
|
studyNumber = InputValidator.validateStudyNumber(arguments.getOptionValue(Arguments.STUDY_NUMBER));
|
|
sampleType = InputValidator.validateSampleType(arguments.getOptionValue(Arguments.SAMPLE_TYPE));
|
|
numberOfCodes = InputValidator.validateNumberOfCodes(arguments.getOptionValue(Arguments.NUMBER_CODES));
|
|
|
|
if (arguments.hasOption(Arguments.OUTPUT_DESTINATION)) {
|
|
outputPath = InputValidator.validateOutputPath(arguments.getOptionValue(Arguments.OUTPUT_DESTINATION));
|
|
} else {
|
|
outputPath = InputValidator.validateOutputPath("./out.html");
|
|
}
|
|
|
|
externalBrowser = arguments.hasOption(Arguments.EXTERNAL_BROWSER);
|
|
} catch (InvalidOptionException e) {
|
|
// Something is wrong with the users input, so exit.
|
|
System.out.println(e.getMessage());
|
|
return;
|
|
}
|
|
|
|
CodeGenerator generator = new CodeGenerator();
|
|
|
|
List<SampleTubeCode> codes;
|
|
try {
|
|
codes = generator.generateCodes(studyNumber, sampleType, numberOfCodes);
|
|
} catch (InvalidOptionException e) {
|
|
System.out.println(e.getMessage());
|
|
return;
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
return;
|
|
}
|
|
|
|
String html = new HtmlTableStringBuilder("IMI Sample Tube Code Generator", codes).toString();
|
|
writeHtml(html, outputPath);
|
|
}
|
|
|
|
private static void writeHtml(String html, File destination) {
|
|
try(Writer writer = new FileWriter(destination)) {
|
|
writer.write(html);
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Print a descriptive help text to the console.
|
|
*
|
|
* @param options {@link Options} for which we want to print a help text.
|
|
*/
|
|
private static void printHelp(Options options) {
|
|
HelpFormatter formatter = new HelpFormatter();
|
|
|
|
formatter.printHelp(NAME_JAR, HELP_HEADER, options, HELP_FOOTER, true);
|
|
}
|
|
}
|