From: Vásáry Dániel Date: Thu, 5 Oct 2017 07:37:51 +0000 (+0000) Subject: git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube... X-Git-Url: http://git.useribm.hu/?a=commitdiff_plain;h=792de4e82a88694e528623ebade26321974a11ae;p=mediacube.git git-tfs-id: [tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C30533 --- diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/CheckMORPHEUSMissingMaterialsStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/CheckMORPHEUSMissingMaterialsStep.java new file mode 100644 index 00000000..01e071a6 --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/CheckMORPHEUSMissingMaterialsStep.java @@ -0,0 +1,118 @@ +package user.jobengine.server.steps; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.List; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import user.commons.IEntityBase; +import user.commons.ListUtils; +import user.jobengine.db.IItemManager; +import user.jobengine.db.MediaFile; +import user.jobengine.db.MediaFileDAO; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +public class CheckMORPHEUSMissingMaterialsStep extends JobStep { + private static final String MATERIAL_ID = "Material ID"; + private static final Logger logger = LogManager.getLogger(); + private static final String RETRIEVE_MATERIAL = "Adásanyag visszatöltés"; + private static final String OUTPUT_PATH = "outputPath"; + private static final String MEDIA_CUBE_MEDIA = "mediaCubeMedia"; + private static final String JOBTEMPLATE = "retrieve-material.xml"; + private static final String CSV_EXT = ".mxf"; + private String outputPath; + private MediaFileDAO dao; + private IJobEngine jobEngine; + + @StepEntry + public Object[] execute(String inputFolder, String outputPath, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + + this.outputPath = outputPath; + this.jobEngine = jobEngine; + IItemManager manager = jobEngine.getItemManager(); + dao = (MediaFileDAO) manager.getBaseDAO(MediaFile.class); + DirectoryStream directoryStream = null; + try { + Files.newDirectoryStream(Paths.get(inputFolder)).forEach(p -> processPathItem(p)); + } catch (Exception e) { + logger.error("", e); + } finally { + if (directoryStream != null) { + try { + directoryStream.close(); + } catch (IOException e) { + } + } + } + return null; + } + + private void processMediaId(String mediaId) throws Exception { + List medias = dao.getByHouseId(mediaId); + if (medias == null || medias.size() == 0) { + logger.error(getMarker(), "Az {} anyag nem található az archívumban.", mediaId); + return; + } + + if (medias.size() > 0) { + logger.error(getMarker(), "Az {} anyagból egynél több található az archívumban.", mediaId); + return; + } + + jobEngine.submit(JOBTEMPLATE, RETRIEVE_MATERIAL, ListUtils.asMap(MEDIA_CUBE_MEDIA, medias.get(0), OUTPUT_PATH, outputPath)); + } + + private void processMissingMaterialCSV(Path csvFilePath) throws Exception { + List lines = Files.readAllLines(csvFilePath, Charset.forName("UTF-8")); + if (lines == null | lines.size() == 0) { + return; + } + + int mediaIdPosition = -1; + for (int i = 0; i < lines.size(); i++) { + String line = lines.get(i); + if (line == null) + continue; + String[] data = line.split("\\t"); + if (i == 0) { + //Channel,Time to Air,Duration,Material ID,Title,Device ID,Reason, + List dataList = Arrays.asList(data); + mediaIdPosition = dataList.indexOf(MATERIAL_ID); + if (mediaIdPosition < 0) { + logger.error(getMarker(), "A {} MORPHEUS állományban nem található a 'Material ID' mező.", csvFilePath.toFile().getName()); + break; + } + } else { + processMediaId(data[mediaIdPosition]); + } + } + } + + private void processPathItem(Path csvFilePath) { + File csvFile = csvFilePath.toFile(); + + if (csvFile.isDirectory() || !csvFile.getName().toLowerCase().endsWith(CSV_EXT.toLowerCase())) { + return; + } + + try { + processMissingMaterialCSV(csvFilePath); + } catch (Exception e) { + logger.catching(e); + logger.error(getMarker(), "A {} MORPHEUS állomány feldolgozásakor hiba történt. A rendszer hibaüzenete: {}.", csvFile.getName(), e.getMessage()); + } + + if (!csvFile.delete()) + logger.error(getMarker(), "A {} MORPHEUS állomány nem törölhető.", csvFile.getName()); + } + +}