X-Git-Url: http://www2.svjatoslav.eu/gitweb/?p=meviz.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fmeviz%2Fhtmlindexer%2FFilesystemIndexer.java;h=48ed95132d68cf8963b8af96b3a691e51df30164;hp=d9726dd5b5be243eedb52f375f3d6dd1f81492f8;hb=cf6e4ace4972f24f40f88ea12fcf99c763e4e40a;hpb=5e2fffbc3363880e2da9c9d282537a8e2653fa8d diff --git a/src/main/java/eu/svjatoslav/meviz/htmlindexer/FilesystemIndexer.java b/src/main/java/eu/svjatoslav/meviz/htmlindexer/FilesystemIndexer.java index d9726dd..48ed951 100755 --- a/src/main/java/eu/svjatoslav/meviz/htmlindexer/FilesystemIndexer.java +++ b/src/main/java/eu/svjatoslav/meviz/htmlindexer/FilesystemIndexer.java @@ -1,7 +1,7 @@ /* * 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 * as published by the Free Software Foundation. @@ -9,25 +9,19 @@ package eu.svjatoslav.meviz.htmlindexer; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; - -import org.apache.log4j.Logger; - import eu.svjatoslav.commons.file.IOHelper; -import eu.svjatoslav.commons.network.UrlParamEncoder; import eu.svjatoslav.meviz.htmlindexer.metadata.Dimension; import eu.svjatoslav.meviz.htmlindexer.metadata.DirectoryMetadata; import eu.svjatoslav.meviz.htmlindexer.metadata.MetadadaHelper; 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.Picture; +import org.apache.log4j.Logger; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; /** * Main class of HTML indexer. @@ -35,207 +29,173 @@ import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.Picture; public class FilesystemIndexer extends AbstractIndexer { - public static final Logger logger = Logger - .getLogger(FilesystemIndexer.class); - - private final HashSet validMetadataFiles = new HashSet(); - - private final File directoryToIndex; - - private String thumbnailsPath; - - private File metadataFile; - - private DirectoryMetadata metadata; - - private final List pathElements; - - private HashSet layouts; - - private final CommandlineHandler commandlineHandler; - - public FilesystemIndexer(final File directoryToIndex, - final CommandlineHandler commandlineHandler, - final List pathElements) throws IOException, - ImageFormatError { - - this.directoryToIndex = directoryToIndex; - this.commandlineHandler = commandlineHandler; - this.pathElements = pathElements; - - if (!directoryToIndex.canRead()) - return; - - validMetadataFiles.add(Constants.METADATA_FILE_NAME); - - initializeThumbnailsDirectory(); - loadOrCreateMetadata(); - - initializeLayouts(); + private static final Logger logger = Logger + .getLogger(FilesystemIndexer.class); - updateMetadata(); + private final HashSet validMetadataFiles = new HashSet<>(); - metadata.removeUnusedMetadataEntries(); + private final File directoryToIndex; + private final List pathElements; + private final CommandlineHandler commandlineHandler; + private File metadataFile; + private DirectoryMetadata metadata; + private HashSet layouts; - generateHtmlFromMetadata(layouts); + public FilesystemIndexer(final File directoryToIndex, + final CommandlineHandler commandlineHandler, + final List pathElements) throws Exception { - removeUnusedThumbnailFiles(); + this.directoryToIndex = directoryToIndex; + this.commandlineHandler = commandlineHandler; + this.pathElements = pathElements; - // save directory metadata - if (metadata.changed) - MetadadaHelper.saveDirectoryMetadata(metadataFile, metadata); + if (!directoryToIndex.canRead()) + return; - } + validMetadataFiles.add(Constants.METADATA_FILE_NAME); - public boolean canWriteIndexFile(final File indexFile) - throws FileNotFoundException, IOException { + initializeThumbnailsDirectory(); + loadOrCreateMetadata(); - if (!indexFile.exists()) - return true; + initializeLayouts(); - return Utils.isMevizGeneratedIndexFile(indexFile); - } + updateMetadata(); - public void cleanupUnusedMetadataFiles() { - final File thumbnailsDirectory = new File(thumbnailsPath); + metadata.removeUnusedMetadataEntries(); - for (final File file : thumbnailsDirectory.listFiles()) - if (!validMetadataFiles.contains(file.getName())) - file.delete(); - } + generateHtmlFromMetadata(layouts); - public void generateHtmlFromMetadata(final HashSet layouts) { - // Generate HTML from metadata - for (final Layout layout : layouts) - try { - final File indexFile = Utils.getLayoutIndexFile(layout, - directoryToIndex); + removeUnusedThumbnailFiles(); - if (canWriteIndexFile(indexFile)) { + // save directory metadata + if (metadata.changed) + MetadadaHelper.saveDirectoryMetadata(metadataFile, metadata); - indexForLayout(layout); + } - IOHelper.overwriteFileIfContentDiffers(indexFile, layout - .getHtml(true, true).getBytes()); - } - } catch (final Exception e) { - logger.error("Error writing index file. ", e); - } - } + private boolean canWriteIndexFile(final File indexFile) + throws IOException { - public List getChildPath(final File file) { + return !indexFile.exists() || Utils.isMevizGeneratedIndexFile(indexFile); - final List result = new ArrayList(); - result.addAll(pathElements); - result.add(file.getName()); + } - return result; - } + private void generateHtmlFromMetadata(final HashSet layouts) { + // Generate HTML from metadata + for (final Layout layout : layouts) + try { + final File indexFile = Utils.getLayoutIndexFile(layout, + directoryToIndex); - @Override - public String getDirectoryUrl(final AbstractFile directory, - final IndexingContext context) { - return directory.fileName + "/index.html"; - } + if (canWriteIndexFile(indexFile)) { - @Override - public String getParentDirectoryUrl(final IndexingContext context) { - return "../index.html"; - } + compileHtml(layout, metadata); - @Override - public String getThumbnailUrl(final Picture picture, - final Dimension desiredDimension, final IndexingContext context) { + IOHelper.overwriteFileIfContentDiffers(indexFile, layout + .getHtml(true, true, metadata).getBytes()); + } + } catch (final Exception e) { + logger.error("Error writing index file. ", e); + } + } - // in case thumbnail size was equal to original, then return original - // file path - if (picture.getDimensions().equals(desiredDimension)) - return picture.fileName; + private List getChildPath(final File file) { - final String thumbnailFileName = picture - .getRelativeThumbnailFileName(desiredDimension); + final List result = new ArrayList<>(); + result.addAll(pathElements); + result.add(file.getName()); - validMetadataFiles.add(thumbnailFileName); - final File thumbnailFile = new File(thumbnailsPath + thumbnailFileName); + return result; + } - if (!thumbnailFile.exists()) { + @Override + public String getDirectoryUrl(final AbstractFile directory, + final IndexingContext context) { + return Utils.urlEncode(directory.fileName) + "/index.html"; + } - final File originalFile = new File( - directoryToIndex.getAbsolutePath() + "/" + picture.fileName); + @Override + public String getParentDirectoryUrl(final IndexingContext context) { + return "../index.html"; + } - // generate new thumbnail - Picture.makeThumbnail(originalFile, thumbnailFile, - desiredDimension.getAwtDimension()); - } - return Constants.THUMBNAILS_DIRECTORY_NAME + "/" - + UrlParamEncoder.encode(thumbnailFileName); - } + @Override + public String getThumbnailUrl(final Picture picture, + final Dimension desiredDimension, final IndexingContext context) { - public void indexForLayout(final Layout layout) - throws UnsupportedEncodingException { + // in case thumbnail size was equal to original, then return original + // file path + if (picture.getDimensions().equals(desiredDimension)) + return picture.fileName; - for (final AbstractFile abstractFile : metadata.getFiles()) - if (abstractFile instanceof GeneralFile) { + final String thumbnailFileName = picture + .getRelativeThumbnailFileName(desiredDimension); - if (isOgv(abstractFile.getFileExtension())) - layout.enlistOgv(abstractFile); - else - layout.enlistFile(abstractFile); + validMetadataFiles.add(thumbnailFileName); + final File thumbnailFile = new File( + Utils.getThumbnailsDirectoryPath(directoryToIndex) + + thumbnailFileName); - } else if (abstractFile instanceof Picture) - layout.enlistImage(abstractFile); - else if (abstractFile instanceof DirectoryFile) - layout.enlistDirectory(abstractFile); + if (!thumbnailFile.exists()) { - } + final File originalFile = new File( + directoryToIndex.getAbsolutePath() + "/" + picture.fileName); - public void initializeLayouts() { + // generate new thumbnail + Picture.makeThumbnail(originalFile, thumbnailFile, + desiredDimension.getAwtDimension()); + } + return Constants.THUMBNAILS_DIRECTORY_NAME + "/" + + Utils.urlEncode(thumbnailFileName); + } - layouts = Utils.getLayouts(); + private void initializeLayouts() { - final String galleryTitle = commandlineHandler.getGalleryTitle(); + layouts = Utils.getLayouts(); - for (final Layout layout : layouts) - layout.init(galleryTitle, pathElements, this, new IndexingContext( - "", ".")); - } + final String galleryTitle = commandlineHandler.getGalleryTitle(); - public void initializeThumbnailsDirectory() { - final File thumbnailsDirectory = Utils - .getThumbnailsDirectory(directoryToIndex); + for (final Layout layout : layouts) + layout.init(galleryTitle, pathElements, this, new IndexingContext( + "", ".")); + } - if (!thumbnailsDirectory.exists()) - thumbnailsDirectory.mkdirs(); - } + private void initializeThumbnailsDirectory() { + final File thumbnailsDirectory = Utils + .getThumbnailsDirectory(directoryToIndex); - public void loadOrCreateMetadata() { - metadataFile = new File(thumbnailsPath + Constants.METADATA_FILE_NAME); + if (!thumbnailsDirectory.exists()) + thumbnailsDirectory.mkdirs(); + } - metadata = MetadadaHelper.initDirectoryMetadata(metadataFile); - } + private void loadOrCreateMetadata() { - private void removeUnusedThumbnailFiles() { + metadataFile = new File( + Utils.getThumbnailsDirectoryPath(directoryToIndex) + + Constants.METADATA_FILE_NAME); - final File thumbnailsDirectory = new File(thumbnailsPath); + metadata = MetadadaHelper.initDirectoryMetadata(metadataFile); + } - for (final File file : thumbnailsDirectory.listFiles()) - if (!validMetadataFiles.contains(file.getName())) - file.delete(); + private void removeUnusedThumbnailFiles() { - } + for (final File file : Utils.getThumbnailsDirectory(directoryToIndex) + .listFiles()) + if (!validMetadataFiles.contains(file.getName())) + file.delete(); - public void updateMetadata() throws IOException, ImageFormatError { + } - final File[] directoryContent = directoryToIndex.listFiles(); + private void updateMetadata() throws Exception { - for (final File file : directoryContent) - if (shallFileBeIndexed(file)) { + for (final File file : directoryToIndex.listFiles()) + if (shallFileBeIndexed(file)) { - metadata.ensureFileMetainfoIsUpToDate(directoryToIndex, file); + metadata.ensureFileMetainfoIsUpToDate(directoryToIndex, file); - if (file.isDirectory()) - new FilesystemIndexer(file, commandlineHandler, - getChildPath(file)); - } - } + if (file.isDirectory()) + new FilesystemIndexer(file, commandlineHandler, + getChildPath(file)); + } + } }