ff4d2a07d9caa57a7c778b84be7b94776e522bcf
[mediacube.git] /
1 package user.jobengine.server.steps;\r
2 \r
3 import java.nio.file.Path;\r
4 import java.nio.file.Paths;\r
5 import java.util.List;\r
6 \r
7 import org.apache.commons.lang.StringUtils;\r
8 import org.apache.logging.log4j.LogManager;\r
9 import org.apache.logging.log4j.Logger;\r
10 \r
11 import user.commons.StoreUri;\r
12 import user.commons.UploadableMedia;\r
13 import user.commons.harris.HarrisRecord;\r
14 import user.commons.harris.VICFileParser;\r
15 import user.commons.remotestore.RemoteStoreProtocol;\r
16 import user.jobengine.db.Media;\r
17 \r
18 public class NEXIOMissingMaterialCheckerStep extends JobStep {\r
19         private static final Logger logger = LogManager.getLogger();\r
20         private static final String lineFormat = System.getProperty("harris.vic.lineformat",\r
21                         "A TTTTTTTT     LLLLLLLLLLL MMMMMMMMMMMMMMMMMMMMMMM X   DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD");\r
22         private static final String validTypeCodes = System.getProperty("harris.vic.validtypecodes", "SPACE,E");\r
23         private static final String appendExtension = System.getProperty("harris.vic.appendextension", ".mxf");\r
24 \r
25         @StepEntry\r
26         public Object[] execute(String[] vicFiles, String escortStoreName, String targetStoreName, String targetProtocol) throws Exception {\r
27                 StoreUri escortStoreUri = null;\r
28                 try {\r
29                         escortStoreUri = getManager().getStoreUri(escortStoreName, RemoteStoreProtocol.LOCAL);\r
30                         StoreUri targetStoreUri = getManager().getStoreUri(targetStoreName, Enum.valueOf(RemoteStoreProtocol.class, targetProtocol));\r
31                         List<HarrisRecord> records = null;\r
32                         for (String vicFile : vicFiles) {\r
33                                 Path vicFilePath = Paths.get(vicFile);\r
34                                 VICFileParser parser = new VICFileParser(vicFilePath, lineFormat, validTypeCodes);\r
35                                 if (records == null)\r
36                                         records = parser.getRecords();\r
37                                 else\r
38                                         records.addAll(parser.getRecords());\r
39                         }\r
40 \r
41                         int i = 0;\r
42                         for (HarrisRecord record : records) {\r
43                                 processRecord(record, targetStoreName, targetStoreUri, escortStoreUri);\r
44                                 i++;\r
45                                 int progress = i * 100 / records.size();\r
46                                 setProgress(progress);\r
47                         }\r
48 \r
49                 } catch (Exception e) {\r
50                         logger.error(getSessionMarker(), e.getMessage());\r
51                         throw e;\r
52                 } finally {\r
53                         if (escortStoreUri != null)\r
54                                 escortStoreUri.cleanUp();\r
55                 }\r
56 \r
57                 return null;\r
58         }\r
59 \r
60         private void processRecord(HarrisRecord record, String targetStoreName, StoreUri targetStoreUri, StoreUri escortStoreUri) {\r
61                 Media media = getManager().getMedia(record.getFileName());\r
62 \r
63                 String fileName = record.getFileName();\r
64                 if (StringUtils.isNotBlank(appendExtension))\r
65                         fileName += appendExtension;\r
66 \r
67                 if (media == null) {\r
68                         logger.error(getSessionMarker(), "File {} not archived yet", fileName);\r
69                         return;\r
70                 }\r
71 \r
72                 UploadableMedia uploadable = UploadableMedia.create(record.getFileName(), fileName, targetStoreUri.getId(), media.getId());\r
73                 String escortFileName = targetStoreName + "." + uploadable.getString("fileName");\r
74                 String outputPath = null;\r
75                 try {\r
76                         outputPath = Paths.get(escortStoreUri.toString(true)).toString();\r
77                         EscortFiles.createMetadataIfNotExists(outputPath, escortFileName, uploadable.toPrettyString(""));\r
78                 } catch (Exception e) {\r
79                         logger.error("Can't create escort file {}", Paths.get(outputPath.toString(), escortFileName));\r
80                 }\r
81 \r
82         }\r
83 \r
84 }\r