1 package user.jobengine.server.steps;
\r
3 import java.nio.file.Path;
\r
4 import java.nio.file.Paths;
\r
5 import java.util.List;
\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
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
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
26 public Object[] execute(String[] vicFiles, String escortStoreName, String targetStoreName, String targetProtocol) throws Exception {
\r
27 StoreUri escortStoreUri = null;
\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
38 records.addAll(parser.getRecords());
\r
42 for (HarrisRecord record : records) {
\r
43 processRecord(record, targetStoreName, targetStoreUri, escortStoreUri);
\r
45 int progress = i * 100 / records.size();
\r
46 setProgress(progress);
\r
49 } catch (Exception e) {
\r
50 logger.error(getSessionMarker(), e.getMessage());
\r
53 if (escortStoreUri != null)
\r
54 escortStoreUri.cleanUp();
\r
60 private void processRecord(HarrisRecord record, String targetStoreName, StoreUri targetStoreUri, StoreUri escortStoreUri) {
\r
61 Media media = getManager().getMedia(record.getFileName());
\r
63 String fileName = record.getFileName();
\r
64 if (StringUtils.isNotBlank(appendExtension))
\r
65 fileName += appendExtension;
\r
67 if (media == null) {
\r
68 logger.error(getSessionMarker(), "File {} not archived yet", fileName);
\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
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