1 package user.jobengine.server.steps;
\r
4 import java.io.IOException;
\r
5 import java.nio.file.DirectoryStream;
\r
6 import java.nio.file.Files;
\r
7 import java.nio.file.Path;
\r
8 import java.nio.file.Paths;
\r
9 import java.util.LinkedList;
\r
10 import java.util.List;
\r
12 import org.apache.commons.lang.StringUtils;
\r
13 import org.apache.logging.log4j.LogManager;
\r
14 import org.apache.logging.log4j.Logger;
\r
15 import org.apache.logging.log4j.Marker;
\r
17 import user.jobengine.server.IJobEngine;
\r
18 import user.jobengine.server.IJobRuntime;
\r
21 * Az archivalhato mediak listazasa MediaFileWrapper objektumokban. A listazott media allomanyokat megjeloli .catched signal allomannyal, hogy a legkozelebbi
\r
22 * listazas figyelmen kivul hagyja.
\r
26 public class ArchiveListBuilderStep extends JobStep {
\r
27 private static final Logger logger = LogManager.getLogger();
\r
28 // private static final String UTF8 = "utf-8";
\r
29 private static final String STATUSFOLDER = ".STATUS";
\r
30 private static final String JSONEXT = ".json";
\r
31 private static final String CATCHEDEXT = ".catched";
\r
33 public static final String ITEM_TITLE = "itemTitle";
\r
34 public static final String ITEM_HOUSEID = "itemHouseId";
\r
35 public static final String ITEM_DESCRIPTION = "itemDescription";
\r
36 public static final String MEDIA_HOUSEID = "mediaHouseId";
\r
37 public static final String MEDIA_TITLE = "mediaTitle";
\r
38 public static final String MEDIA_DESCRIPTION = "mediaDescription";
\r
39 public static final String MEDIA_TYPE = "mediaType";
\r
40 private static final String DURATION = "duration";
\r
41 private static final String EXISTING_MEDIAID = "existingMediaId";
\r
42 private static final String TAGS = "tags";
\r
44 private Marker marker;
\r
46 private ArchiveItem createArchiveItem(Path jsonFilePath, Path mediaFilePath, Path catchedFilePath) {
\r
47 ArchiveItem result = null;
\r
49 result = ArchiveItem.fromFile(jsonFilePath);
\r
50 result.setMediaFile(mediaFilePath.toString());
\r
51 result.setCatchedFile(catchedFilePath.toString());
\r
52 } catch (Exception e) {
\r
59 private void createCatchedFile(Path catchedFilePath) {
\r
61 Files.createFile(catchedFilePath);
\r
62 //Files.write(catchedFilePath, CATCHED.getBytes(UTF8), StandardOpenOption.CREATE);
\r
63 } catch (Exception e) {
\r
69 public Object[] execute(String sourcePath, int limit, IJobEngine jobEngine, IJobRuntime jobRuntime) {
\r
70 marker = jobRuntime.getSessionMarker();
\r
71 List<ArchiveItem> archiveList = new LinkedList<ArchiveItem>();
\r
72 DirectoryStream<Path> directoryStream = null;
\r
74 DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get(sourcePath));
\r
75 for (Path p : stream) {
\r
76 processPathItem(p, archiveList);
\r
78 } catch (Exception e) {
\r
80 logger.error(marker, "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", e.getMessage());
\r
82 if (directoryStream != null) {
\r
84 directoryStream.close();
\r
85 } catch (IOException e) {
\r
90 if (limit > 0 && archiveList.size() > limit) {
\r
91 archiveList = archiveList.subList(0, limit);
\r
92 logger.info(marker, "A folyamat alkalmazza a beállított {} limitet.", limit);
\r
95 if (archiveList.size() == 0)
\r
96 logger.info(marker, "Nincs archiválandó anyag.");
\r
98 logger.info(marker, "Az archiváló folyamat {} új anyagot érzékelt.", archiveList == null ? 0 : archiveList.size());
\r
100 for (ArchiveItem archiveItem : archiveList) {
\r
101 createCatchedFile(Paths.get(archiveItem.getCatchedFile()));
\r
104 return new Object[] { archiveList };
\r
107 private boolean processPathItem(Path mediaFilePath, final List<ArchiveItem> archiveList) {
\r
108 File mediaFile = mediaFilePath.toFile();
\r
110 // if (mediaFile.length() > 0)
\r
113 if (mediaFile.isDirectory()) {
\r
117 Path dotStorePath = Paths.get(mediaFilePath.getParent().toString(), STATUSFOLDER);
\r
118 Path catchedFilePath = Paths.get(dotStorePath.toString(), mediaFile.getName() + CATCHEDEXT);
\r
119 File catchedFile = catchedFilePath.toFile();
\r
120 if (catchedFile.exists()) {
\r
121 logger.warn("{} file is already catched.", mediaFile.getName());
\r
125 Path jsonFilePath = Paths.get(dotStorePath.toString(), mediaFile.getName() + JSONEXT);
\r
126 File jsonFile = jsonFilePath.toFile();
\r
127 if (!jsonFile.exists()) {
\r
128 logger.warn("{} has no json metadata.", mediaFile.getName());
\r
132 ArchiveItem archiveItem = createArchiveItem(jsonFilePath, mediaFilePath, catchedFilePath);
\r
134 if (archiveItem == null) {
\r
135 logger.warn("{} has no metadata specified.", mediaFile.getName());
\r
139 if (StringUtils.isBlank(archiveItem.getItemHouseId())) {
\r
140 logger.warn("{} has no Item HouseID specified in metadata.", mediaFile.getName());
\r
144 if (StringUtils.isBlank(archiveItem.getItemTitle())) {
\r
145 logger.warn("{} has no Item Title specified in metadata.", mediaFile.getName());
\r
149 if (StringUtils.isBlank(archiveItem.getMediaHouseId())) {
\r
150 logger.warn("{} has no Media HouseID specified in metadata.", mediaFile.getName());
\r
154 if (StringUtils.isBlank(archiveItem.getMediaTitle())) {
\r
155 logger.warn("{} has no Media Title specified in metadata.", mediaFile.getName());
\r
159 //A tenyleges archivalast vesszuk elore
\r
160 if (mediaFile.length() == 0)
\r
161 archiveList.add(archiveItem);
\r
163 archiveList.add(0, archiveItem);
\r
164 //createCatchedFile(catchedFilePath);
\r