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=61b9027b28cee8868d61548bbebe548f821f58f3;hb=cf6e4ace4972f24f40f88ea12fcf99c763e4e40a;hpb=99bc9002a93c8ab224934032a1a5fe0c00d5de96 diff --git a/src/main/java/eu/svjatoslav/meviz/htmlindexer/FilesystemIndexer.java b/src/main/java/eu/svjatoslav/meviz/htmlindexer/FilesystemIndexer.java index 61b9027..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,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,198 +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 HashSet layouts; - - private final CommandlineHandler commandlineHandler; - - public FilesystemIndexer(final File directoryToIndex, - final CommandlineHandler commandlineHandler, - final List pathElements) throws Exception { - - this.directoryToIndex = directoryToIndex; - this.commandlineHandler = commandlineHandler; - this.pathElements = pathElements; - - if (!directoryToIndex.canRead()) - return; + private static final Logger logger = Logger + .getLogger(FilesystemIndexer.class); - validMetadataFiles.add(Constants.METADATA_FILE_NAME); + private final HashSet validMetadataFiles = new HashSet<>(); - initializeThumbnailsDirectory(); - loadOrCreateMetadata(); + private final File directoryToIndex; + private final List pathElements; + private final CommandlineHandler commandlineHandler; + private File metadataFile; + private DirectoryMetadata metadata; + private HashSet layouts; - initializeLayouts(); + public FilesystemIndexer(final File directoryToIndex, + final CommandlineHandler commandlineHandler, + final List pathElements) throws Exception { - updateMetadata(); + this.directoryToIndex = directoryToIndex; + this.commandlineHandler = commandlineHandler; + this.pathElements = pathElements; - metadata.removeUnusedMetadataEntries(); + if (!directoryToIndex.canRead()) + return; - generateHtmlFromMetadata(layouts); + validMetadataFiles.add(Constants.METADATA_FILE_NAME); - removeUnusedThumbnailFiles(); + initializeThumbnailsDirectory(); + loadOrCreateMetadata(); - // save directory metadata - if (metadata.changed) - MetadadaHelper.saveDirectoryMetadata(metadataFile, metadata); + initializeLayouts(); - } + updateMetadata(); - public boolean canWriteIndexFile(final File indexFile) - throws FileNotFoundException, IOException { + metadata.removeUnusedMetadataEntries(); - if (!indexFile.exists()) - return true; + generateHtmlFromMetadata(layouts); - return Utils.isMevizGeneratedIndexFile(indexFile); - } + removeUnusedThumbnailFiles(); - public void generateHtmlFromMetadata(final HashSet layouts) { - // Generate HTML from metadata - for (final Layout layout : layouts) - try { - final File indexFile = Utils.getLayoutIndexFile(layout, - directoryToIndex); + // save directory metadata + if (metadata.changed) + MetadadaHelper.saveDirectoryMetadata(metadataFile, metadata); - if (canWriteIndexFile(indexFile)) { + } - indexForLayout(layout); + private boolean canWriteIndexFile(final File indexFile) + throws IOException { - IOHelper.overwriteFileIfContentDiffers(indexFile, layout - .getHtml(true, true).getBytes()); - } - } catch (final Exception e) { - logger.error("Error writing index file. ", e); - } - } + return !indexFile.exists() || Utils.isMevizGeneratedIndexFile(indexFile); - public List getChildPath(final File file) { + } - final List result = new ArrayList(); - result.addAll(pathElements); - result.add(file.getName()); + private void generateHtmlFromMetadata(final HashSet layouts) { + // Generate HTML from metadata + for (final Layout layout : layouts) + try { + final File indexFile = Utils.getLayoutIndexFile(layout, + directoryToIndex); - return result; - } + if (canWriteIndexFile(indexFile)) { - @Override - public String getDirectoryUrl(final AbstractFile directory, - final IndexingContext context) { - return directory.fileName + "/index.html"; - } + compileHtml(layout, metadata); - @Override - public String getParentDirectoryUrl(final IndexingContext context) { - return "../index.html"; - } + IOHelper.overwriteFileIfContentDiffers(indexFile, layout + .getHtml(true, true, metadata).getBytes()); + } + } catch (final Exception e) { + logger.error("Error writing index file. ", e); + } + } - @Override - public String getThumbnailUrl(final Picture picture, - final Dimension desiredDimension, final IndexingContext context) { + private List getChildPath(final File file) { - // in case thumbnail size was equal to original, then return original - // file path - if (picture.getDimensions().equals(desiredDimension)) - return picture.fileName; + final List result = new ArrayList<>(); + result.addAll(pathElements); + result.add(file.getName()); - final String thumbnailFileName = picture - .getRelativeThumbnailFileName(desiredDimension); + return result; + } - validMetadataFiles.add(thumbnailFileName); - final File thumbnailFile = new File( - Utils.getThumbnailsDirectoryPath(directoryToIndex) - + thumbnailFileName); + @Override + public String getDirectoryUrl(final AbstractFile directory, + final IndexingContext context) { + return Utils.urlEncode(directory.fileName) + "/index.html"; + } - if (!thumbnailFile.exists()) { + @Override + public String getParentDirectoryUrl(final IndexingContext context) { + return "../index.html"; + } - final File originalFile = new File( - directoryToIndex.getAbsolutePath() + "/" + picture.fileName); + @Override + public String getThumbnailUrl(final Picture picture, + final Dimension desiredDimension, final IndexingContext context) { - // generate new thumbnail - Picture.makeThumbnail(originalFile, thumbnailFile, - desiredDimension.getAwtDimension()); - } - return Constants.THUMBNAILS_DIRECTORY_NAME + "/" - + UrlParamEncoder.encode(thumbnailFileName); - } + // in case thumbnail size was equal to original, then return original + // file path + if (picture.getDimensions().equals(desiredDimension)) + return picture.fileName; - public void indexForLayout(final Layout layout) - throws UnsupportedEncodingException { + final String thumbnailFileName = picture + .getRelativeThumbnailFileName(desiredDimension); - for (final AbstractFile abstractFile : metadata.getFiles()) - if (abstractFile instanceof GeneralFile) { + validMetadataFiles.add(thumbnailFileName); + final File thumbnailFile = new File( + Utils.getThumbnailsDirectoryPath(directoryToIndex) + + thumbnailFileName); - if (isOgv(abstractFile.getFileExtension())) - layout.enlistOgv(abstractFile); - else - layout.enlistFile(abstractFile); + if (!thumbnailFile.exists()) { - } else if (abstractFile instanceof Picture) - layout.enlistImage((Picture) abstractFile); - else if (abstractFile instanceof DirectoryFile) - layout.enlistDirectory(abstractFile); + 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); + } - 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)); + } + } }