possilibity to generate HTML while embedded on the web site
[meviz.git] / src / main / java / eu / svjatoslav / meviz / htmlindexer / FilesystemIndexer.java
index ea6489e..3a48b67 100755 (executable)
@@ -15,11 +15,14 @@ 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.commons.network.UrlParamEncoder;
 import eu.svjatoslav.meviz.htmlindexer.layouts.MixedLayout;
 import eu.svjatoslav.meviz.htmlindexer.metadata.Dimension;
 import eu.svjatoslav.meviz.htmlindexer.metadata.DirectoryMetadata;
@@ -50,13 +53,14 @@ public class FilesystemIndexer extends AbstractIndexer {
 
        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;
@@ -148,25 +152,29 @@ public class FilesystemIndexer extends AbstractIndexer {
                }
        }
 
-       @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
@@ -188,7 +196,8 @@ public class FilesystemIndexer extends AbstractIndexer {
                        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)
@@ -214,7 +223,8 @@ public class FilesystemIndexer extends AbstractIndexer {
                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() {
@@ -255,7 +265,7 @@ public class FilesystemIndexer extends AbstractIndexer {
 
                                if (file.isDirectory())
                                        new FilesystemIndexer(file, indexingOptions,
-                                                       getSubPath(file));
+                                                       getChildPath(file));
                        }
        }
 }