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 com.ibm.nosql.json.api.BasicDBList;
\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
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
28 public Object[] execute(BasicDBList vicFiles, String escortStoreName, String targetStoreName, String targetProtocol) throws Exception {
\r
29 StoreUri escortStoreUri = null;
\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
41 records.addAll(parser.getRecords());
\r
45 for (HarrisRecord record : records) {
\r
46 processRecord(record, targetStoreName, targetStoreUri, escortStoreUri);
\r
48 int progress = i * 100 / records.size();
\r
49 setProgress(progress);
\r
52 } catch (Exception e) {
\r
53 logger.error(getSessionMarker(), e.getMessage());
\r
54 logger.error(e.getMessage());
\r
57 if (escortStoreUri != null)
\r
58 escortStoreUri.cleanUp();
\r
64 private void processRecord(HarrisRecord record, String targetStoreName, StoreUri targetStoreUri, StoreUri escortStoreUri) {
\r
65 Media media = getManager().getMedia(record.getFileName());
\r
67 String fileName = record.getFileName();
\r
68 if (StringUtils.isNotBlank(appendExtension))
\r
69 fileName += appendExtension;
\r
71 if (media == null) {
\r
72 logger.warn(getSessionMarker(), "File is not available in archive {}", fileName);
\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
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
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