X-Git-Url: http://www2.svjatoslav.eu/gitweb/?p=meviz.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fmeviz%2Fhtmlindexer%2Fmetadata%2FDirectoryMetadata.java;h=d6e65fc0d224b7e52a4b87b7ca3a5d85eb9a7e43;hp=cb2c2b14012da7e160c2e055752545d423b4d628;hb=cf6e4ace4972f24f40f88ea12fcf99c763e4e40a;hpb=fc6fdf1d4343a5b19c1a6213af272e9df40e3442 diff --git a/src/main/java/eu/svjatoslav/meviz/htmlindexer/metadata/DirectoryMetadata.java b/src/main/java/eu/svjatoslav/meviz/htmlindexer/metadata/DirectoryMetadata.java index cb2c2b1..d6e65fc 100755 --- a/src/main/java/eu/svjatoslav/meviz/htmlindexer/metadata/DirectoryMetadata.java +++ b/src/main/java/eu/svjatoslav/meviz/htmlindexer/metadata/DirectoryMetadata.java @@ -1,6 +1,6 @@ /* * Meviz - Various tools collection to work with multimedia. - * Copyright (C) 2012, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu + * Copyright (C) 2012 -- 2018, 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 @@ -9,137 +9,133 @@ package eu.svjatoslav.meviz.htmlindexer.metadata; -import java.io.File; -import java.io.IOException; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; - 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.AbstractFile; -import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.DirectoryFile; -import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.GeneralFile; -import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.MevizSpecialFile; -import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.Picture; +import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.*; + +import java.io.File; +import java.io.Serializable; +import java.util.*; /** * Corresponds to single filesystem directory. */ public class DirectoryMetadata implements Serializable { - private static final long serialVersionUID = 3526489102725366334L; + private static final long serialVersionUID = 3526489102725366334L; + + private final HashMap fileNameToFileMap = new HashMap<>(); + + public transient boolean changed; - private final HashMap fileNameToFileMap = new HashMap(); + /** + * Performs cleanup of directory model. In particular removes metadata for + * images that no longer exist in the filesystem. + */ + public void cleanup() { + final Iterator fileIterator = fileNameToFileMap.values() + .iterator(); - public transient boolean changed; + while (fileIterator.hasNext()) { + final AbstractFile file = fileIterator.next(); - /** - * Performs cleanup of directory model. In particular removes metadata for - * images that no longer exist in the filesystem. - */ - public void cleanup() { - final Iterator fileIterator = fileNameToFileMap.values() - .iterator(); + if (!file.isMetaInfoVerified()) + fileIterator.remove(); + } + } - while (fileIterator.hasNext()) { - final AbstractFile file = fileIterator.next(); + public void ensureFileMetainfoIsUpToDate(final File parentDirectory, + final File file) throws Exception { - if (!file.isMetaInfoVerified()) - fileIterator.remove(); - } - } + final String fileName = file.getName(); - public void ensureFileMetainfoIsUpToDate(final File parentDirectory, - final File file) throws Exception { + if (fileNameToFileMap.containsKey(fileName)) { + final boolean metainfoUpdated = fileNameToFileMap.get(fileName) + .ensureFileMetainfoIsUpToDate(parentDirectory); - final String fileName = file.getName(); + if (metainfoUpdated) + changed = true; + } else + registerFile(parentDirectory, file); - if (fileNameToFileMap.containsKey(fileName)) { - final boolean metainfoUpdated = fileNameToFileMap.get(fileName) - .ensureFileMetainfoIsUpToDate(parentDirectory); + } - if (metainfoUpdated) - changed = true; - } else - registerFile(parentDirectory, file); + private AbstractFile getAbstractFile(final File parentDirectory, + final File file, final String fileName) throws Exception { - } + if (file.isDirectory()) + return new DirectoryFile(parentDirectory, fileName); - private AbstractFile getAbstractFile(final File parentDirectory, - final File file, final String fileName) throws Exception { + final String fileExtension = FilePathParser.getFileExtension(fileName) + .toLowerCase(); - if (file.isDirectory()) - return new DirectoryFile(parentDirectory, fileName); + if (AbstractIndexer.isImage(fileExtension)) + try { + return new Picture(parentDirectory, fileName); + } catch (final Exception exception) { + // in case image decoding failed, handle image as general file + return new GeneralFile(parentDirectory, fileName); + } - final String fileExtension = FilePathParser.getFileExtension(fileName) - .toLowerCase(); + if (fileName.endsWith(".meviz.org")) + return new MevizSpecialFile(parentDirectory, fileName); - if (AbstractIndexer.isImage(fileExtension)) - try { - return new Picture(parentDirectory, fileName); - } catch (final Exception exception) { - // in case image decoding failed, handle image as general file - return new GeneralFile(parentDirectory, fileName); - } + if (fileName.endsWith(".meviz.html")) + return new MevizSpecialFile(parentDirectory, fileName); - if (fileName.endsWith(".meviz.org")) - return new MevizSpecialFile(parentDirectory, fileName); + return new GeneralFile(parentDirectory, fileName); + } - if (fileName.endsWith(".meviz.html")) - return new MevizSpecialFile(parentDirectory, fileName); + private AbstractFile getFile(final String fileName) { + return fileNameToFileMap.get(fileName); + } - return new GeneralFile(parentDirectory, fileName); - } + public Collection getFiles() { - public AbstractFile getFile(final String fileName) throws IOException { - return fileNameToFileMap.get(fileName); - } + final ArrayList files = new ArrayList<>( + fileNameToFileMap.values()); - public Collection getFiles() { + Collections.sort(files, new FileSortComparator()); - final ArrayList files = new ArrayList( - fileNameToFileMap.values()); + return files; + } - Collections.sort(files, new FileSortComparator()); + public String getHeaderMevizMetadataHtml() { + final AbstractFile headerFile = getFile("header.meviz.html"); + if (headerFile == null) + return ""; - return files; - } + final MevizSpecialFile mevizSpecialFile = (MevizSpecialFile) headerFile; + return mevizSpecialFile.getFileContent(); + } - public Dimension getImageDimensions(final String fileName) - throws IOException, ImageFormatError { + public Dimension getImageDimensions(final String fileName) { - return ((Picture) getFile(fileName)).getDimensions(); - } + return ((Picture) getFile(fileName)).getDimensions(); + } - public AbstractFile registerFile(final File parentDirectory, final File file) - throws Exception { + private AbstractFile registerFile(final File parentDirectory, final File file) + throws Exception { - final String fileName = file.getName(); + final String fileName = file.getName(); - final AbstractFile abstractFile = getAbstractFile(parentDirectory, - file, fileName); + final AbstractFile abstractFile = getAbstractFile(parentDirectory, + file, fileName); - fileNameToFileMap.put(fileName, abstractFile); + fileNameToFileMap.put(fileName, abstractFile); - changed = true; + changed = true; - return abstractFile; - } + return abstractFile; + } - public void removeUnusedMetadataEntries() { + public void removeUnusedMetadataEntries() { - for (final String key : new HashSet(fileNameToFileMap.keySet())) - if (!fileNameToFileMap.get(key).isMetaInfoVerified()) { - fileNameToFileMap.remove(key); - changed = true; - } + new HashSet<>(fileNameToFileMap.keySet()).stream().filter(key -> !fileNameToFileMap.get(key).isMetaInfoVerified()).forEach(key -> { + fileNameToFileMap.remove(key); + changed = true; + }); - } + } }