1acca884cab065907bff34ae88e0439ecc2982f4
[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 com.ibm.nosql.json.api.BasicDBList;\r
12 \r
13 import user.commons.DownloadableMedia;\r
14 import user.commons.StoreUri;\r
15 import user.commons.harris.HarrisRecord;\r
16 import user.commons.harris.VICFileParser;\r
17 import user.commons.remotestore.RemoteStoreProtocol;\r
18 import user.jobengine.db.Media;\r
19 \r
20 public class HarrisMissingMaterialCheckerStep extends JobStep {\r
21         private static final Logger logger = LogManager.getLogger();\r
22         private static final String lineFormat = System.getProperty("harris.vic.lineformat",\r
23                         "A TTTTTTTT     LLLLLLLLLLL MMMMMMMMMMMMMMMMMMMMMMM X   DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD");\r
24         private static final String validTypeCodes = System.getProperty("harris.vic.validtypecodes", "SPACE,E");\r
25         private static final String appendExtension = System.getProperty("missingmaterial.appendextension", ".mxf");\r
26 \r
27         @StepEntry\r
28         public Object[] execute(BasicDBList vicFiles, String escortStoreName, String targetStoreName, String targetProtocol) throws Exception {\r
29                 StoreUri escortStoreUri = null;\r
30                 try {\r
31                         escortStoreUri = getManager().getStoreUri(escortStoreName, RemoteStoreProtocol.LOCAL);\r
32                         StoreUri targetStoreUri = getManager().getStoreUri(targetStoreName, Enum.valueOf(RemoteStoreProtocol.class, targetProtocol));\r
33                         List<HarrisRecord> records = null;\r
34                         for (Object vicFile : vicFiles) {\r
35                                 Path vicFilePath = Paths.get(String.valueOf(vicFile));\r
36                                 logger.info("Processing {} (exists: {})", vicFilePath, vicFilePath.toFile().exists());\r
37                                 VICFileParser parser = new VICFileParser(vicFilePath, lineFormat, validTypeCodes);\r
38                                 if (records == null)\r
39                                         records = parser.getRecords();\r
40                                 else\r
41                                         records.addAll(parser.getRecords());\r
42                         }\r
43 \r
44                         int i = 0;\r
45                         for (HarrisRecord record : records) {\r
46                                 processRecord(record, targetStoreName, targetStoreUri, escortStoreUri);\r
47                                 i++;\r
48                                 int progress = i * 100 / records.size();\r
49                                 setProgress(progress);\r
50                         }\r
51 \r
52                 } catch (Exception e) {\r
53                         logger.error(getSessionMarker(), e.getMessage());\r
54                         logger.error(e.getMessage());\r
55                         throw e;\r
56                 } finally {\r
57                         if (escortStoreUri != null)\r
58                                 escortStoreUri.cleanUp();\r
59                 }\r
60 \r
61                 return null;\r
62         }\r
63 \r
64         private void processRecord(HarrisRecord record, String targetStoreName, StoreUri targetStoreUri, StoreUri escortStoreUri) {\r
65                 Media media = getManager().getMedia(record.getFileName());\r
66 \r
67                 String fileName = record.getFileName();\r
68                 if (StringUtils.isNotBlank(appendExtension))\r
69                         fileName += appendExtension;\r
70 \r
71                 if (media == null) {\r
72                         logger.warn(getSessionMarker(), "File is not available in archive {}", fileName);\r
73                         return;\r
74                 }\r
75 \r
76                 DownloadableMedia downloadable = DownloadableMedia.create(media.getTitle(), fileName, media.getModified(), media.getCreated(), media.getLength(), 0L,\r
77                                 targetStoreUri.getId(), media.getId());\r
78                 String escortFileName = targetStoreName + "." + downloadable.getString("fileName");\r
79                 String outputPath = null;\r
80                 try {\r
81                         outputPath = Paths.get(escortStoreUri.toString(true)).toString();\r
82                         if (EscortFiles.createMetadataIfNotExists(outputPath, escortFileName, downloadable.toPrettyString("")))\r
83                                 logger.info(getSessionMarker(), "Status file created {}", escortFileName);\r
84                         else\r
85                                 logger.info(getSessionMarker(), "Status file already exists {}", escortFileName);\r
86                 } catch (Exception e) {\r
87                         logger.error("Can't create escort file {}", Paths.get(outputPath.toString(), escortFileName));\r
88                 }\r
89 \r
90         }\r
91 \r
92 }\r