1 package user.jobengine.server.steps;
\r
3 import java.nio.file.Paths;
\r
4 import java.util.ArrayList;
\r
5 import java.util.LinkedHashSet;
\r
6 import java.util.List;
\r
8 import org.apache.commons.lang.StringUtils;
\r
9 import org.apache.logging.log4j.LogManager;
\r
10 import org.apache.logging.log4j.Logger;
\r
12 import user.commons.DownloadableMedia;
\r
13 import user.commons.RemoteFile;
\r
14 import user.commons.StoreUri;
\r
15 import user.commons.remotestore.RemoteStoreProtocol;
\r
16 import user.jobengine.db.Media;
\r
18 public class PeableBeachMissingMaterialCheckerStep extends JobStep {
\r
19 private static final Logger logger = LogManager.getLogger();
\r
20 private static final String appendExtension = System.getProperty("missingmaterial.appendextension", ".mxf");
\r
23 public Object[] execute(String escortStoreName, String targetStoreName, String targetProtocol, String primaryEndPoint, String primaryUserName,
\r
24 String primaryPassword, String secondaryEndPoint, String secondaryUserName, String secondaryPassword, int rangeForwardHours) throws Exception {
\r
25 StoreUri escortStoreUri = null;
\r
27 escortStoreUri = getManager().getStoreUri(escortStoreName, RemoteStoreProtocol.LOCAL);
\r
28 StoreUri sourceStoreUri = getManager().getStoreUri("TSM", RemoteStoreProtocol.TSM);
\r
29 StoreUri targetStoreUri = getManager().getStoreUri(targetStoreName, Enum.valueOf(RemoteStoreProtocol.class, targetProtocol));
\r
31 List<String> poolContent = new ArrayList<>();
\r
33 PBQuery query = new PBQuery();
\r
34 query.init(primaryEndPoint, primaryUserName, primaryPassword, secondaryEndPoint, secondaryUserName, secondaryPassword, rangeForwardHours);
\r
35 LinkedHashSet<String> titles = query.getPossibelMissingMaterialNames(poolContent);
\r
36 logger.info(getMarker(), "API returned {} items", titles == null ? 0 : titles.size());
\r
38 if (titles != null && titles.size() > 0) {
\r
40 List<RemoteFile> remoteFiles = targetStoreUri.getRemoteFiles();
\r
41 if (remoteFiles != null)
\r
42 remoteFiles.forEach(i -> {
\r
43 String name = i.getName();
\r
44 poolContent.add(name.substring(0, name.lastIndexOf(".")));
\r
47 logger.info(getMarker(), "Pool contains {} items", poolContent == null ? 0 : poolContent.size());
\r
49 if (!getJobRuntime().isWaitingCancel()) {
\r
50 int count = titles.size();
\r
52 for (String title : titles) {
\r
53 processRecord(title, sourceStoreUri, targetStoreName, targetStoreUri, escortStoreUri);
\r
55 int progress = processed * 100 / count;
\r
56 setProgress(progress);
\r
62 } catch (Exception e) {
\r
63 logger.error(getSessionMarker(), e.getMessage());
\r
66 if (escortStoreUri != null)
\r
67 escortStoreUri.cleanUp();
\r
73 private void processRecord(String title, StoreUri sourceStoreUri, String targetStoreName, StoreUri targetStoreUri, StoreUri escortStoreUri) {
\r
74 //TODO kisbetu/nagybetu problema kezelese
\r
75 Media media = getManager().getMedia(title);
\r
77 String fileName = normalizeName(title);
\r
79 if (media == null) {
\r
80 logger.error(getMarker(), "File {} not archived yet", fileName);
\r
84 DownloadableMedia downloadable = DownloadableMedia.create(title, fileName, media.getModified(), media.getCreated(), media.getLength(), 0L,
\r
85 sourceStoreUri.getId(), targetStoreUri.getId(), media.getId());
\r
86 String escortFileName = targetStoreName + "." + downloadable.getString("fileName");
\r
87 String outputPath = null;
\r
89 outputPath = Paths.get(escortStoreUri.toString(true)).toString();
\r
90 EscortFiles.createMetadataIfNotExists(outputPath, escortFileName, downloadable.toPrettyString(""));
\r
91 } catch (Exception e) {
\r
92 logger.error(getSessionMarker(), "Can't create escort file {}", Paths.get(outputPath.toString(), escortFileName));
\r
98 private String normalizeName(String mediaName) {
\r
99 String result = mediaName;
\r
100 if (StringUtils.isNotBlank(appendExtension))
\r
101 result += appendExtension;
\r
102 // if (StringUtils.isNotBlank(mediaName)) {
\r
103 // result = mediaName.trim().toLowerCase();
\r