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.commons.network.UrlParamEncoder;
import eu.svjatoslav.meviz.htmlindexer.metadata.Dimension;
import eu.svjatoslav.meviz.htmlindexer.metadata.DirectoryMetadata;
import eu.svjatoslav.meviz.htmlindexer.metadata.MetadadaHelper;
private final File directoryToIndex;
- private String thumbnailsPath;
-
private File metadataFile;
private DirectoryMetadata metadata;
- private final IndexingOptions indexingOptions;
-
- private final String[] pathElements;
+ private final List<String> pathElements;
private HashSet<Layout> layouts;
+ private final CommandlineHandler commandlineHandler;
+
public FilesystemIndexer(final File directoryToIndex,
- final IndexingOptions indexingOptions, final String[] pathElements)
- throws IOException, ImageFormatError {
+ final CommandlineHandler commandlineHandler,
+ final List<String> pathElements) throws IOException,
+ ImageFormatError {
this.directoryToIndex = directoryToIndex;
- this.indexingOptions = indexingOptions;
+ this.commandlineHandler = commandlineHandler;
this.pathElements = pathElements;
if (!directoryToIndex.canRead())
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 (!indexFile.exists())
+ return true;
- 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);
-
- for (final File file : thumbnailsDirectory.listFiles())
- if (!validMetadataFiles.contains(file.getName()))
- file.delete();
+ return Utils.isMevizGeneratedIndexFile(indexFile);
}
public void generateHtmlFromMetadata(final HashSet<Layout> 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);
IOHelper.overwriteFileIfContentDiffers(indexFile, layout
- .getHtml().getBytes());
+ .getHtml(true, true).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<String> getChildPath(final File file) {
- final String[] subPath = new String[pathElements.length + 1];
+ final List<String> result = new ArrayList<String>();
+ result.addAll(pathElements);
+ result.add(file.getName());
- for (int i = 0; i < pathElements.length; i++)
- subPath[i] = pathElements[i];
+ return result;
+ }
- subPath[pathElements.length] = file.getName();
- return subPath;
+ @Override
+ public String getDirectoryUrl(final AbstractFile directory,
+ final IndexingContext context) {
+ return directory.fileName + "/index.html";
}
@Override
- public String getThumbnailPath(final Picture picture,
- final Dimension desiredDimension) {
+ public String getParentDirectoryUrl(final IndexingContext context) {
+ return "../index.html";
+ }
+
+ @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
.getRelativeThumbnailFileName(desiredDimension);
validMetadataFiles.add(thumbnailFileName);
- final File thumbnailFile = new File(thumbnailsPath + thumbnailFileName);
+ final File thumbnailFile = new File(
+ Utils.getThumbnailsDirectoryPath(directoryToIndex)
+ + thumbnailFileName);
if (!thumbnailFile.exists()) {
Picture.makeThumbnail(originalFile, thumbnailFile,
desiredDimension.getAwtDimension());
}
- return Constants.THUMBNAILS_DIRECTORY_NAME + "/" + thumbnailFileName;
+ return Constants.THUMBNAILS_DIRECTORY_NAME + "/"
+ + UrlParamEncoder.encode(thumbnailFileName);
}
public void indexForLayout(final Layout layout)
}
public void initializeLayouts() {
- layouts = new HashSet<Layout>();
- layouts.add(new MixedLayout());
+
+ layouts = Utils.getLayouts();
+
+ 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();
metadata.ensureFileMetainfoIsUpToDate(directoryToIndex, file);
if (file.isDirectory())
- new FilesystemIndexer(file, indexingOptions,
- getSubPath(file));
+ new FilesystemIndexer(file, commandlineHandler,
+ getChildPath(file));
}
}
}