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 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
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
48 if (currentRecords != null)
\r
49 records.addAll(currentRecords);
\r
53 if (records != null && !getJobRuntime().isWaitingCancel()) {
\r
55 for (HarrisRecord record : records) {
\r
57 if (getJobRuntime().isWaitingCancel()) {
\r
62 processRecord(record, targetStoreName, sourceStoreUri, targetStoreUri, escortStoreUri);
\r
64 int progress = i * 100 / records.size();
\r
65 setProgress(progress);
\r
69 } catch (Exception e) {
\r
70 logger.error(getSessionMarker(), e.getMessage());
\r
73 if (escortStoreUri != null)
\r
74 escortStoreUri.cleanUp();
\r
80 private void processRecord(HarrisRecord record, String targetStoreName, StoreUri sourceStoreUri, StoreUri targetStoreUri, StoreUri escortStoreUri) {
\r
81 Media media = getManager().getMedia(record.getFileName());
\r
83 String fileName = record.getFileName();
\r
84 if (StringUtils.isNotBlank(appendExtension))
\r
85 fileName += appendExtension;
\r
87 if (media == null) {
\r
88 logger.warn(getSessionMarker(), "File is not available in archive {}", fileName);
\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
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
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