possilibity to generate HTML while embedded on the web site
[meviz.git] / src / main / java / eu / svjatoslav / meviz / htmlindexer / WebIndexer.java
index 61013a4..29ceac1 100644 (file)
@@ -5,6 +5,7 @@ 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;
@@ -15,24 +16,29 @@ import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.Picture;
 
 public class WebIndexer extends AbstractIndexer {
 
-       private final String localPrefix;
        private final String globalPrefix;
 
-       public WebIndexer(final String globalPrefix, final String localPrefix) {
+       public WebIndexer(final String globalPrefix) {
                this.globalPrefix = globalPrefix;
-               this.localPrefix = localPrefix;
        }
 
        @Override
-       public String getDirectoryUrl(final AbstractFile directory) {
-               return "photos.jsp?path=/" + UrlParamEncoder.encode(directory.fileName);
+       public String getDirectoryUrl(final AbstractFile directory,
+                       final IndexingContext context) {
+               return "photos.jsp?path=" + context.getLocalUrl() + "/"
+                               + UrlParamEncoder.encode(directory.fileName);
        }
 
-       public String getHtml(final String requestPath)
-                       throws MalformedURLException, IOException, ClassNotFoundException {
+       public String getHtml(String requestPath) throws MalformedURLException,
+                       IOException, ClassNotFoundException {
+
+               if (requestPath.equals("/"))
+                       requestPath = "";
 
                final MixedLayout layout = new MixedLayout();
-               layout.init("Photos", new String[] {}, this, localPrefix + requestPath);
+               final IndexingContext context = new IndexingContext(globalPrefix,
+                               requestPath);
+               layout.init("Photos", context.getLocalPathComponents(), this, context);
 
                final DirectoryMetadata metadata = getMetadataForPath(requestPath);
 
@@ -47,11 +53,8 @@ public class WebIndexer extends AbstractIndexer {
                final StringBuffer urlStringBuffer = new StringBuffer();
 
                urlStringBuffer.append(globalPrefix);
-               urlStringBuffer.append(UrlParamEncoder.encode(localPrefix));
                urlStringBuffer.append(UrlParamEncoder.encode(requestPath));
-               if (!requestPath.equals("/"))
-                       urlStringBuffer.append("/");
-               urlStringBuffer.append(".thumbnails/metadata_6.dat");
+               urlStringBuffer.append("/.thumbnails/metadata_6.dat");
 
                final String urlString = urlStringBuffer.toString();
 
@@ -67,19 +70,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("photos.jsp?path=");
+
+               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);
        }
 
 }