import org.apache.commons.io.FilenameUtils;\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.Marker;\r
+import org.apache.logging.log4j.MarkerManager;\r
\r
import com.ibm.nosql.json.api.BasicDBObject;\r
\r
import user.commons.IEntityBase;\r
import user.commons.RemoteFile;\r
import user.commons.StoreUri;\r
-import user.commons.mediatool.MediaInfo;\r
import user.commons.remotestore.RemoteStoreProtocol;\r
import user.jobengine.db.Item;\r
import user.jobengine.db.Media;\r
\r
public class SafeDeleteRecursive extends JobStep implements FileVisitor<Path> {\r
private static final Logger logger = LogManager.getLogger();\r
+ private Marker csvMarker = MarkerManager.getMarker("SAFE-DELETE-RECURSIVE-CSV");\r
+\r
private static final String ITEM_TITLE = "itemTitle";\r
private static final String ITEM_HOUSEID = "itemHouseId";\r
private static final String MEDIA_HOUSEID = "mediaHouseId";\r
private static final String MEDIA_DESCRIPTION = "mediaDescription";\r
private static final String MEDIA_TYPE = "mediaType";\r
private static final String KILLDATEEXT = ".killdate";\r
+ private static final String EWC2EXT = ".ewc2";\r
+ private static final String XMPEXT = ".xmp";\r
+\r
private SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");\r
\r
private List<String> skipPathNames = Arrays.asList("!ARCHIVALAS_ALATT", EscortFiles.STATUSFOLDER,\r
EscortFiles.CONFLICTFOLDER);\r
private Set<String> includeList;\r
\r
- private boolean canReadMediaInfo(Path mediaFilePath) {\r
- boolean result = false;\r
- try {\r
- MediaInfo mi = new MediaInfo(mediaFilePath);\r
- mi.process();\r
- result = true;\r
- } catch (Exception e) {\r
- logger.warn(getSessionMarker(), e.getMessage());\r
- }\r
- return result;\r
- }\r
-\r
- private boolean checkArchiveItem(ArchiveItem archiveItem, Item item, Media media) {\r
+ private boolean checkArchiveItem(Path mediaPath, ArchiveItem archiveItem, Item item, Media media) {\r
if (archiveItem == null)\r
return false;\r
\r
String itemHouseId = archiveItem.getItemHouseId() == null ? "" : archiveItem.getItemHouseId();\r
if (!itemHouseId.equals(item.getHouseId())) {\r
- logger.error(getSessionMarker(), "ItemHouseId");\r
+ logger.error(getSessionMarker(), "{} ItemHouseId mismatch", mediaPath);\r
return false;\r
}\r
\r
String itemTitle = archiveItem.getItemTitle() == null ? "" : archiveItem.getItemTitle();\r
if (!itemTitle.equals(item.getTitle())) {\r
- logger.error(getSessionMarker(), "ItemTitle");\r
+ logger.error(getSessionMarker(), "{} ItemTitle mismatch", mediaPath);\r
return false;\r
}\r
String mediaHouseId = archiveItem.getMediaHouseId() == null ? "" : archiveItem.getMediaHouseId();\r
if (!mediaHouseId.equals(media.getHouseId())) {\r
- logger.error(getSessionMarker(), "MediaHouseId");\r
+ logger.error(getSessionMarker(), "{} MediaHouseId mismatch", mediaPath);\r
return false;\r
}\r
String mediaTitle = archiveItem.getMediaTitle() == null ? "" : archiveItem.getMediaTitle();\r
if (!mediaTitle.equals(media.getTitle())) {\r
- logger.error(getSessionMarker(), "MediaTitle");\r
+ logger.error(getSessionMarker(), "{} MediaTitle mismatch", mediaPath);\r
return false;\r
}\r
\r
String mediaDescription = archiveItem.getMediaDescription() == null ? "" : archiveItem.getMediaDescription();\r
String storedMediaDescription = media.getDescription() == null ? "" : media.getDescription();\r
if (!mediaDescription.equals(storedMediaDescription)) {\r
- logger.error(getSessionMarker(), "MediaDescription");\r
+ logger.error(getSessionMarker(), "{} MediaDescription mismatch", mediaPath);\r
return false;\r
}\r
\r
@StepEntry\r
public Object[] execute(String sourcePath) throws Exception {\r
logger.info(getSessionMarker(), "Starting in {}", sourcePath);\r
- logger.info(getSessionMarker(), "{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};", "Napló időbélyeg",\r
- "Neve", "Elérése", "Mérete", "Létrehozva", "Módosítva", "Archiválva (MC)", "Archiválva (TSM)",\r
- "Méret (TSM)", ".catched", ".killdate", ".nomd", "Archivált (MC)", "Archivált (TSM)",\r
- "Metaadat egyezés", "Méret egyezés", "Törölhető", "Kezelendő");\r
+ logger.info(csvMarker, "{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};", "Napló időbélyeg", "Neve",\r
+ "Elérése", "Mérete", "Létrehozva", "Módosítva", "Archiválva (MC)", "Archiválva (TSM)", "Méret (TSM)",\r
+ ".catched", ".killdate", ".nomd", "Archivált (MC)", "Archivált (TSM)", "Metaadat egyezés",\r
+ "Méret egyezés", "Törölhető", "Kezelendő");\r
\r
try {\r
String location = "/opt/test-mediacube/file_list_original.txt";\r
return FileVisitResult.CONTINUE;\r
}\r
\r
+ private boolean removeFile(Path filePath) {\r
+ boolean result = false;\r
+ try {\r
+ File file = filePath.toFile();\r
+ if (file.exists()) {\r
+ logger.info(getSessionMarker(), "Törlés {}", filePath);\r
+ result = true;\r
+ //result = file.delete();\r
+ }\r
+ } catch (Exception e) {\r
+ logger.error(getSessionMarker(), "A {} fájl nem törölhető. A rendszer hibaüzenete: {}", filePath,\r
+ e.getMessage());\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private boolean removeFiles(Path filePath, List<Path> killDateFiles) {\r
+ if (!removeFile(filePath))\r
+ return false;\r
+\r
+ removeFile(Paths.get(filePath.toString() + EWC2EXT));\r
+ removeFile(Paths.get(filePath.toString() + XMPEXT));\r
+ removeFile(Paths.get(filePath.getParent().toString(), EscortFiles.STATUSFOLDER,\r
+ filePath.getFileName().toString() + EscortFiles.DOT_CATCHED));\r
+ removeFile(Paths.get(filePath.getParent().toString(), EscortFiles.STATUSFOLDER,\r
+ filePath.getFileName().toString() + EscortFiles.DOT_JSON));\r
+\r
+ boolean result = true;\r
+ for (Path killDateFile : killDateFiles) {\r
+ if (!removeFile(killDateFile))\r
+ result = false;\r
+ }\r
+\r
+ return result;\r
+ }\r
+\r
private boolean processPathItem(Path mediaPath) throws Exception {\r
if (getJobRuntime().isWaitingCancel()) {\r
cancel();\r
Media media = getManager().getMedia(mediaFile.getMediaId());\r
mcArchivedDate = media.getCreated();\r
Item item = getManager().getItem(media.getItemId());\r
- metadataEquals = checkArchiveItem(archiveItem, item, media);\r
+ metadataEquals = checkArchiveItem(mediaPath, archiveItem, item, media);\r
\r
//tsm\r
String tsmFileName = mediaFile.getRelativePath();\r
boolean canDelete = !noMDExists && catchedExists && killdateExists && mcArchived && tsmArchived\r
&& metadataEquals;\r
Date now = new Date(System.currentTimeMillis());\r
- logger.info(getSessionMarker(), "{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};", D(now), fileName,\r
+ logger.info(csvMarker, "{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};", D(now), fileName,\r
mediaPath.getParent(), size, D(createDate), D(lastModifiedDate), D(mcArchivedDate), D(tsmBackupDate),\r
tsmSize, YN(catchedExists), YN(killdateExists), YN(noMDExists), YN(mcArchived), YN(tsmArchived),\r
YN(metadataEquals), YN(sizeEquals), YN(canDelete), YN(includeContains));\r
\r
+ logger.info(getSessionMarker(), "{} {}{}{}{}{}{}{}{}{}", mediaPath, YN(canDelete), YN(catchedExists),\r
+ YN(killdateExists), YN(noMDExists), YN(mcArchived), YN(tsmArchived), YN(metadataEquals), YN(sizeEquals),\r
+ YN(includeContains));\r
+\r
+ if (canDelete)\r
+ removeFiles(mediaPath, killDateFiles);\r
+\r
return true;\r
}\r
\r