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=d13306cb34c1ce04d76bf0706a7990e4c33f0284;hb=cf6e4ace4972f24f40f88ea12fcf99c763e4e40a;hpb=99240fb3b40e8dd7e3759d2b81ae9a4b05fae1b5 diff --git a/src/main/java/eu/svjatoslav/meviz/htmlindexer/FilesystemIndexer.java b/src/main/java/eu/svjatoslav/meviz/htmlindexer/FilesystemIndexer.java index d13306c..48ed951 100755 --- a/src/main/java/eu/svjatoslav/meviz/htmlindexer/FilesystemIndexer.java +++ b/src/main/java/eu/svjatoslav/meviz/htmlindexer/FilesystemIndexer.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,21 +9,19 @@ package eu.svjatoslav.meviz.htmlindexer; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -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.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.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. @@ -31,180 +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 File metadataFile; - - private DirectoryMetadata metadata; - - private final List pathElements; + private static final Logger logger = Logger + .getLogger(FilesystemIndexer.class); - private HashSet layouts; + private final HashSet validMetadataFiles = new HashSet<>(); - private final CommandlineHandler commandlineHandler; + private final File directoryToIndex; + private final List pathElements; + private final CommandlineHandler commandlineHandler; + private File metadataFile; + private DirectoryMetadata metadata; + private HashSet layouts; - public FilesystemIndexer(final File directoryToIndex, - final CommandlineHandler commandlineHandler, - final List pathElements) throws Exception { + public FilesystemIndexer(final File directoryToIndex, + final CommandlineHandler commandlineHandler, + final List pathElements) throws Exception { - this.directoryToIndex = directoryToIndex; - this.commandlineHandler = commandlineHandler; - this.pathElements = pathElements; + this.directoryToIndex = directoryToIndex; + this.commandlineHandler = commandlineHandler; + this.pathElements = pathElements; - if (!directoryToIndex.canRead()) - return; + if (!directoryToIndex.canRead()) + return; - validMetadataFiles.add(Constants.METADATA_FILE_NAME); + validMetadataFiles.add(Constants.METADATA_FILE_NAME); - initializeThumbnailsDirectory(); - loadOrCreateMetadata(); + initializeThumbnailsDirectory(); + loadOrCreateMetadata(); - initializeLayouts(); + initializeLayouts(); - updateMetadata(); + updateMetadata(); - metadata.removeUnusedMetadataEntries(); + metadata.removeUnusedMetadataEntries(); - generateHtmlFromMetadata(layouts); + generateHtmlFromMetadata(layouts); - removeUnusedThumbnailFiles(); + removeUnusedThumbnailFiles(); - // save directory metadata - if (metadata.changed) - MetadadaHelper.saveDirectoryMetadata(metadataFile, metadata); + // save directory metadata + if (metadata.changed) + MetadadaHelper.saveDirectoryMetadata(metadataFile, metadata); - } + } - public boolean canWriteIndexFile(final File indexFile) - throws FileNotFoundException, IOException { + private boolean canWriteIndexFile(final File indexFile) + throws IOException { - if (!indexFile.exists()) - return true; + return !indexFile.exists() || Utils.isMevizGeneratedIndexFile(indexFile); - return Utils.isMevizGeneratedIndexFile(indexFile); - } + } - public void generateHtmlFromMetadata(final HashSet layouts) { - // Generate HTML from metadata - for (final Layout layout : layouts) - try { - final File indexFile = Utils.getLayoutIndexFile(layout, - directoryToIndex); + private void generateHtmlFromMetadata(final HashSet layouts) { + // Generate HTML from metadata + for (final Layout layout : layouts) + try { + final File indexFile = Utils.getLayoutIndexFile(layout, + directoryToIndex); - if (canWriteIndexFile(indexFile)) { + if (canWriteIndexFile(indexFile)) { - compileHtml(layout, metadata); + compileHtml(layout, metadata); - IOHelper.overwriteFileIfContentDiffers(indexFile, layout - .getHtml(true, true, metadata).getBytes()); - } - } catch (final Exception e) { - logger.error("Error writing index file. ", e); - } - } + IOHelper.overwriteFileIfContentDiffers(indexFile, layout + .getHtml(true, true, metadata).getBytes()); + } + } catch (final Exception e) { + logger.error("Error writing index file. ", e); + } + } - public List getChildPath(final File file) { + private List getChildPath(final File file) { - final List result = new ArrayList(); - result.addAll(pathElements); - result.add(file.getName()); + final List result = new ArrayList<>(); + result.addAll(pathElements); + result.add(file.getName()); - return result; - } + return result; + } - @Override - public String getDirectoryUrl(final AbstractFile directory, - final IndexingContext context) { - return directory.fileName + "/index.html"; - } + @Override + public String getDirectoryUrl(final AbstractFile directory, + final IndexingContext context) { + return Utils.urlEncode(directory.fileName) + "/index.html"; + } - @Override - public String getParentDirectoryUrl(final IndexingContext context) { - return "../index.html"; - } + @Override + public String getParentDirectoryUrl(final IndexingContext context) { + return "../index.html"; + } - @Override - public String getThumbnailUrl(final Picture picture, - final Dimension desiredDimension, final IndexingContext context) { + @Override + public String getThumbnailUrl(final Picture picture, + final Dimension desiredDimension, final IndexingContext context) { - // in case thumbnail size was equal to original, then return original - // file path - if (picture.getDimensions().equals(desiredDimension)) - return picture.fileName; + // in case thumbnail size was equal to original, then return original + // file path + if (picture.getDimensions().equals(desiredDimension)) + return picture.fileName; - final String thumbnailFileName = picture - .getRelativeThumbnailFileName(desiredDimension); + final String thumbnailFileName = picture + .getRelativeThumbnailFileName(desiredDimension); - validMetadataFiles.add(thumbnailFileName); - final File thumbnailFile = new File( - Utils.getThumbnailsDirectoryPath(directoryToIndex) - + thumbnailFileName); + validMetadataFiles.add(thumbnailFileName); + final File thumbnailFile = new File( + Utils.getThumbnailsDirectoryPath(directoryToIndex) + + thumbnailFileName); - if (!thumbnailFile.exists()) { + if (!thumbnailFile.exists()) { - final File originalFile = new File( - directoryToIndex.getAbsolutePath() + "/" + picture.fileName); + final File originalFile = new File( + directoryToIndex.getAbsolutePath() + "/" + picture.fileName); - // generate new thumbnail - Picture.makeThumbnail(originalFile, thumbnailFile, - desiredDimension.getAwtDimension()); - } - return Constants.THUMBNAILS_DIRECTORY_NAME + "/" - + Utils.urlEncode(thumbnailFileName); - } + // generate new thumbnail + Picture.makeThumbnail(originalFile, thumbnailFile, + desiredDimension.getAwtDimension()); + } + return Constants.THUMBNAILS_DIRECTORY_NAME + "/" + + Utils.urlEncode(thumbnailFileName); + } - public void initializeLayouts() { + private void initializeLayouts() { - layouts = Utils.getLayouts(); + layouts = Utils.getLayouts(); - final String galleryTitle = commandlineHandler.getGalleryTitle(); + final String galleryTitle = commandlineHandler.getGalleryTitle(); - for (final Layout layout : layouts) - layout.init(galleryTitle, pathElements, this, new IndexingContext( - "", ".")); - } + for (final Layout layout : layouts) + layout.init(galleryTitle, pathElements, this, new IndexingContext( + "", ".")); + } - public void initializeThumbnailsDirectory() { - final File thumbnailsDirectory = Utils - .getThumbnailsDirectory(directoryToIndex); + private void initializeThumbnailsDirectory() { + final File thumbnailsDirectory = Utils + .getThumbnailsDirectory(directoryToIndex); - if (!thumbnailsDirectory.exists()) - thumbnailsDirectory.mkdirs(); - } + if (!thumbnailsDirectory.exists()) + thumbnailsDirectory.mkdirs(); + } - public void loadOrCreateMetadata() { + private void loadOrCreateMetadata() { - metadataFile = new File( - Utils.getThumbnailsDirectoryPath(directoryToIndex) - + Constants.METADATA_FILE_NAME); + metadataFile = new File( + Utils.getThumbnailsDirectoryPath(directoryToIndex) + + Constants.METADATA_FILE_NAME); - metadata = MetadadaHelper.initDirectoryMetadata(metadataFile); - } + metadata = MetadadaHelper.initDirectoryMetadata(metadataFile); + } - private void removeUnusedThumbnailFiles() { + private void removeUnusedThumbnailFiles() { - for (final File file : Utils.getThumbnailsDirectory(directoryToIndex) - .listFiles()) - if (!validMetadataFiles.contains(file.getName())) - file.delete(); + for (final File file : Utils.getThumbnailsDirectory(directoryToIndex) + .listFiles()) + if (!validMetadataFiles.contains(file.getName())) + file.delete(); - } + } - public void updateMetadata() throws Exception { + private void updateMetadata() throws Exception { - for (final File file : directoryToIndex.listFiles()) - 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)); + } + } }