Code refactoring
[meviz.git] / src / main / java / eu / svjatoslav / meviz / htmlindexer / metadata / DirectoryMetadata.java
index 0dcdf12..f165694 100755 (executable)
@@ -1,25 +1,25 @@
 /*
  * Meviz - Various tools collection to work with multimedia.
- * Copyright (C) 2012, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
+ * Copyright (C) 2012 -- 2019, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
  *
  * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public License
- * as published by the Free Software Foundation.
- */
+ * modify it under the terms of version 3 of the GNU Lesser General Public License
+ * or later as published by the Free Software Foundation.
+*/
 
 package eu.svjatoslav.meviz.htmlindexer.metadata;
 
 import eu.svjatoslav.commons.file.FilePathParser;
-import eu.svjatoslav.meviz.htmlindexer.AbstractIndexer;
 import eu.svjatoslav.meviz.htmlindexer.FileSortComparator;
-import eu.svjatoslav.meviz.htmlindexer.ImageFormatError;
 import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.*;
 
 import java.io.File;
-import java.io.IOException;
 import java.io.Serializable;
 import java.util.*;
 
+import static eu.svjatoslav.meviz.htmlindexer.indexer.AbstractIndexer.isImage;
+import static eu.svjatoslav.meviz.htmlindexer.indexer.AbstractIndexer.isVideo;
+
 /**
  * Corresponds to single filesystem directory.
  */
@@ -27,7 +27,7 @@ public class DirectoryMetadata implements Serializable {
 
     private static final long serialVersionUID = 3526489102725366334L;
 
-    private final HashMap<String, AbstractFile> fileNameToFileMap = new HashMap<String, AbstractFile>();
+    private final HashMap<String, AbstractFile> fileNameToFileMap = new HashMap<>();
 
     public transient boolean changed;
 
@@ -42,21 +42,21 @@ public class DirectoryMetadata implements Serializable {
         while (fileIterator.hasNext()) {
             final AbstractFile file = fileIterator.next();
 
-            if (!file.isMetaInfoVerified())
+            if (!file.isMetadataVerified())
                 fileIterator.remove();
         }
     }
 
-    public void ensureFileMetainfoIsUpToDate(final File parentDirectory,
+    public void ensureFileMetadataIsUpToDate(final File parentDirectory,
                                              final File file) throws Exception {
 
         final String fileName = file.getName();
 
         if (fileNameToFileMap.containsKey(fileName)) {
-            final boolean metainfoUpdated = fileNameToFileMap.get(fileName)
-                    .ensureFileMetainfoIsUpToDate(parentDirectory);
+            final boolean metadataUpdated = fileNameToFileMap.get(fileName)
+                    .ensureFileMetadataIsUpToDate(parentDirectory);
 
-            if (metainfoUpdated)
+            if (metadataUpdated)
                 changed = true;
         } else
             registerFile(parentDirectory, file);
@@ -72,7 +72,7 @@ public class DirectoryMetadata implements Serializable {
         final String fileExtension = FilePathParser.getFileExtension(fileName)
                 .toLowerCase();
 
-        if (AbstractIndexer.isImage(fileExtension))
+        if (isImage(fileExtension))
             try {
                 return new Picture(parentDirectory, fileName);
             } catch (final Exception exception) {
@@ -80,6 +80,14 @@ public class DirectoryMetadata implements Serializable {
                 return new GeneralFile(parentDirectory, fileName);
             }
 
+        if (isVideo(fileExtension))
+            try {
+                return new Video(parentDirectory, fileName);
+            } catch (final Exception exception) {
+                // in case video decoding failed, handle it as general file
+                return new GeneralFile(parentDirectory, fileName);
+            }
+
         if (fileName.endsWith(".meviz.org"))
             return new MevizSpecialFile(parentDirectory, fileName);
 
@@ -89,13 +97,13 @@ public class DirectoryMetadata implements Serializable {
         return new GeneralFile(parentDirectory, fileName);
     }
 
-    public AbstractFile getFile(final String fileName) {
+    private AbstractFile getFile(final String fileName) {
         return fileNameToFileMap.get(fileName);
     }
 
     public Collection<AbstractFile> getFiles() {
 
-        final ArrayList<AbstractFile> files = new ArrayList<AbstractFile>(
+        final ArrayList<AbstractFile> files = new ArrayList<>(
                 fileNameToFileMap.values());
 
         Collections.sort(files, new FileSortComparator());
@@ -112,13 +120,12 @@ public class DirectoryMetadata implements Serializable {
         return mevizSpecialFile.getFileContent();
     }
 
-    public Dimension getImageDimensions(final String fileName)
-            throws IOException, ImageFormatError {
+    public Dimension getImageDimensions(final String fileName) {
 
         return ((Picture) getFile(fileName)).getDimensions();
     }
 
-    public AbstractFile registerFile(final File parentDirectory, final File file)
+    private AbstractFile registerFile(final File parentDirectory, final File file)
             throws Exception {
 
         final String fileName = file.getName();
@@ -135,11 +142,10 @@ public class DirectoryMetadata implements Serializable {
 
     public void removeUnusedMetadataEntries() {
 
-        for (final String key : new HashSet<String>(fileNameToFileMap.keySet()))
-            if (!fileNameToFileMap.get(key).isMetaInfoVerified()) {
-                fileNameToFileMap.remove(key);
-                changed = true;
-            }
+        new HashSet<>(fileNameToFileMap.keySet()).stream().filter(key -> !fileNameToFileMap.get(key).isMetadataVerified()).forEach(key -> {
+            fileNameToFileMap.remove(key);
+            changed = true;
+        });
 
     }
 }