f66aa8a27bcd5c25cd238b96e0275933c98f0df1
[mediacube.git] /
1 package user.jobengine.server.steps;\r
2 \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
7 \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
11 \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
17 \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
21 \r
22         @StepEntry\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
26                 try {\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
30 \r
31                         List<String> poolContent = new ArrayList<>();\r
32 \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
37 \r
38                         if (titles != null && titles.size() > 0) {\r
39 \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
45                                         });\r
46 \r
47                                 logger.info(getMarker(), "Pool contains {} items", poolContent == null ? 0 : poolContent.size());\r
48 \r
49                                 if (!getJobRuntime().isWaitingCancel()) {\r
50                                         int count = titles.size();\r
51                                         int processed = 0;\r
52                                         for (String title : titles) {\r
53                                                 processRecord(title, sourceStoreUri, targetStoreName, targetStoreUri, escortStoreUri);\r
54                                                 processed++;\r
55                                                 int progress = processed * 100 / count;\r
56                                                 setProgress(progress);\r
57                                         }\r
58                                 }\r
59 \r
60                         }\r
61 \r
62                 } catch (Exception e) {\r
63                         logger.error(getSessionMarker(), e.getMessage());\r
64                         throw e;\r
65                 } finally {\r
66                         if (escortStoreUri != null)\r
67                                 escortStoreUri.cleanUp();\r
68                 }\r
69 \r
70                 return null;\r
71         }\r
72 \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
76 \r
77                 String fileName = normalizeName(title);\r
78 \r
79                 if (media == null) {\r
80                         logger.error(getMarker(), "File {} not archived yet", fileName);\r
81                         return;\r
82                 }\r
83 \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
88                 try {\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
93                 }\r
94 \r
95         }\r
96 \r
97         //csak visszaterunk\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
104                 //              }\r
105                 return result;\r
106         }\r
107 \r
108 }\r