use of de.sub.goobi.metadaten.MetadatenVerifizierung in project goobi-workflow by intranda.
the class StepBean method SchrittDurchBenutzerAbschliessen.
public String SchrittDurchBenutzerAbschliessen() {
if (mySchritt.getValidationPlugin() != null && mySchritt.getValidationPlugin().length() > 0) {
IValidatorPlugin ivp = (IValidatorPlugin) PluginLoader.getPluginByTitle(PluginType.Validation, mySchritt.getValidationPlugin());
if (ivp != null) {
ivp.setStep(mySchritt);
if (!ivp.validate()) {
return "";
}
} else {
Helper.setFehlerMeldung("ErrorLoadingValidationPlugin");
}
}
/*
* -------------------------------- wenn das Resultat des Arbeitsschrittes zunächst verifiziert werden soll, dann ggf. das Abschliessen
* abbrechen --------------------------------
*/
if (this.mySchritt.isTypBeimAbschliessenVerifizieren()) {
/* Metadatenvalidierung */
if (this.mySchritt.isTypMetadaten() && ConfigurationHelper.getInstance().isUseMetadataValidation()) {
MetadatenVerifizierung mv = new MetadatenVerifizierung();
mv.setAutoSave(true);
if (!mv.validate(this.mySchritt.getProzess())) {
return "";
}
}
/* Imagevalidierung */
if (this.mySchritt.isTypImagesSchreiben()) {
MetadatenImagesHelper mih = new MetadatenImagesHelper(null, null);
try {
if (!mih.checkIfImagesValid(this.mySchritt.getProzess().getTitel(), this.mySchritt.getProzess().getImagesOrigDirectory(false))) {
return "";
}
} catch (Exception e) {
Helper.setFehlerMeldung("Error on image validation: ", e);
}
}
}
if (processPropertyList != null) {
for (ProcessProperty prop : processPropertyList) {
if (prop.getCurrentStepAccessCondition().equals(AccessCondition.WRITEREQUIRED) && StringUtils.isBlank(prop.getReadValue())) {
Helper.setFehlerMeldung(Helper.getTranslation("Eigenschaft") + " " + prop.getName() + " " + Helper.getTranslation("requiredValue"));
return "";
} else if (!prop.isValid()) {
Helper.setFehlerMeldung(Helper.getTranslation("PropertyValidation", prop.getName()));
return "";
}
}
}
/*
* wenn das Ergebnis der Verifizierung ok ist, dann weiter, ansonsten schon vorher draussen
*/
this.myDav.UploadFromHome(this.mySchritt.getProzess());
this.mySchritt.setEditTypeEnum(StepEditType.MANUAL_SINGLE);
// Step so = StepObjectManager.getStepById(this.mySchritt.getId());
new HelperSchritte().CloseStepObjectAutomatic(mySchritt);
// new HelperSchritte().SchrittAbschliessen(this.mySchritt, true);
return FilterAlleStart();
}
use of de.sub.goobi.metadaten.MetadatenVerifizierung in project goobi-workflow by intranda.
the class ExportDms method startExport.
/**
* DMS-Export an eine gewünschte Stelle
*
* @param myProzess
* @param zielVerzeichnis
* @throws InterruptedException
* @throws IOException
* @throws WriteException
* @throws PreferencesException
* @throws UghHelperException
* @throws ExportFileException
* @throws MetadataTypeNotAllowedException
* @throws DocStructHasNoTypeException
* @throws DAOException
* @throws SwapException
* @throws TypeNotAllowedForParentException
*/
@Override
public boolean startExport(Process myProzess, String inZielVerzeichnis) throws IOException, InterruptedException, WriteException, PreferencesException, DocStructHasNoTypeException, MetadataTypeNotAllowedException, ExportFileException, UghHelperException, SwapException, DAOException, TypeNotAllowedForParentException {
this.myPrefs = myProzess.getRegelsatz().getPreferences();
String atsPpnBand = myProzess.getTitel();
/*
* -------------------------------- Dokument einlesen --------------------------------
*/
Fileformat gdzfile;
// Fileformat newfile;
ExportFileformat newfile = MetadatenHelper.getExportFileformatByName(myProzess.getProjekt().getFileFormatDmsExport(), myProzess.getRegelsatz());
try {
gdzfile = myProzess.readMetadataFile();
newfile.setDigitalDocument(gdzfile.getDigitalDocument());
gdzfile = newfile;
} catch (Exception e) {
Helper.setFehlerMeldung(Helper.getTranslation("exportError") + myProzess.getTitel(), e);
log.error("Export abgebrochen, xml-LeseFehler", e);
problems.add("Export cancelled: " + e.getMessage());
return false;
}
trimAllMetadata(gdzfile.getDigitalDocument().getLogicalDocStruct());
VariableReplacer replacer = new VariableReplacer(gdzfile.getDigitalDocument(), this.myPrefs, myProzess, null);
if (ConfigurationHelper.getInstance().isUseMetadataValidation()) {
MetadatenVerifizierung mv = new MetadatenVerifizierung();
if (!mv.validate(gdzfile, this.myPrefs, myProzess)) {
problems.add("Export cancelled because of validation errors");
problems.addAll(mv.getProblems());
return false;
}
}
/*
* -------------------------------- Speicherort vorbereiten und downloaden --------------------------------
*/
String zielVerzeichnis;
Path benutzerHome;
if (myProzess.getProjekt().isUseDmsImport()) {
zielVerzeichnis = myProzess.getProjekt().getDmsImportImagesPath();
zielVerzeichnis = replacer.replace(zielVerzeichnis);
benutzerHome = Paths.get(zielVerzeichnis);
/* ggf. noch einen Vorgangsordner anlegen */
if (myProzess.getProjekt().isDmsImportCreateProcessFolder()) {
benutzerHome = Paths.get(benutzerHome.toString(), myProzess.getTitel());
zielVerzeichnis = benutzerHome.toString();
/* alte Import-Ordner löschen */
if (!StorageProvider.getInstance().deleteDir(benutzerHome)) {
Helper.setFehlerMeldung("Export canceled, Process: " + myProzess.getTitel(), "Import folder could not be cleared");
problems.add("Export cancelled: Import folder could not be cleared.");
return false;
}
/* alte Success-Ordner löschen */
String successPath = myProzess.getProjekt().getDmsImportSuccessPath();
successPath = replacer.replace(successPath);
Path successFile = Paths.get(successPath, myProzess.getTitel());
if (!StorageProvider.getInstance().deleteDir(successFile)) {
Helper.setFehlerMeldung("Export canceled, Process: " + myProzess.getTitel(), "Success folder could not be cleared");
problems.add("Export cancelled: Success folder could not be cleared.");
return false;
}
/* alte Error-Ordner löschen */
String importPath = myProzess.getProjekt().getDmsImportErrorPath();
importPath = replacer.replace(importPath);
Path errorfile = Paths.get(importPath, myProzess.getTitel());
if (!StorageProvider.getInstance().deleteDir(errorfile)) {
Helper.setFehlerMeldung("Export canceled, Process: " + myProzess.getTitel(), "Error folder could not be cleared");
problems.add("Export cancelled: Error folder could not be cleared.");
return false;
}
if (!StorageProvider.getInstance().isFileExists(benutzerHome)) {
StorageProvider.getInstance().createDirectories(benutzerHome);
}
}
} else {
zielVerzeichnis = inZielVerzeichnis + atsPpnBand;
zielVerzeichnis = replacer.replace(zielVerzeichnis) + FileSystems.getDefault().getSeparator();
// wenn das Home existiert, erst löschen und dann neu anlegen
benutzerHome = Paths.get(zielVerzeichnis);
if (!StorageProvider.getInstance().deleteDir(benutzerHome)) {
Helper.setFehlerMeldung("Export canceled: " + myProzess.getTitel(), "Could not delete home directory");
problems.add("Export cancelled: Could not delete home directory.");
return false;
}
prepareUserDirectory(zielVerzeichnis);
}
/*
* -------------------------------- der eigentliche Download der Images --------------------------------
*/
try {
if (this.exportWithImages) {
imageDownload(myProzess, benutzerHome, atsPpnBand, DIRECTORY_SUFFIX);
}
if (this.exportFulltext) {
fulltextDownload(myProzess, benutzerHome, atsPpnBand, DIRECTORY_SUFFIX);
}
String ed = myProzess.getExportDirectory();
Path exportFolder = Paths.get(ed);
if (StorageProvider.getInstance().isFileExists(exportFolder) && StorageProvider.getInstance().isDirectory(exportFolder)) {
List<Path> filesInExportFolder = StorageProvider.getInstance().listFiles(ed);
for (Path exportFile : filesInExportFolder) {
if (StorageProvider.getInstance().isDirectory(exportFile) && !StorageProvider.getInstance().list(exportFile.toString()).isEmpty()) {
if (!exportFile.getFileName().toString().matches(".+\\.\\d+")) {
String suffix = exportFile.getFileName().toString().substring(exportFile.getFileName().toString().lastIndexOf("_"));
Path destination = Paths.get(benutzerHome.toString(), atsPpnBand + suffix);
if (!StorageProvider.getInstance().isFileExists(destination)) {
StorageProvider.getInstance().createDirectories(destination);
}
List<Path> files = StorageProvider.getInstance().listFiles(exportFile.toString());
for (Path file : files) {
Path target = Paths.get(destination.toString(), file.getFileName().toString());
StorageProvider.getInstance().copyFile(file, target);
}
}
} else {
// if it is a regular file, export it to source folder
Path destination = Paths.get(benutzerHome.toString(), atsPpnBand + "_src");
if (!StorageProvider.getInstance().isFileExists(destination)) {
StorageProvider.getInstance().createDirectories(destination);
}
Path target = Paths.get(destination.toString(), exportFile.getFileName().toString());
StorageProvider.getInstance().copyFile(exportFile, target);
}
}
}
} catch (AccessDeniedException e) {
Helper.setFehlerMeldung("Export canceled, Process: " + myProzess.getTitel(), "Access to " + e.getMessage() + " was denied");
problems.add("Export cancelled: Access to " + e.getMessage() + " was denied");
return false;
} catch (Exception e) {
Helper.setFehlerMeldung("Export canceled, Process: " + myProzess.getTitel(), e);
problems.add("Export cancelled: " + e.getMessage());
return false;
}
/*
* -------------------------------- zum Schluss Datei an gewünschten Ort
* exportieren entweder direkt in den Import-Ordner oder ins
* Benutzerhome anschliessend den Import-Thread starten
* --------------------------------
*/
boolean externalExport = MetadatenHelper.getExportFileformatByName(myProzess.getProjekt().getFileFormatDmsExport(), myProzess.getRegelsatz()) != null;
if (myProzess.getProjekt().isUseDmsImport()) {
Helper.setMeldung(null, myProzess.getTitel() + ": ", "DMS-Export started");
if (externalExport) {
/* Wenn METS, dann per writeMetsFile schreiben... */
writeMetsFile(myProzess, benutzerHome.toString() + "/" + atsPpnBand + ".xml", gdzfile, false);
} else {
/* ...wenn nicht, nur ein Fileformat schreiben. */
gdzfile.write(benutzerHome.toString() + "/" + atsPpnBand + ".xml");
}
if (!ConfigurationHelper.getInstance().isExportWithoutTimeLimit()) {
DmsImportThread agoraThread = new DmsImportThread(myProzess, atsPpnBand);
agoraThread.start();
try {
/* xx Sekunden auf den Thread warten, evtl. killen */
agoraThread.join(myProzess.getProjekt().getDmsImportTimeOut().longValue());
if (agoraThread.isAlive()) {
agoraThread.stopThread();
}
} catch (InterruptedException e) {
Helper.setFehlerMeldung(myProzess.getTitel() + ": error on export - ", e.getMessage());
problems.add("Export problems: " + e.getMessage());
log.error(myProzess.getTitel() + ": error on export", e);
}
if (agoraThread.rueckgabe.length() > 0) {
Helper.setFehlerMeldung(myProzess.getTitel() + ": ", agoraThread.rueckgabe);
} else {
Helper.setMeldung(null, myProzess.getTitel() + ": ", "ExportFinished");
/* Success-Ordner wieder löschen */
if (myProzess.getProjekt().isDmsImportCreateProcessFolder()) {
String sf = myProzess.getProjekt().getDmsImportSuccessPath();
sf = replacer.replace(sf);
Path successFile = Paths.get(sf, myProzess.getTitel());
StorageProvider.getInstance().deleteDir(successFile);
}
}
}
} else {
/* ohne Agora-Import die xml-Datei direkt ins Home schreiben */
if (externalExport) {
writeMetsFile(myProzess, zielVerzeichnis + atsPpnBand + ".xml", gdzfile, false);
} else {
gdzfile.write(zielVerzeichnis + atsPpnBand + ".xml");
}
Helper.setMeldung(null, myProzess.getTitel() + ": ", "ExportFinished");
}
return true;
}
use of de.sub.goobi.metadaten.MetadatenVerifizierung in project goobi-workflow by intranda.
the class BatchStepHelper method BatchDurchBenutzerAbschliessen.
public String BatchDurchBenutzerAbschliessen() {
// for (ProcessProperty pp : this.processPropertyList) {
// this.processProperty = pp;
// saveCurrentPropertyForAll();
// }
HelperSchritte helper = new HelperSchritte();
for (Step s : this.steps) {
boolean error = false;
if (s.getValidationPlugin() != null && s.getValidationPlugin().length() > 0) {
IValidatorPlugin ivp = (IValidatorPlugin) PluginLoader.getPluginByTitle(PluginType.Validation, s.getValidationPlugin());
if (ivp != null) {
ivp.setStep(s);
if (!ivp.validate()) {
error = true;
}
} else {
Helper.setFehlerMeldung("ErrorLoadingValidationPlugin");
}
}
if (s.isTypImagesSchreiben()) {
try {
HistoryAnalyserJob.updateHistory(s.getProzess());
} catch (Exception e) {
Helper.setFehlerMeldung("Error while calculation of storage and images", e);
}
}
if (s.isTypBeimAbschliessenVerifizieren()) {
if (s.isTypMetadaten() && ConfigurationHelper.getInstance().isUseMetadataValidation()) {
MetadatenVerifizierung mv = new MetadatenVerifizierung();
mv.setAutoSave(true);
if (!mv.validate(s.getProzess())) {
error = true;
}
}
if (s.isTypImagesSchreiben()) {
MetadatenImagesHelper mih = new MetadatenImagesHelper(null, null);
try {
if (!mih.checkIfImagesValid(s.getProzess().getTitel(), s.getProzess().getImagesOrigDirectory(false))) {
error = true;
}
} catch (Exception e) {
Helper.setFehlerMeldung("Error on image validation: ", e);
}
}
loadProcessProperties(s);
for (ProcessProperty prop : processPropertyList) {
if (prop.getCurrentStepAccessCondition().equals(AccessCondition.WRITEREQUIRED) && (prop.getValue() == null || prop.getValue().equals(""))) {
String[] parameter = { prop.getName(), s.getProzess().getTitel() };
Helper.setFehlerMeldung(Helper.getTranslation("BatchPropertyEmpty", parameter));
error = true;
} else if (!prop.isValid()) {
String[] parameter = { prop.getName(), s.getProzess().getTitel() };
Helper.setFehlerMeldung(Helper.getTranslation("BatchPropertyValidation", parameter));
error = true;
}
}
}
if (!error) {
this.myDav.UploadFromHome(s.getProzess());
Step so = StepManager.getStepById(s.getId());
so.setEditTypeEnum(StepEditType.MANUAL_MULTI);
helper.CloseStepObjectAutomatic(so);
}
}
return sb.FilterAlleStart();
}
use of de.sub.goobi.metadaten.MetadatenVerifizierung in project goobi-workflow by intranda.
the class CreatePdfFromServletThread method run.
/**
* Aufruf als Thread ================================================================
*/
@Override
public void run() {
setStatusProgress(30);
if (this.getProzess() == null || this.targetFolder == null || this.internalServletPath == null) {
setStatusMessage("parameters for temporary and final folder and internal servlet path not defined");
setStatusProgress(-1);
return;
}
CloseableHttpClient httpclient = null;
HttpGet method = null;
try {
httpclient = HttpClientBuilder.create().build();
/* --------------------------------
* define path for mets and pdfs
* --------------------------------*/
URL goobiContentServerUrl = null;
String contentServerUrl = ConfigurationHelper.getInstance().getGoobiContentServerUrl();
Path tempPdf = StorageProvider.getInstance().createTemporaryFile(this.getProzess().getTitel(), ".pdf");
Path finalPdf = Paths.get(this.targetFolder.toString(), this.getProzess().getTitel() + ".pdf");
Integer contentServerTimeOut = ConfigurationHelper.getInstance().getGoobiContentServerTimeOut();
String imageSource = "";
String pdfSource = "";
String altoSource = "";
if (StringUtils.isNotBlank(imageSource)) {
imageSource = "&imageSource=" + getImagePath().toUri();
}
if (StringUtils.isNotBlank(pdfSource)) {
pdfSource = "&pdfSource=" + getPdfPath().toUri();
}
if (StringUtils.isNotBlank(altoSource)) {
altoSource = "&altoSource=" + getAltoPath().toUri();
}
if (new MetadatenVerifizierung().validate(this.getProzess()) && this.metsURL != null) {
/* if no contentserverurl defined use internal goobiContentServerServlet */
if (contentServerUrl == null || contentServerUrl.length() == 0) {
contentServerUrl = this.internalServletPath + "/gcs/gcs?action=pdf&metsFile=";
}
goobiContentServerUrl = new URL(contentServerUrl + this.metsURL + imageSource + pdfSource + altoSource);
/* --------------------------------
* mets data does not exist or is invalid
* --------------------------------*/
} else {
if (contentServerUrl == null || contentServerUrl.length() == 0) {
contentServerUrl = this.internalServletPath + "/cs/cs?action=pdf&images=";
}
String url = "";
List<Path> meta = StorageProvider.getInstance().listFiles(this.getProzess().getImagesTifDirectory(true), NIOFileUtils.imageNameFilter);
ArrayList<String> filenames = new ArrayList<String>();
for (Path data : meta) {
String file = "";
file += data.toUri().toURL();
filenames.add(file);
}
Collections.sort(filenames, new MetadatenHelper(null, null));
for (String f : filenames) {
url = url + f + "$";
}
String imageString = url.substring(0, url.length() - 1);
String targetFileName = "&targetFileName=" + this.getProzess().getTitel() + ".pdf";
goobiContentServerUrl = new URL(contentServerUrl + imageString + imageSource + pdfSource + altoSource + targetFileName);
}
if (log.isDebugEnabled()) {
log.debug("Retrieving: " + goobiContentServerUrl.toString());
}
method = new HttpGet(goobiContentServerUrl.toString());
Builder builder = RequestConfig.custom();
builder.setSocketTimeout(contentServerTimeOut);
RequestConfig rc = builder.build();
method.setConfig(rc);
InputStream istr = null;
OutputStream ostr = null;
try {
byte[] response = httpclient.execute(method, HttpClientHelper.byteArrayResponseHandler);
istr = new ByteArrayInputStream(response);
ostr = new FileOutputStream(tempPdf.toFile());
// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len;
while ((len = istr.read(buf)) > 0) {
ostr.write(buf, 0, len);
}
} catch (IOException e) {
log.error(e);
} finally {
method.releaseConnection();
if (httpclient != null) {
httpclient.close();
}
if (istr != null) {
try {
istr.close();
} catch (IOException e) {
log.error(e);
}
}
if (ostr != null) {
try {
ostr.close();
} catch (IOException e) {
log.error(e);
}
}
}
/* --------------------------------
* copy pdf from temp to final destination
* --------------------------------*/
if (log.isDebugEnabled()) {
log.debug("pdf file created: " + tempPdf.toString() + "; now copy it to " + finalPdf.toString());
}
StorageProvider.getInstance().copyFile(tempPdf, finalPdf);
if (log.isDebugEnabled()) {
log.debug("pdf copied to " + finalPdf.toString() + "; now start cleaning up");
}
StorageProvider.getInstance().deleteDir(tempPdf);
if (this.metsURL != null) {
Path tempMets = Paths.get(this.metsURL.toString());
StorageProvider.getInstance().deleteDir(tempMets);
}
} catch (Exception e) {
log.error("Error while creating pdf for " + this.getProzess().getTitel(), e);
setStatusMessage("error " + e.getClass().getSimpleName() + " while pdf creation: " + e.getMessage());
setStatusProgress(-1);
/* --------------------------------
* report Error to User as Error-Log
* --------------------------------*/
Writer output = null;
String text = "error while pdf creation: " + e.getMessage();
Path file = Paths.get(this.targetFolder.toString(), this.getProzess().getTitel() + ".PDF-ERROR.log");
try {
output = new BufferedWriter(new FileWriter(file.toFile()));
output.write(text);
output.close();
} catch (IOException e1) {
log.error("Error while reporting error to user in file " + file.toString(), e);
}
return;
} finally {
if (method != null) {
method.releaseConnection();
}
}
setStatusMessage("done");
setStatusProgress(100);
}
Aggregations