fixed path construction for ordinary images
[meviz.git] / src / main / java / eu / svjatoslav / meviz / htmlindexer / WebIndexer.java
index 20ec8d1..f659a35 100644 (file)
@@ -5,7 +5,9 @@ import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.List;
 
+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;
@@ -14,38 +16,52 @@ import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.Picture;
 
 public class WebIndexer extends AbstractIndexer {
 
-       private final MixedLayout layout = new MixedLayout();
-       private final String localPrefix;
        private final String globalPrefix;
+       private final String jspPath;
 
-       public WebIndexer(final String globalPrefix, final String localPrefix) {
+       public WebIndexer(final String globalPrefix, final String jspPath) {
                this.globalPrefix = globalPrefix;
-               this.localPrefix = localPrefix;
+               this.jspPath = jspPath;
        }
 
        @Override
-       public String getDirectoryUrl(final AbstractFile directory) {
-               return "photos.jsp?path=/" + directory.fileName;
+       public String getDirectoryUrl(final AbstractFile directory,
+                       final IndexingContext context) {
+               return jspPath + context.getLocalUrl() + "/"
+                               + UrlParamEncoder.encode(directory.fileName);
        }
 
-       public String getHtml(final String path) throws MalformedURLException,
+       public String getHtml(String requestPath) throws MalformedURLException,
                        IOException, ClassNotFoundException {
 
-               layout.init("Photos", new String[] {}, this, localPrefix);
+               if (requestPath.equals("/"))
+                       requestPath = "";
 
-               final DirectoryMetadata metadata = getMetadataForPath();
+               final MixedLayout layout = new MixedLayout();
+               final IndexingContext context = new IndexingContext(globalPrefix,
+                               requestPath);
+               layout.init("Photos", context.getLocalPathComponents(), this, context);
+
+               final DirectoryMetadata metadata = getMetadataForPath(requestPath);
 
                compileHtml(layout, metadata);
 
-               return layout.getHtml();
+               return layout.getHtml(false, false);
        }
 
-       public DirectoryMetadata getMetadataForPath() throws IOException,
-                       MalformedURLException, ClassNotFoundException {
+       public DirectoryMetadata getMetadataForPath(final String requestPath)
+                       throws IOException, MalformedURLException, ClassNotFoundException {
+
+               final StringBuffer urlStringBuffer = new StringBuffer();
+
+               urlStringBuffer.append(globalPrefix);
+               urlStringBuffer.append(UrlParamEncoder.encode(requestPath));
+               urlStringBuffer.append("/.thumbnails/metadata_6.dat");
 
-               final BufferedInputStream in = new BufferedInputStream(
-                               new URL(globalPrefix + localPrefix
-                                               + ".thumbnails/metadata_6.dat").openStream());
+               final String urlString = urlStringBuffer.toString();
+
+               final BufferedInputStream in = new BufferedInputStream(new URL(
+                               urlString).openStream());
 
                final ObjectInputStream oin = new ObjectInputStream(in);
                final DirectoryMetadata directory = (DirectoryMetadata) oin
@@ -56,19 +72,38 @@ public class WebIndexer extends AbstractIndexer {
        }
 
        @Override
-       public String getThumbnailPath(final Picture picture,
-                       final Dimension desiredDimension) {
+       public String getParentDirectoryUrl(final IndexingContext context) {
+               final StringBuffer result = new StringBuffer();
+
+               result.append(jspPath);
+
+               final List<String> components = context.getLocalPathComponents();
+
+               for (final String pathComponent : components.subList(0,
+                               components.size() - 1)) {
+                       result.append("/");
+                       result.append(pathComponent);
+               }
+
+               return result.toString();
+       }
+
+       @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
                if (picture.getDimensions().equals(desiredDimension))
-                       return localPrefix + picture.fileName;
+                       return context.getGlobalUrl() + context.getLocalUrl() + "/"
+                                       + picture.fileName;
 
                final String thumbnailFileName = picture
                                .getRelativeThumbnailFileName(desiredDimension);
 
-               return localPrefix + Constants.THUMBNAILS_DIRECTORY_NAME + "/"
-                               + thumbnailFileName;
+               return context.getGlobalUrl() + context.getLocalUrl() + "/"
+                               + Constants.THUMBNAILS_DIRECTORY_NAME + "/"
+                               + UrlParamEncoder.encode(thumbnailFileName);
        }
 
 }