import user.jobengine.server.JobEngineException;\r
import user.jobengine.server.steps.shared.EscortFiles;\r
import user.jobengine.server.steps.shared.ItemManagerExtensions;\r
+import user.jobengine.server.steps.shared.MetadataSaver;\r
\r
public class TSMBackupStep extends JobStep {\r
private static final String MXFEXT = ".MXF";\r
long existingMediaId = archiveItem.getExistingMediaId();\r
\r
if (fileSize == 0 && existingMediaId == 0) {\r
- existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager,\r
- sourceFileName.replace(MXFEXT, ""));\r
+ existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, sourceFileName.replace(MXFEXT, ""));\r
if (existingMediaId == 0)\r
existingMediaId = -1;\r
}\r
\r
if (existingMediaId == 0)\r
- existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager,\r
- sourceFileName.replace(MXFEXT, ""));\r
+ existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, sourceFileName.replace(MXFEXT, ""));\r
String targetFileName;\r
if (RANDOMIZE_ARCHIVES) {\r
// a-z, A-Z, 0-9. For example: WRMcpIk7, s57JwCVA\r
targetFileName = sourceFileName;\r
\r
if (existingMediaId == 0) {\r
- StoreUri sourceUri = manager.createStoreUri(RemoteStoreProtocol.LOCAL,\r
- sourceMediaFile.getParent().toString());\r
+ StoreUri sourceUri = manager.createStoreUri(RemoteStoreProtocol.LOCAL, sourceMediaFile.getParent().toString());\r
\r
final IJobRuntime runtime = getJobRuntime();\r
sourceUri.addProgressListener(new IProgressEventListener() {\r
});\r
\r
RemoteFile remoteFile = sourceUri.transferFrom(targetUri, sourceFileName, targetFileName);\r
+\r
+ if (RemoteStoreProtocol.LOCAL.equals(sourceUri.getProtocol())) {\r
+ MetadataSaver.saveMetadata(archiveItem.getMediaFile());\r
+ }\r
+\r
}\r
\r
if (existingMediaId > 0)\r
- logger.info(marker, "Az '{}' TSM mentése nem szükséges, mert már megtalálható az archívumban.",\r
- sourceFileName);\r
+ logger.info(marker, "Az '{}' TSM mentése nem szükséges, mert már megtalálható az archívumban.", sourceFileName);\r
\r
// Fel kell szabadítani, hogy a kovetkezo archivalaskor is nekifusson\r
if (existingMediaId == -1) {\r
- logger.info(marker,\r
- "Az '{}' mentése jelenleg nem lehetséges, mert a szükséges metaadat még nem található meg az archívumban.",\r
- sourceFileName);\r
+ logger.info(marker, "Az '{}' mentése jelenleg nem lehetséges, mert a szükséges metaadat még nem található meg az archívumban.", sourceFileName);\r
if (!archiveItem.removeCatchedFile())\r
logger.error(marker,\r
"Az '{}' állomány .catched jelző állománya nem törölhető. Az újabb archiválási kísérlethez annak kézi eltávolítása szükséges!",\r
sourceMediaFile.getName());\r
mediaCubeMedia.remove();\r
} else {\r
- saveMetadata(mediaCubeMedia, sourceMediaFile, targetFileName, existingMediaId, fileSize,\r
- archiveItem.isDisableProxy());\r
+ saveMetadata(mediaCubeMedia, sourceMediaFile, targetFileName, existingMediaId, fileSize, archiveItem.isDisableProxy());\r
logger.info(marker, "Az '{}' archiválása sikeres.", sourceFileName);\r
if (killDateDays != 0)\r
EscortFiles.createUNCKillDate(sourceMediaFile.getParent(), sourceFileName, killDateDays, marker);\r
\r
} catch (Exception e) {\r
logger.catching(e);\r
- Message m = new ParameterizedMessage("Az '{}' állomány archiválása sikertelen. A rendszer hibaüzenete: {}",\r
- details, e.getMessage());\r
+ Message m = new ParameterizedMessage("Az '{}' állomány archiválása sikertelen. A rendszer hibaüzenete: {}", details, e.getMessage());\r
logger.error(marker, m);\r
if (!archiveItem.removeCatchedFile())\r
logger.error(marker,\r
return null;\r
}\r
\r
- private void saveMetadata(Media mediaCubeMedia, File sourceFile, String targetFileName, long existingMediaId,\r
- long fileSize, boolean disableProxy) {\r
+ private void saveMetadata(Media mediaCubeMedia, File sourceFile, String targetFileName, long existingMediaId, long fileSize, boolean disableProxy) {\r
\r
if (existingMediaId == 0) {\r
MediaFile mf = manager.createMediaFile(targetFileName, fileType, tsmStore, mediaCubeMedia);\r
mediaCubeMedia.modify();\r
}\r
\r
- private void setAndCheck(ArchiveItem archiveItem, Media mediaCubeMedia, IJobEngine jobEngine)\r
- throws JobEngineException, IOException {\r
+ private void setAndCheck(ArchiveItem archiveItem, Media mediaCubeMedia, IJobEngine jobEngine) throws JobEngineException, IOException {\r
if (jobEngine == null) {\r
logger.error(marker, "Az folyamatkezelő réteg nem elérhető.");\r
throw new NullPointerException("Internal error, missing JobEngine reference.");\r
sourceMediaFile = new File(archiveItem.getMediaFile());\r
if (sourceMediaFile == null) {\r
logger.error(marker, "A folyamat 'archiveItem' bemeneti paraméter 'mediaFile' értéke üres.");\r
- throw new NullPointerException(\r
- "System is not configured properly, missing 'mediaFile' value in 'archiveItem' input parameter.");\r
+ throw new NullPointerException("System is not configured properly, missing 'mediaFile' value in 'archiveItem' input parameter.");\r
}\r
if (!sourceMediaFile.exists()) {\r
logger.error(marker, "A(z) {} állomány nem létezik vagy nem érhető el.", sourceMediaFile.getName());\r
- throw new IOException(\r
- String.format("Input file {} does not exist or unreachable.", sourceMediaFile.getName()));\r
+ throw new IOException(String.format("Input file {} does not exist or unreachable.", sourceMediaFile.getName()));\r
}\r
tsmStore = manager.getSystemStore(false);\r
if (tsmStore == null) {\r
}\r
if (mediaCubeMedia == null) {\r
logger.error(marker, "A folyamat 'mediaCubeMedia' bemeneti paramétere üres.");\r
- throw new NullPointerException(\r
- "System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
+ throw new NullPointerException("System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
}\r
\r
}\r
package user.jobengine.server.steps;\r
\r
import java.io.IOException;\r
+import java.nio.file.Path;\r
import java.nio.file.Paths;\r
import java.text.Normalizer;\r
import java.util.List;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
import user.jobengine.server.steps.shared.EscortFiles;\r
+import user.jobengine.server.steps.shared.MetadataSaver;\r
\r
public class TSMRestoreStep extends JobStep {\r
private static final String DOT = ".";\r
protected void afterRestore(StoreUri targetUri, String targetPath, int killDateDays, String targetFileName) throws IOException, Exception {\r
if (killDateDays != 0)\r
EscortFiles.createUNCKillDate(targetPath, targetFileName, killDateDays, marker);\r
+\r
+ if (RemoteStoreProtocol.LOCAL.equals(targetUri.getProtocol())) {\r
+ Path path = Paths.get(targetPath, targetFileName);\r
+ MetadataSaver.saveMetadata(path.toString());\r
+ }\r
+\r
}\r
\r
protected void beforeRestore(StoreUri targetURI, String targetFileName) throws Exception {\r
marker = jobRuntime.getSessionMarker();\r
setAndCheck(mediaCubeMedia, targetPath, targetNamePattern, localRetrievePath, globalRetrievePath, jobEngine);\r
String targetFileName = String.format(targetNamePattern, sourceFileName);\r
- //20210129\r
- //targetFileName = getMaximizedFileName(mediaCubeMedia, targetFileName, 120);\r
+ // 20210129\r
+ // targetFileName = getMaximizedFileName(mediaCubeMedia, targetFileName, 120);\r
\r
Timecode timecode = new Timecode(mediaCubeMedia.getLength(), Type.PAL);\r
try {\r
});\r
RemoteFile result = sourceUri.transferFrom(targetUri, sourceFileName, targetFileName);\r
\r
- String globalTargetPath = Paths.get(targetPath, targetFileName)\r
- .getParent()\r
- .toString()\r
- .replace(Paths.get(localRetrievePath).toString(), globalRetrievePath);\r
+ String globalTargetPath = Paths.get(targetPath, targetFileName).getParent().toString().replace(Paths.get(localRetrievePath).toString(),\r
+ globalRetrievePath);\r
\r
logger.info(marker,\r
"Az '{}' állomány visszatöltése sikeres volt '{}' néven. A célmappa a <a href='{}' target='_blank'>ide kattintva</a> nyitható meg.",\r
package user.jobengine.server.steps;\r
\r
import java.io.IOException;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
import java.util.List;\r
\r
import org.apache.commons.lang.StringUtils;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
import user.jobengine.server.steps.shared.EscortFiles;\r
+import user.jobengine.server.steps.shared.MetadataSaver;\r
\r
public class TSMSystemRestoreStep extends JobStep {\r
private static final Logger logger = LogManager.getLogger();\r
private String sourceFileName;\r
private Marker marker;\r
\r
- protected void afterRestore(StoreUri targetUri, String targetPath, int killDateDays, String targetFileName)\r
- throws IOException, Exception {\r
+ protected void afterRestore(StoreUri targetUri, String targetPath, int killDateDays, String targetFileName) throws IOException, Exception {\r
if (killDateDays > 0)\r
EscortFiles.createUNCKillDate(targetPath, targetFileName, killDateDays, marker);\r
+ if (RemoteStoreProtocol.LOCAL.equals(targetUri.getProtocol())) {\r
+ Path path = Paths.get(targetPath, targetFileName);\r
+ MetadataSaver.saveMetadata(path.toString());\r
+ }\r
}\r
\r
protected void beforeRestore(StoreUri targetURI, String targetFileName) throws Exception {\r
}\r
\r
@StepEntry\r
- public Object[] execute(Media mediaCubeMedia, String targetPath, String targetNamePattern, String successRecipient,\r
- int killDateDays, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ public Object[] execute(Media mediaCubeMedia, String targetPath, String targetNamePattern, String successRecipient, int killDateDays, IJobEngine jobEngine,\r
+ IJobRuntime jobRuntime) throws Exception {\r
marker = jobRuntime.getSessionMarker();\r
setAndCheck(mediaCubeMedia, targetPath, targetNamePattern, jobEngine);\r
String targetFileName = String.format(targetNamePattern, sourceFileName);\r
});\r
RemoteFile result = sourceUri.transferFrom(targetUri, sourceFileName, targetFileName);\r
\r
- Message msg = LogUtils.format("Az '{}' állomány visszatöltése sikeres volt '{}' néven. ", sourceFileName,\r
- targetFileName);\r
+ Message msg = LogUtils.format("Az '{}' állomány visszatöltése sikeres volt '{}' néven. ", sourceFileName, targetFileName);\r
if (StringUtils.isNotBlank(successRecipient))\r
logger.info(new MediaCubeMarker(successRecipient), msg);\r
logger.info(marker, msg);\r
afterRestore(targetUri, targetPath, killDateDays, targetFileName);\r
\r
} catch (Exception e) {\r
- Message msg = LogUtils.format("Az '{}' állomány visszatöltése sikertelen. A rendszer hibaüzenete: {}",\r
- sourceFileName, e.getMessage());\r
+ Message msg = LogUtils.format("Az '{}' állomány visszatöltése sikertelen. A rendszer hibaüzenete: {}", sourceFileName, e.getMessage());\r
logger.error(marker, msg);\r
// logger.error(jobRuntime.marker, msg);\r
logger.catching(e);\r
}\r
if (mediaCubeMedia == null) {\r
logger.error(marker, "A folyamat 'mediaCubeMedia' bemeneti paramétere üres.");\r
- throw new NullPointerException(\r
- "System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
+ throw new NullPointerException("System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
}\r
checkTargetPath(targetPath);\r
if (StringUtils.isBlank(targetNamePattern)) {\r
logger.error(marker, "A folyamat 'targetNamePattern' bemeneti paramétere üres.");\r
- throw new NullPointerException(\r
- "System is not configured properly, 'targetNamePattern' input parameter missing.");\r
+ throw new NullPointerException("System is not configured properly, 'targetNamePattern' input parameter missing.");\r
}\r
Store tsmStore = manager.getSystemStore(false);\r
if (tsmStore == null) {\r
--- /dev/null
+package user.jobengine.server.steps.shared;\r
+\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+import com.ibm.nosql.json.api.DB;\r
+import com.ibm.nosql.json.api.DBCollection;\r
+\r
+import user.commons.mediaarea.MediaArea;\r
+import user.commons.nosql.NoSQLUtils;\r
+\r
+public class MetadataSaver {\r
+\r
+ private static final Logger logger = LogManager.getLogger();\r
+\r
+ public static void saveMetadata(String file) {\r
+ try {\r
+ Path filePath = Paths.get(file);\r
+ logger.info("Analize: {}", filePath);\r
+ if (!Files.exists(filePath))\r
+ return;\r
+\r
+ String fileName = filePath.getFileName().toString();\r
+ DB db = NoSQLUtils.getNoSQLDB();\r
+ DBCollection collection = db.getCollection("metadata");\r
+ long existing = collection.find(new BasicDBObject("fileName", fileName)).count();\r
+ if (existing > 0)\r
+ return;\r
+\r
+ MediaArea mediaArea = new MediaArea(filePath);\r
+ mediaArea.process();\r
+ BasicDBObject metadata = mediaArea.getInform();\r
+ collection.save(metadata);\r
+ logger.info("Metadata saved for: {}", filePath);\r
+ } catch (Exception e) {\r
+ logger.error("Can't analyze input {}, skipping. System message is: {}", e.getMessage());\r
+ }\r
+ }\r
+}\r