Coverage Summary for Class: ImageGeneratorStep (org.kitodo.production.enums)
Class |
Method, %
|
Line, %
|
ImageGeneratorStep |
100%
(1/1)
|
100%
(4/4)
|
ImageGeneratorStep$1 |
100%
(3/3)
|
100%
(8/8)
|
ImageGeneratorStep$2 |
66,7%
(2/3)
|
84,6%
(11/13)
|
ImageGeneratorStep$3 |
100%
(3/3)
|
100%
(8/8)
|
Total |
90%
(9/10)
|
93,9%
(31/33)
|
/*
* (c) Kitodo. Key to digital objects e. V. <contact@kitodo.org>
*
* This file is part of the Kitodo project.
*
* It is licensed under GNU General Public License version 3 or later.
*
* For the full copyright and license information, please read the
* GPL3-License.txt file that was distributed with this source code.
*/
package org.kitodo.production.enums;
import java.net.URI;
import java.util.List;
import java.util.function.Consumer;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.logging.log4j.LogManager;
import org.kitodo.production.helper.Helper;
import org.kitodo.production.model.Subfolder;
import org.kitodo.production.services.image.ContentToBeGenerated;
import org.kitodo.production.services.image.ImageGenerator;
/**
* Enumerates the steps to go to generate images.
*/
public enum ImageGeneratorStep implements Consumer<ImageGenerator> {
/**
* First step, get the list of images in the folder of source images.
*/
LIST_SOURCE_FOLDER {
@Override
public void accept(ImageGenerator imageGenerator) {
imageGenerator.letTheSupervisorDo(
emptyTask -> emptyTask.setWorkDetail(Helper.getTranslation("listSourceFolder")));
imageGenerator.determineSources();
if (imageGenerator.getMode().equals(GenerationMode.ALL)) {
imageGenerator.removeGeneratedContent();
}
imageGenerator.setState(DETERMINE_WHICH_IMAGES_NEED_TO_BE_GENERATED);
imageGenerator.setPosition(-1);
}
},
/**
* Second step, (if demanded) check if the image exists in the destination
* folder, and optionally validate the image file content for not being
* corrupted.
*/
DETERMINE_WHICH_IMAGES_NEED_TO_BE_GENERATED {
@Override
public void accept(ImageGenerator imageGenerator) {
Pair<String, URI> source = imageGenerator.getSources().get(imageGenerator.getPosition());
String canonical = source.getKey();
if (!imageGenerator.getMode().equals(GenerationMode.ALL)) {
imageGenerator.letTheSupervisorDo(emptyTask -> emptyTask.setWorkDetail(
Helper.getTranslation("determineWhichImagesNeedToBeGenerated", canonical)));
}
List<Subfolder> subfoldersWhoseContentsAreToBeGenerated = imageGenerator
.determineFoldersThatNeedDerivatives(canonical);
if (!subfoldersWhoseContentsAreToBeGenerated.isEmpty()) {
imageGenerator.addToContentToBeGenerated(canonical, source.getValue(),
subfoldersWhoseContentsAreToBeGenerated);
}
if (imageGenerator.getPosition() == imageGenerator.getSources().size() - 1) {
imageGenerator.setState(GENERATE_IMAGES);
imageGenerator.setPosition(-1);
}
}
},
/**
* Third step, generate whatever needs to be generated.
*/
GENERATE_IMAGES {
@Override
public void accept(ImageGenerator imageGenerator) {
ContentToBeGenerated instructuon = imageGenerator.getFromContentToBeGeneratedByPosition();
imageGenerator.letTheSupervisorDo(emptyTask -> emptyTask.setWorkDetail(
Helper.getTranslation("generateImages", instructuon.getCanonical())));
LogManager.getLogger(ImageGeneratorStep.class).info("Generating ".concat(instructuon.toString()));
imageGenerator.createDerivatives(instructuon);
if (imageGenerator.getPosition() == imageGenerator.getContentToBeGenerated().size() - 1) {
imageGenerator.letTheSupervisorDo(emptyTask -> emptyTask.setProgress(100));
}
}
}
}