IMI-Application/src/main/java/de/vanitasvitae/imi/codes/Main.java

126 lines
4.4 KiB
Java
Raw Normal View History

2018-11-14 20:38:51 +01:00
package de.vanitasvitae.imi.codes;
import java.awt.*;
2018-11-15 02:03:52 +01:00
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
2018-11-15 02:03:52 +01:00
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;
2018-11-14 20:38:51 +01:00
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";
2018-11-14 20:38:51 +01:00
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
*/
2018-11-14 20:38:51 +01:00
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;
}
2018-11-15 02:03:52 +01:00
// User issues '-h', so just show help text and exit right now.
2018-11-14 20:38:51 +01:00
if (arguments.hasOption(Arguments.HELP)) {
printHelp(options);
return;
}
2018-11-15 02:03:52 +01:00
StudyNumber studyNumber;
2018-11-15 02:03:52 +01:00
SampleType sampleType;
int numberOfCodes;
File outputPath;
boolean externalBrowser;
// Parse arguments
2018-11-15 02:03:52 +01:00
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");
}
2018-11-15 02:03:52 +01:00
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);
if (externalBrowser && Desktop.isDesktopSupported()) {
try {
Desktop.getDesktop().browse(new URI("file://" + outputPath.getAbsolutePath()));
} catch (IOException | URISyntaxException e) {
e.printStackTrace();
}
}
}
private static void writeHtml(String html, File destination) {
try(Writer writer = new FileWriter(destination)) {
writer.write(html);
} catch (IOException e) {
e.printStackTrace();
2018-11-15 02:03:52 +01:00
}
2018-11-14 20:38:51 +01:00
}
/**
* 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);
}
}