package de.unigoettingen.sub.commons.ocr.web;
import java.io.File;
import java.text.DateFormat;
import java.util.Date;
import org.apache.commons.validator.routines.EmailValidator;
import de.unigoettingen.sub.ocr.controller.OcrEngineStarter;
import de.unigoettingen.sub.ocr.controller.OcrParameters;
import de.unigoettingen.sub.ocr.controller.Validator;
import de.unigoettingen.sub.ocr.controller.ValidatorGerman;
public class OcrStarter implements Runnable {
private OcrParameters params;
private LogSelector logSelector = new LogSelector();
private Validator paramsValidator = new ValidatorGerman();
private OcrEngineStarter engineStarter = new OcrEngineStarter();
// for unit tests
void setLogSelector(LogSelector newSelector) {
logSelector = newSelector;
}
void setValidator(Validator newValidator) {
paramsValidator = newValidator;
}
void setOcrEngineStarter(OcrEngineStarter newStarter) {
engineStarter = newStarter;
}
public void setParameters(OcrParameters initParameters) {
params = initParameters;
}
public String checkParameters() {
String validationMessage = paramsValidator.validateParameters(params);
if ("OK".equals(validationMessage)) {
validationMessage = "";
}
EmailValidator validator = EmailValidator.getInstance();
String email = params.props.getProperty("email");
if (isEmpty(email)) {
validationMessage += "Keine Benachrichtigungsadresse. ";
} else if (!validator.isValid(email)) {
validationMessage += "Inkorrekte Benachrichtigungsadresse. ";
}
if (validationMessage.equals("")) {
return "OK";
} else {
return validationMessage;
}
}
private boolean isEmpty(String string) {
return string == null || string.isEmpty();
}
@Override
public void run() {
DateFormat f = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
String timeStamp = f.format(new Date()).replaceAll(" ", "-").replaceAll(":", ".");
String logFile = new File(new File(params.outputFolder), "log-" + timeStamp + ".txt").getAbsolutePath();
logSelector.logToFile(logFile);
engineStarter.startOcrWithParams(params);
logSelector.useDefaults();
}
}