X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fmeviz%2Fhtmlindexer%2FFilesystemIndexer.java;h=d13306cb34c1ce04d76bf0706a7990e4c33f0284;hb=99240fb3b40e8dd7e3759d2b81ae9a4b05fae1b5;hp=9c8c8779f2a9e531773f2580b76ae1de2a115b0b;hpb=50cb7085d553fdd82cd06806cd27b1675299f719;p=meviz.git diff --git a/src/main/java/eu/svjatoslav/meviz/htmlindexer/FilesystemIndexer.java b/src/main/java/eu/svjatoslav/meviz/htmlindexer/FilesystemIndexer.java index 9c8c877..d13306c 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 - * + * * 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,24 +9,20 @@ package eu.svjatoslav.meviz.htmlindexer; -import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; -import java.io.FileReader; 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.meviz.htmlindexer.layouts.MixedLayout; 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; /** @@ -42,24 +38,22 @@ public class FilesystemIndexer extends AbstractIndexer { private final File directoryToIndex; - private String thumbnailsPath; - private File metadataFile; private DirectoryMetadata metadata; - private final IndexingOptions indexingOptions; - - private final String[] pathElements; + private final List pathElements; private HashSet layouts; + private final CommandlineHandler commandlineHandler; + public FilesystemIndexer(final File directoryToIndex, - final IndexingOptions indexingOptions, final String[] pathElements) - throws IOException, ImageFormatError { + final CommandlineHandler commandlineHandler, + final List pathElements) throws Exception { this.directoryToIndex = directoryToIndex; - this.indexingOptions = indexingOptions; + this.commandlineHandler = commandlineHandler; this.pathElements = pathElements; if (!directoryToIndex.canRead()) @@ -88,80 +82,55 @@ public class FilesystemIndexer extends AbstractIndexer { public boolean canWriteIndexFile(final File indexFile) throws FileNotFoundException, IOException { - boolean canWriteIndexFile = false; - - if (indexFile.exists()) { - // if file already exists, make sure that we can overwrite - // it - final FileReader fileReader = new FileReader(indexFile); - final BufferedReader reader = new BufferedReader(fileReader); - - parseFile: { - while (true) { - final String line = reader.readLine(); - - if (line == null) - break parseFile; - - if (line.contains(Constants.HTML_MAGIC_STRING)) { - canWriteIndexFile = true; - break parseFile; - } - } - } - - reader.close(); - fileReader.close(); - } else - canWriteIndexFile = true; - return canWriteIndexFile; - } - public void cleanupUnusedMetadataFiles() { - final File thumbnailsDirectory = new File(thumbnailsPath); + if (!indexFile.exists()) + return true; - for (final File file : thumbnailsDirectory.listFiles()) - if (!validMetadataFiles.contains(file.getName())) - file.delete(); + return Utils.isMevizGeneratedIndexFile(indexFile); } public void generateHtmlFromMetadata(final HashSet layouts) { // Generate HTML from metadata - for (final Layout layout : layouts) { - - final String indexFilePath = directoryToIndex.getAbsolutePath() - + "/index" + layout.getFileNameSuffix() + ".html"; - + for (final Layout layout : layouts) try { + final File indexFile = Utils.getLayoutIndexFile(layout, + directoryToIndex); - final File indexFile = new File(indexFilePath); if (canWriteIndexFile(indexFile)) { - indexForLayout(layout); + compileHtml(layout, metadata); IOHelper.overwriteFileIfContentDiffers(indexFile, layout - .getHtml().getBytes()); + .getHtml(true, true, metadata).getBytes()); } } catch (final Exception e) { - logger.error("Error writing index file to:" + indexFilePath, e); + logger.error("Error writing index file. ", e); } - } } - public String[] getSubPath(final File file) { + public List getChildPath(final File file) { + + final List result = new ArrayList(); + result.addAll(pathElements); + result.add(file.getName()); - final String[] subPath = new String[pathElements.length + 1]; + return result; + } - for (int i = 0; i < pathElements.length; i++) - subPath[i] = pathElements[i]; + @Override + public String getDirectoryUrl(final AbstractFile directory, + final IndexingContext context) { + return directory.fileName + "/index.html"; + } - subPath[pathElements.length] = file.getName(); - return subPath; + @Override + public String getParentDirectoryUrl(final IndexingContext context) { + return "../index.html"; } @Override - public String getThumbnailPath(final Picture picture, - final Dimension desiredDimension) { + 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 @@ -172,7 +141,9 @@ public class FilesystemIndexer extends AbstractIndexer { .getRelativeThumbnailFileName(desiredDimension); validMetadataFiles.add(thumbnailFileName); - final File thumbnailFile = new File(thumbnailsPath + thumbnailFileName); + final File thumbnailFile = new File( + Utils.getThumbnailsDirectoryPath(directoryToIndex) + + thumbnailFileName); if (!thumbnailFile.exists()) { @@ -183,74 +154,57 @@ public class FilesystemIndexer extends AbstractIndexer { Picture.makeThumbnail(originalFile, thumbnailFile, desiredDimension.getAwtDimension()); } - return Constants.THUMBNAILS_DIRECTORY_NAME + "/" + thumbnailFileName; + return Constants.THUMBNAILS_DIRECTORY_NAME + "/" + + Utils.urlEncode(thumbnailFileName); } - public void indexForLayout(final Layout layout) - throws UnsupportedEncodingException { - - for (final AbstractFile abstractFile : metadata.getFiles()) - if (abstractFile instanceof GeneralFile) { - - if (isOgv(abstractFile.getFileExtension())) - layout.enlistOgv(abstractFile); - else - layout.enlistFile(abstractFile); - - } else if (abstractFile instanceof Picture) - layout.enlistImage(abstractFile); - else if (abstractFile instanceof DirectoryFile) - layout.enlistDirectory(abstractFile); + public void initializeLayouts() { - } + layouts = Utils.getLayouts(); - public void initializeLayouts() { - layouts = new HashSet(); - layouts.add(new MixedLayout()); + final String galleryTitle = commandlineHandler.getGalleryTitle(); for (final Layout layout : layouts) - layout.init(indexingOptions.galleryTitle, pathElements, this); + layout.init(galleryTitle, pathElements, this, new IndexingContext( + "", ".")); } public void initializeThumbnailsDirectory() { - // initialize thumbnails directory - thumbnailsPath = directoryToIndex.getAbsolutePath() + "/" - + Constants.THUMBNAILS_DIRECTORY_NAME + "/"; + final File thumbnailsDirectory = Utils + .getThumbnailsDirectory(directoryToIndex); - // ensure thumbnails directory exists - final File thumbnailsDirectory = new File(thumbnailsPath); if (!thumbnailsDirectory.exists()) thumbnailsDirectory.mkdirs(); } public void loadOrCreateMetadata() { - metadataFile = new File(thumbnailsPath + Constants.METADATA_FILE_NAME); + + metadataFile = new File( + Utils.getThumbnailsDirectoryPath(directoryToIndex) + + Constants.METADATA_FILE_NAME); metadata = MetadadaHelper.initDirectoryMetadata(metadataFile); } private void removeUnusedThumbnailFiles() { - final File thumbnailsDirectory = new File(thumbnailsPath); - - for (final File file : thumbnailsDirectory.listFiles()) + 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(); + public void updateMetadata() throws Exception { - for (final File file : directoryContent) + for (final File file : directoryToIndex.listFiles()) if (shallFileBeIndexed(file)) { metadata.ensureFileMetainfoIsUpToDate(directoryToIndex, file); if (file.isDirectory()) - new FilesystemIndexer(file, indexingOptions, - getSubPath(file)); + new FilesystemIndexer(file, commandlineHandler, + getChildPath(file)); } } }