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.commons.network.UrlParamEncoder;
import eu.svjatoslav.meviz.htmlindexer.layouts.MixedLayout;
import eu.svjatoslav.meviz.htmlindexer.metadata.Dimension;
import eu.svjatoslav.meviz.htmlindexer.metadata.DirectoryMetadata;
private final IndexingOptions indexingOptions;
- private final String[] pathElements;
+ private final List<String> pathElements;
private HashSet<Layout> layouts;
public FilesystemIndexer(final File directoryToIndex,
- final IndexingOptions indexingOptions, final String[] pathElements)
- throws IOException, ImageFormatError {
+ final IndexingOptions indexingOptions,
+ final List<String> pathElements) throws IOException,
+ ImageFormatError {
this.directoryToIndex = directoryToIndex;
this.indexingOptions = indexingOptions;
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);
}
}
- @Override
- public String getDirectoryUrl(final AbstractFile directory) {
- return directory.fileName + "/index.html";
- }
+ public List<String> getChildPath(final File file) {
- public String[] getSubPath(final File file) {
+ final List<String> result = new ArrayList<String>();
+ 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
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)
layouts.add(new MixedLayout());
for (final Layout layout : layouts)
- layout.init(indexingOptions.galleryTitle, pathElements, this, "");
+ layout.init(indexingOptions.galleryTitle, pathElements, this,
+ new IndexingContext("", "."));
}
public void initializeThumbnailsDirectory() {
if (file.isDirectory())
new FilesystemIndexer(file, indexingOptions,
- getSubPath(file));
+ getChildPath(file));
}
}
}