import java.nio.file.attribute.BasicFileAttributes;\r
import java.text.SimpleDateFormat;\r
import java.util.Arrays;\r
+import java.util.HashSet;\r
import java.util.List;\r
import java.util.Map;\r
+import java.util.Set;\r
\r
import org.apache.commons.io.FilenameUtils;\r
import org.apache.commons.lang.StringUtils;\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.message.Message;\r
+import org.apache.logging.log4j.message.ParameterizedMessage;\r
\r
import com.ibm.nosql.json.api.BasicDBObject;\r
\r
import user.commons.JobStatus;\r
import user.commons.ListUtils;\r
+import user.commons.MediaCubeMarker;\r
import user.commons.mediatool.MediaInfo;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
private static final String KILL_DATE_DAYS = "killDateDays";\r
private SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd");\r
\r
- private List<String> skipPathNames = Arrays.asList("!ARCHIVALAS_ALATT", "VASAROLT", EscortFiles.STATUSFOLDER, EscortFiles.CONFLICTFOLDER);\r
+ private List<String> skipPathNames = Arrays.asList("!ARCHIVALAS_ALATT", EscortFiles.STATUSFOLDER,\r
+ EscortFiles.CONFLICTFOLDER);\r
private int limit;\r
private int submitted;\r
private int killDateDays;\r
+ private boolean disableProxy;\r
\r
private boolean canReadMediaInfo(Path mediaFilePath) {\r
boolean result = false;\r
return result;\r
}\r
\r
- private void checkArchiveItem(ArchiveItem archiveItem, Path mediaPath) throws Exception {\r
+ private void checkArchiveItem(ArchiveItem archiveItem) throws Exception {\r
if (archiveItem == null)\r
- throw new Exception(mediaPath + " has no metadata specified.");\r
+ throw new Exception("No metadata specified.");\r
\r
if (StringUtils.isBlank(archiveItem.getItemHouseId()))\r
- throw new Exception(mediaPath + " has no Item HouseID specified in metadata.");\r
+ throw new Exception("No Item HouseID specified in metadata.");\r
\r
if (StringUtils.isBlank(archiveItem.getItemTitle()))\r
- throw new Exception(mediaPath + " has no Item Title specified in metadata.");\r
+ throw new Exception("No Item Title specified in metadata.");\r
\r
if (StringUtils.isBlank(archiveItem.getMediaHouseId()))\r
- throw new Exception(mediaPath + " has no Media HouseID specified in metadata.");\r
+ throw new Exception("No Media HouseID specified in metadata.");\r
\r
if (StringUtils.isBlank(archiveItem.getMediaTitle()))\r
- throw new Exception(mediaPath + " has no Media Title specified in metadata.");\r
+ throw new Exception("No Media Title specified in metadata.");\r
+ }\r
+\r
+ private String archiveItemJSON(ArchiveItem result) {\r
+ BasicDBObject obj = new BasicDBObject();\r
+ obj.put("itemHouseId", result.getItemHouseId());\r
+ obj.put("itemTitle", result.getItemTitle());\r
+ obj.put("mediaHouseId", result.getMediaHouseId());\r
+ obj.put("mediaTitle", result.getMediaTitle());\r
+ obj.put("mediaDescription", result.getMediaDescription());\r
+ obj.put("mediaType", result.getMediaType());\r
+ return obj.toPrettyString("");\r
}\r
\r
private ArchiveItem createArchiveItem(Path filePath) throws Exception {\r
String mediaHouseId = FilenameUtils.removeExtension(fileName);\r
try {\r
result = getPlanAirMetadata(mediaHouseId);\r
- } catch (Exception e) {\r
\r
- logger.error("PlanAir metadata error", e);\r
- //nem latja a drivert pl.\r
+ if (result != null) {\r
+ result.setMediaFile(filePath.toString());\r
+ // 210617 proxy keszites tiltasa\r
+ result.setDisableProxy(disableProxy);\r
+ }\r
+\r
+ logger.info(getSessionMarker(), "PlanAir query done for {}", filePath);\r
+ } catch (Exception e) {\r
+ logger.error(getSessionMarker(), "PlanAir metadata error", e);\r
+ // nem latja a drivert pl.\r
throw e;\r
}\r
\r
- if (result == null) {\r
- result = new ArchiveItem();\r
- BasicFileAttributes attr = Files.readAttributes(filePath, BasicFileAttributes.class);\r
- result.setItemHouseId(df.format(attr.lastModifiedTime().toMillis()));\r
- result.setItemTitle(filePath.getParent().toString());\r
- result.setMediaHouseId(mediaHouseId);\r
- result.setMediaTitle(fileName);\r
- //TODO kesobb kivenni\r
- //result.setMediaDescription("/OMARCHIVE");\r
- result.setMediaType("Generic");\r
- }\r
+//210616 Ha nincs metaadat, nem archivalunk\r
+// if (result == null) {\r
+// result = new ArchiveItem();\r
+// BasicFileAttributes attr = Files.readAttributes(filePath, BasicFileAttributes.class);\r
+// result.setItemHouseId(df.format(attr.lastModifiedTime().toMillis()));\r
+// result.setItemTitle(filePath.getParent().toString());\r
+// result.setMediaHouseId(mediaHouseId);\r
+// result.setMediaTitle(fileName);\r
+// // TODO kesobb kivenni\r
+// // result.setMediaDescription("/OMARCHIVE");\r
+// result.setMediaType("Generic");\r
+// result.setMediaFile(filePath.toString());\r
+// }\r
\r
- result.setMediaFile(filePath.toString());\r
return result;\r
}\r
\r
@StepEntry\r
- public Object[] execute(String sourcePath, int killDateDays, int limit) throws Exception {\r
+ public Object[] execute(String sourcePath, int killDateDays, int limit, boolean disableProxy) throws Exception {\r
this.killDateDays = killDateDays;\r
this.limit = limit;\r
+ this.disableProxy = disableProxy;\r
+ logger.info(getSessionMarker(), "Starting in {}", sourcePath);\r
try {\r
if (getJobRuntime().forkPrepare()) {\r
Files.walkFileTree(Paths.get(sourcePath), this);\r
}\r
} catch (Exception e) {\r
- logger.error(getSessionMarker(), "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", sourcePath, e.getMessage());\r
+ logger.error(getSessionMarker(), "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", sourcePath,\r
+ e.getMessage());\r
} finally {\r
if (submitted > 0)\r
getJobRuntime().forkWaitComplete();\r
else\r
getJobRuntime().cancelForkPrepare();\r
-\r
}\r
return null;\r
}\r
List<IMetadata> data = null;\r
\r
IMetadataProviderFactory factory = getService(IMetadataProviderFactory.class);\r
+ if (factory == null)\r
+ logger.info(getSessionMarker(), "IMetadataProviderFactory is null");\r
+\r
IMetadataProvider planairProvider = factory.getProvider(MetadataProviderType.PLANAIR);\r
+ if (planairProvider == null)\r
+ logger.info(getSessionMarker(), "IMetadataProvider is null");\r
\r
ArchiveItem result = null;\r
data = planairProvider.list(opt);\r
if (getManager().isMediaFileExists(sourceFileName)) {\r
EscortFiles.createMediaCatch(mediaPath);\r
result = true;\r
-\r
- // try {\r
- // Path parent = sourcePath.getParent();\r
- // Path conflictPath = Paths.get(parent.toString(), CONFLICT);\r
- // File folder = conflictPath.toFile();\r
- // if (!folder.exists() || !folder.isDirectory()) {\r
- // Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxrwxrwx");\r
- // FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);\r
- // try {\r
- // Files.createDirectories(conflictPath, attr);\r
- // } catch (Exception e) {\r
- // try {\r
- // Files.createDirectory(conflictPath);\r
- // } catch (Exception e1) {\r
- // logger.catching(e);\r
- // throw e;\r
- // }\r
- // }\r
- // }\r
- //\r
- // Path conflictFile = Paths.get(conflictPath.toString(), sourceFileName);\r
- // if (conflictFile.toFile().exists())\r
- // conflictFile = Paths.get(conflictPath.toString(), sourceFileName + (new Date()).getTime());\r
- // Files.move(sourcePath, conflictFile);\r
- // result = true;\r
- // } catch (Exception e1) {\r
- // logger.error(getSessionMarker(), "Hiba az '{}' állomány mappába mozgatásakor. A rendszer üzenete: {}", CONFLICT, e1.getMessage());\r
- // }\r
}\r
-\r
return result;\r
}\r
\r
}\r
\r
@Override\r
- public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes paramBasicFileAttributes) throws IOException {\r
+ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes paramBasicFileAttributes)\r
+ throws IOException {\r
Path dirName = dir.getFileName();\r
- logger.info("PreVisit {}", dir);\r
\r
- if (skipPathNames.contains(dirName.toString()))\r
+ if (skipPathNames.contains(dirName.toString())) {\r
+ logger.info(getSessionMarker(), "PreVisit skip {}", dir);\r
return FileVisitResult.SKIP_SUBTREE;\r
- else\r
- logger.info("PreVisit {}", dir);\r
+ } else\r
+ logger.info(getSessionMarker(), "PreVisit {}", dir);\r
\r
return FileVisitResult.CONTINUE;\r
}\r
\r
private boolean processPathItem(Path mediaPath) throws Exception {\r
- if (submitted == limit)\r
+ if (limit != 0 && submitted == limit) {\r
+ logger.info(getSessionMarker(), "Limit reached {}, canceling", limit);\r
+ return false;\r
+ }\r
+\r
+ String fileName = mediaPath.getFileName().toString();\r
+ if (fileName.startsWith(".") || fileName.endsWith(".nomd"))\r
return false;\r
\r
- // if (!"Transfered".equals(mediaPath.getParent().getFileName().toString()))\r
- // return false;\r
+ logger.info(getSessionMarker(), "Processing {}", mediaPath);\r
\r
- if (mediaPath.getFileName().toString().startsWith("."))\r
+ File mediaFile = mediaPath.toFile(); \r
+ if (mediaFile.isDirectory()) {\r
+ //logger.info(getSessionMarker(), "Skipping directory {}", mediaPath);\r
return false;\r
+ }\r
\r
- File mediaFile = mediaPath.toFile();\r
- if (mediaFile.isDirectory())\r
+ if (EscortFiles.isMediaCatched(mediaPath)) {\r
+ //logger.info(getSessionMarker(), "Skipping already catched {}", mediaPath);\r
return false;\r
+ }\r
\r
- if (EscortFiles.isMediaCatched(mediaPath))\r
+ Path nomdFile = Paths.get(mediaPath.toString() + ".nomd");\r
+\r
+ if (nomdFile.toFile().exists()) {\r
+ //logger.info(getSessionMarker(), "Skipping nomd file exists {}", nomdFile);\r
return false;\r
+ }\r
\r
- if (handleArchiveConflict(mediaPath))\r
+ if (handleArchiveConflict(mediaPath)) {\r
+ logger.info(getSessionMarker(), "Skipping archive db already contains {}", mediaPath);\r
return false;\r
+ }\r
\r
- if (!canReadMediaInfo(mediaPath))\r
+ if (!canReadMediaInfo(mediaPath)) {\r
+ logger.info(getSessionMarker(), "Skipping cant read mediainfo {}", mediaPath);\r
return false;\r
+ }\r
\r
ArchiveItem archiveItem = createArchiveItem(mediaPath);\r
\r
+ if (archiveItem == null) {\r
+ Message msg = new ParameterizedMessage("Nincs metaadat!");\r
+ logger.info(new MediaCubeMarker("vasary@elgekko.net,muszak@mediavivantis.hu",\r
+ "Értesítés problémás " + mediaPath.getFileName().toString() + " archiválásról"), msg);\r
+ Files.createFile(nomdFile);\r
+ return false;\r
+ }\r
+\r
try {\r
- checkArchiveItem(archiveItem, mediaPath);\r
- submitted++;\r
+ checkArchiveItem(archiveItem);\r
\r
Map<String, Object> parameters = ListUtils.asMap(ARCHIVE_ITEM, archiveItem, KILL_DATE_DAYS, killDateDays);\r
IJobRuntime runtime = getEngine().submit(getJobRuntime(), e -> {\r
throw new Exception("Submit returned null runtime");\r
runtime.setRelated(mediaPath.toString());\r
EscortFiles.createMediaCatch(mediaPath);\r
+ String metadata = archiveItemJSON(archiveItem);\r
+ EscortFiles.createMetadata(mediaPath.getParent().toString(), mediaPath.getFileName().toString(), metadata);\r
+ submitted++;\r
} catch (Exception e) {\r
- String fileName = new File(archiveItem.getMediaFile()).getName();\r
- logger.error(getSessionMarker(), "Az '{}' állomány archiválási kísérlete sikertelen. A rendszer üzenete: {}", fileName, e.getMessage());\r
+ logger.error(getSessionMarker(),\r
+ "Az '{}' állomány archiválási kísérlete sikertelen. A rendszer üzenete: {}", mediaPath,\r
+ e.getMessage());\r
}\r
\r
return true;\r
\r
@Override\r
public FileVisitResult visitFile(Path filePath, BasicFileAttributes paramBasicFileAttributes) throws IOException {\r
- //logger.info("Will archived {}", filePath);\r
+ // logger.info(getSessionMarker(), "Will checked {}", filePath);\r
try {\r
processPathItem(filePath);\r
} catch (Exception e) {\r