01e071a694c09eb77541bf763e753a9cdedf354c
[mediacube.git] /
1 package user.jobengine.server.steps;\r
2 \r
3 import java.io.File;\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
12 \r
13 import org.apache.logging.log4j.LogManager;\r
14 import org.apache.logging.log4j.Logger;\r
15 \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
23 \r
24 public class CheckMORPHEUSMissingMaterialsStep extends JobStep {\r
25         private static final String MATERIAL_ID = "Material ID";\r
26         private static final Logger logger = LogManager.getLogger();\r
27         private static final String RETRIEVE_MATERIAL = "Adásanyag visszatöltés";\r
28         private static final String OUTPUT_PATH = "outputPath";\r
29         private static final String MEDIA_CUBE_MEDIA = "mediaCubeMedia";\r
30         private static final String JOBTEMPLATE = "retrieve-material.xml";\r
31         private static final String CSV_EXT = ".mxf";\r
32         private String outputPath;\r
33         private MediaFileDAO dao;\r
34         private IJobEngine jobEngine;\r
35 \r
36         @StepEntry\r
37         public Object[] execute(String inputFolder, String outputPath, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
38 \r
39                 this.outputPath = outputPath;\r
40                 this.jobEngine = jobEngine;\r
41                 IItemManager manager = jobEngine.getItemManager();\r
42                 dao = (MediaFileDAO) manager.getBaseDAO(MediaFile.class);\r
43                 DirectoryStream<Path> directoryStream = null;\r
44                 try {\r
45                         Files.newDirectoryStream(Paths.get(inputFolder)).forEach(p -> processPathItem(p));\r
46                 } catch (Exception e) {\r
47                         logger.error("", e);\r
48                 } finally {\r
49                         if (directoryStream != null) {\r
50                                 try {\r
51                                         directoryStream.close();\r
52                                 } catch (IOException e) {\r
53                                 }\r
54                         }\r
55                 }\r
56                 return null;\r
57         }\r
58 \r
59         private void processMediaId(String mediaId) throws Exception {\r
60                 List<IEntityBase> medias = dao.getByHouseId(mediaId);\r
61                 if (medias == null || medias.size() == 0) {\r
62                         logger.error(getMarker(), "Az {} anyag nem található az archívumban.", mediaId);\r
63                         return;\r
64                 }\r
65 \r
66                 if (medias.size() > 0) {\r
67                         logger.error(getMarker(), "Az {} anyagból egynél több található az archívumban.", mediaId);\r
68                         return;\r
69                 }\r
70 \r
71                 jobEngine.submit(JOBTEMPLATE, RETRIEVE_MATERIAL, ListUtils.asMap(MEDIA_CUBE_MEDIA, medias.get(0), OUTPUT_PATH, outputPath));\r
72         }\r
73 \r
74         private void processMissingMaterialCSV(Path csvFilePath) throws Exception {\r
75                 List<String> lines = Files.readAllLines(csvFilePath, Charset.forName("UTF-8"));\r
76                 if (lines == null | lines.size() == 0) {\r
77                         return;\r
78                 }\r
79 \r
80                 int mediaIdPosition = -1;\r
81                 for (int i = 0; i < lines.size(); i++) {\r
82                         String line = lines.get(i);\r
83                         if (line == null)\r
84                                 continue;\r
85                         String[] data = line.split("\\t");\r
86                         if (i == 0) {\r
87                                 //Channel,Time to Air,Duration,Material ID,Title,Device ID,Reason,\r
88                                 List<String> dataList = Arrays.asList(data);\r
89                                 mediaIdPosition = dataList.indexOf(MATERIAL_ID);\r
90                                 if (mediaIdPosition < 0) {\r
91                                         logger.error(getMarker(), "A {} MORPHEUS állományban nem található a 'Material ID' mező.", csvFilePath.toFile().getName());\r
92                                         break;\r
93                                 }\r
94                         } else {\r
95                                 processMediaId(data[mediaIdPosition]);\r
96                         }\r
97                 }\r
98         }\r
99 \r
100         private void processPathItem(Path csvFilePath) {\r
101                 File csvFile = csvFilePath.toFile();\r
102 \r
103                 if (csvFile.isDirectory() || !csvFile.getName().toLowerCase().endsWith(CSV_EXT.toLowerCase())) {\r
104                         return;\r
105                 }\r
106 \r
107                 try {\r
108                         processMissingMaterialCSV(csvFilePath);\r
109                 } catch (Exception e) {\r
110                         logger.catching(e);\r
111                         logger.error(getMarker(), "A {} MORPHEUS állomány feldolgozásakor hiba történt. A rendszer hibaüzenete: {}.", csvFile.getName(), e.getMessage());\r
112                 }\r
113 \r
114                 if (!csvFile.delete())\r
115                         logger.error(getMarker(), "A {} MORPHEUS állomány nem törölhető.", csvFile.getName());\r
116         }\r
117 \r
118 }\r