d5851f5950c7576d38e039cc4c9d9bf2f4f94bcb
[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                         StoreUri sourceStoreUri = getManager().getStoreUri("TSM", RemoteStoreProtocol.TSM);\r
34                         List<HarrisRecord> records = null;\r
35                         for (Object vicFile : vicFiles) {\r
36                                 if (getJobRuntime().isWaitingCancel()) {\r
37                                         cancel();\r
38                                         break;\r
39                                 }\r
40 \r
41                                 Path vicFilePath = Paths.get(String.valueOf(vicFile));\r
42                                 logger.info("Processing {} (exists: {})", vicFilePath, vicFilePath.toFile().exists());\r
43                                 VICFileParser parser = new VICFileParser(vicFilePath, lineFormat, validTypeCodes);\r
44                                 List<HarrisRecord> currentRecords = parser.getRecords();\r
45                                 if (records == null)\r
46                                         records = currentRecords;\r
47                                 else {\r
48                                         if (currentRecords != null)\r
49                                                 records.addAll(currentRecords);\r
50                                 }\r
51                         }\r
52 \r
53                         if (records != null && !getJobRuntime().isWaitingCancel()) {\r
54                                 int i = 0;\r
55                                 for (HarrisRecord record : records) {\r
56 \r
57                                         if (getJobRuntime().isWaitingCancel()) {\r
58                                                 cancel();\r
59                                                 break;\r
60                                         }\r
61 \r
62                                         processRecord(record, targetStoreName, sourceStoreUri, targetStoreUri, escortStoreUri);\r
63                                         i++;\r
64                                         int progress = i * 100 / records.size();\r
65                                         setProgress(progress);\r
66                                 }\r
67                         }\r
68                         setProgress(100);\r
69                 } catch (Exception e) {\r
70                         logger.error(getSessionMarker(), e.getMessage());\r
71                         throw e;\r
72                 } finally {\r
73                         if (escortStoreUri != null)\r
74                                 escortStoreUri.cleanUp();\r
75                 }\r
76 \r
77                 return null;\r
78         }\r
79 \r
80         private void processRecord(HarrisRecord record, String targetStoreName, StoreUri sourceStoreUri, StoreUri targetStoreUri, StoreUri escortStoreUri) {\r
81                 Media media = getManager().getMedia(record.getFileName());\r
82 \r
83                 String fileName = record.getFileName();\r
84                 if (StringUtils.isNotBlank(appendExtension))\r
85                         fileName += appendExtension;\r
86 \r
87                 if (media == null) {\r
88                         logger.warn(getSessionMarker(), "File is not available in archive {}", fileName);\r
89                         return;\r
90                 }\r
91 \r
92                 DownloadableMedia downloadable = DownloadableMedia.create(media.getTitle(), fileName, media.getModified(), media.getCreated(), media.getLength(), 0L,\r
93                                 sourceStoreUri.getId(), targetStoreUri.getId(), media.getId());\r
94                 downloadable.put("priority", 100);\r
95                 String escortFileName = targetStoreName + "." + downloadable.getString("fileName");\r
96                 String outputPath = null;\r
97                 try {\r
98                         outputPath = Paths.get(escortStoreUri.toString(true)).toString();\r
99                         if (EscortFiles.createMetadataIfNotExists(outputPath, escortFileName, downloadable.toPrettyString("")))\r
100                                 logger.info(getSessionMarker(), "Status file created {}", escortFileName);\r
101                         else\r
102                                 logger.info(getSessionMarker(), "Status file already exists {}", escortFileName);\r
103                 } catch (Exception e) {\r
104                         logger.error("Can't create escort file {}", Paths.get(outputPath.toString(), escortFileName));\r
105                 }\r
106 \r
107         }\r
108 \r
109 }\r