1 package user.jobengine.server.steps;
\r
4 import java.io.IOException;
\r
5 import java.nio.charset.Charset;
\r
6 import java.nio.file.DirectoryStream;
\r
7 import java.nio.file.Files;
\r
8 import java.nio.file.Path;
\r
9 import java.nio.file.Paths;
\r
10 import java.util.Arrays;
\r
11 import java.util.List;
\r
13 import org.apache.logging.log4j.LogManager;
\r
14 import org.apache.logging.log4j.Logger;
\r
16 import user.commons.IEntityBase;
\r
17 import user.commons.ListUtils;
\r
18 import user.jobengine.db.IItemManager;
\r
19 import user.jobengine.db.MediaFile;
\r
20 import user.jobengine.db.MediaFileDAO;
\r
21 import user.jobengine.server.IJobEngine;
\r
22 import user.jobengine.server.IJobRuntime;
\r
24 public class CheckMORPHEUSMissingMaterialsStep extends JobStep {
\r
25 private static final Logger logger = LogManager.getLogger();
\r
26 private static final String KILLDATEDAYS = "killDateDays";
\r
27 private static final String SUCCESSRECIPIENT = "successRecipient";
\r
28 private static final String TARGETNAMEPATTERN = "targetNamePattern";
\r
29 private static final String MATERIAL_ID = "Material ID";
\r
30 private static final String RETRIEVE_MATERIAL = "Adásanyag visszatöltés";
\r
31 private static final String TARGETPATH = "targetPath";
\r
32 private static final String MEDIACUBEMEDIA = "mediaCubeMedia";
\r
33 private static final String JOBTEMPLATE = "retrieve-material.xml";
\r
34 private static final String CSV_EXT = ".csv";
\r
35 private static final String MXF_EXT = ".MXF";
\r
36 private String targetPath;
\r
37 private MediaFileDAO dao;
\r
38 private IJobEngine jobEngine;
\r
39 private int killDateDays;
\r
42 public Object[] execute(String sourcePath, String targetPath, int killDateDays, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {
\r
43 this.killDateDays = killDateDays;
\r
44 setAndCheck(sourcePath, targetPath, jobEngine);
\r
45 DirectoryStream<Path> directoryStream = null;
\r
47 Files.newDirectoryStream(Paths.get(sourcePath)).forEach(p -> processPathItem(p));
\r
48 } catch (Exception e) {
\r
49 logger.error("", e);
\r
51 if (directoryStream != null) {
\r
53 directoryStream.close();
\r
54 } catch (IOException e) {
\r
61 private void processMediaId(String mediaId) throws Exception {
\r
62 List<IEntityBase> medias = dao.getByHouseId(mediaId + ".MXF");
\r
63 if (medias == null || medias.size() == 0) {
\r
64 logger.error(getMarker(), "Az {} anyag nem található az archívumban.", mediaId);
\r
68 if (medias.size() > 1) {
\r
69 logger.error(getMarker(), "Az {} anyagból egynél több található az archívumban.", mediaId);
\r
73 jobEngine.submit(JOBTEMPLATE, RETRIEVE_MATERIAL, ListUtils.asMap(MEDIACUBEMEDIA, medias.get(0), TARGETPATH, targetPath, TARGETNAMEPATTERN,
\r
74 mediaId + MXF_EXT, SUCCESSRECIPIENT, null, KILLDATEDAYS, killDateDays));
\r
77 private void processMissingMaterialCSV(Path csvFilePath) throws Exception {
\r
78 List<String> lines = Files.readAllLines(csvFilePath, Charset.forName("UTF-8"));
\r
79 if (lines == null | lines.size() == 0) {
\r
83 int mediaIdPosition = -1;
\r
84 for (int i = 0; i < lines.size(); i++) {
\r
85 String line = lines.get(i);
\r
88 String[] data = line.split(",");
\r
90 //Channel,Time to Air,Duration,Material ID,Title,Device ID,Reason,
\r
91 List<String> dataList = Arrays.asList(data);
\r
92 mediaIdPosition = dataList.indexOf(MATERIAL_ID);
\r
93 if (mediaIdPosition < 0) {
\r
94 logger.error(getMarker(), "A {} MORPHEUS állományban nem található a 'Material ID' mező.", csvFilePath.toFile().getName());
\r
98 processMediaId(data[mediaIdPosition]);
\r
103 private void processPathItem(Path csvFilePath) {
\r
104 File csvFile = csvFilePath.toFile();
\r
106 if (csvFile.isDirectory() || !csvFile.getName().toLowerCase().endsWith(CSV_EXT.toLowerCase())) {
\r
111 processMissingMaterialCSV(csvFilePath);
\r
112 } catch (Exception e) {
\r
113 logger.catching(e);
\r
114 logger.error(getMarker(), "A {} MORPHEUS állomány feldolgozásakor hiba történt. A rendszer hibaüzenete: {}.", csvFile.getName(), e.getMessage());
\r
117 //TODO ne törölje, move
\r
118 // if (!csvFile.delete())
\r
119 // logger.error(getMarker(), "A {} MORPHEUS állomány nem törölhető.", csvFile.getName());
\r
122 private void setAndCheck(String sourcePath, String targetPath, IJobEngine jobEngine) {
\r
123 if (jobEngine == null) {
\r
124 logger.error(getMarker(), "Az folyamatkezelő réteg nem elérhető.");
\r
125 throw new NullPointerException("Internal error, missing JobEngine reference.");
\r
127 this.jobEngine = jobEngine;
\r
129 IItemManager manager = jobEngine.getItemManager();
\r
130 if (manager == null) {
\r
131 logger.error(getMarker(), "Az adatbáziskezelő réteg nem elérhető.");
\r
132 throw new NullPointerException("Internal error, missing ItemManager reference.");
\r
134 dao = (MediaFileDAO) manager.getBaseDAO(MediaFile.class);
\r
136 logger.error(getMarker(), "Az adatbáziskezelő réteg MediaFile kezelöje nem elérhető.");
\r
137 throw new NullPointerException("Internal error, missing MediaFile DAO reference.");
\r
139 if (sourcePath == null) {
\r
140 logger.error(getMarker(), "A folyamat 'sourcePath' bemeneti paramétere üres.");
\r
141 throw new NullPointerException("System is not configured properly, 'sourcePath' input parameter missing.");
\r
143 if (targetPath == null) {
\r
144 logger.error(getMarker(), "A folyamat 'targetPath' bemeneti paramétere üres.");
\r
145 throw new NullPointerException("System is not configured properly, 'targetPath' input parameter missing.");
\r
147 this.targetPath = targetPath;
\r