Use FFMpeg instead of Avconv
[meviz.git] / src / main / java / eu / svjatoslav / meviz / htmlindexer / WebIndexer.java
index acc1a28..d2aabcd 100644 (file)
 package eu.svjatoslav.meviz.htmlindexer;
 
-import java.io.BufferedInputStream;
-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;
 import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.AbstractFile;
 import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.Picture;
 
-public class WebIndexer extends AbstractIndexer {
-
-       private static final int METADATA_LOAD_TRY_COUNT = 10;
-       private final String globalPrefix;
-       private final String jspPath;
-
-       public WebIndexer(final String globalPrefix, final String jspPath) {
-               this.globalPrefix = globalPrefix;
-               this.jspPath = jspPath;
-       }
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URL;
+import java.util.List;
 
-       @Override
-       public String getDirectoryUrl(final AbstractFile directory,
-                       final IndexingContext context) {
-               return jspPath + context.getLocalUrl() + "/"
-                               + UrlParamEncoder.encode(directory.fileName);
-       }
+public class WebIndexer extends AbstractIndexer {
 
-       public String getHtml(String requestPath) throws MalformedURLException,
-       IOException, ClassNotFoundException {
+    private static final int METADATA_LOAD_TRY_COUNT = 10;
+    private final String globalPrefix;
+    private final String jspPath;
 
-               if (requestPath == null)
-                       requestPath = "";
+    public WebIndexer(final String globalPrefix, final String jspPath) {
+        this.globalPrefix = globalPrefix;
+        this.jspPath = jspPath;
+    }
 
-               if (requestPath.equals("/"))
-                       requestPath = "";
+    @Override
+    public void compileHtml(final Layout layout,
+                            final DirectoryMetadata directory)
+            throws UnsupportedEncodingException {
+        super.compileHtml(layout, directory);
+    }
 
-               final MixedLayout layout = new MixedLayout();
-               final IndexingContext context = new IndexingContext(globalPrefix,
-                               requestPath);
-               layout.init("Photos", context.getLocalPathComponents(), this, context);
+    @Override
+    public String getDirectoryUrl(final AbstractFile directory,
+                                  final IndexingContext context) {
+        return jspPath + context.getLocalUrl() + "/" + directory.fileName;
+    }
 
-               final DirectoryMetadata directory = getMetadataForPath(requestPath);
+    public String getHtml(String requestPath) throws
+            IOException, ClassNotFoundException {
 
-               compileHtml(layout, directory);
+        if (requestPath == null)
+            requestPath = "";
 
-               return layout.getHtml(false, false, directory);
-       }
+        if (requestPath.equals("/"))
+            requestPath = "";
 
-       public DirectoryMetadata getMetadataForPath(final String requestPath)
-                       throws ClassNotFoundException, IOException {
+        final MixedLayout layout = new MixedLayout();
+        final IndexingContext context = new IndexingContext(globalPrefix,
+                requestPath);
+        layout.init("Photos", context.getLocalPathComponents(), this, context);
 
-               final StringBuffer urlStringBuffer = new StringBuffer();
+        final DirectoryMetadata directory = getMetadataForPath(requestPath);
 
-               urlStringBuffer.append(globalPrefix);
-               urlStringBuffer.append(UrlParamEncoder.encode(requestPath));
-               urlStringBuffer.append("/.thumbnails/metadata_6.dat");
+        compileHtml(layout, directory);
 
-               final String urlString = urlStringBuffer.toString();
+        return layout.getHtml(false, false, directory);
+    }
 
-               IOException exception = null;
+    private DirectoryMetadata getMetadataForPath(final String requestPath)
+            throws ClassNotFoundException, IOException {
 
-               for (int i = 0; i < METADATA_LOAD_TRY_COUNT; i++)
-                       try {
+        final String urlString = globalPrefix + Utils.urlEncode(requestPath) + "/.thumbnails/metadata_6.dat";
 
-                               final BufferedInputStream in = new BufferedInputStream(new URL(
-                                               urlString).openStream());
+        for (int i = 0; true; i++)
+            try {
+                return attemptDirectoryMetadataDownload(urlString);
+            } catch (final IOException e) {
+                if (i > METADATA_LOAD_TRY_COUNT) throw e;
+            }
+    }
 
-                               final ObjectInputStream oin = new ObjectInputStream(in);
-                               final DirectoryMetadata directory = (DirectoryMetadata) oin
-                                               .readObject();
-                               in.close();
+    private DirectoryMetadata attemptDirectoryMetadataDownload(String urlString) throws IOException, ClassNotFoundException {
+        final BufferedInputStream inputStream = new BufferedInputStream(new URL(
+                urlString).openStream());
 
-                               return directory;
-                       } catch (final IOException e) {
-                               exception = e;
-                       }
+        final ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
+        final DirectoryMetadata directory = (DirectoryMetadata) objectInputStream
+                .readObject();
+        inputStream.close();
 
-               throw exception;
-       }
+        return directory;
+    }
 
-       @Override
-       public String getParentDirectoryUrl(final IndexingContext context) {
-               final StringBuffer result = new StringBuffer();
+    @Override
+    public String getParentDirectoryUrl(final IndexingContext context) {
+        final StringBuilder result = new StringBuilder();
 
-               result.append(jspPath);
+        result.append(jspPath);
 
-               final List<String> components = context.getLocalPathComponents();
+        final List<String> components = context.getLocalPathComponents();
 
-               for (final String pathComponent : components.subList(0,
-                               components.size() - 1)) {
-                       result.append("/");
-                       result.append(pathComponent);
-               }
+        for (final String pathComponent : components.subList(0,
+                components.size() - 1)) {
+            result.append("/");
+            result.append(pathComponent);
+        }
 
-               return result.toString();
-       }
+        return result.toString();
+    }
 
-       @Override
-       public String getThumbnailUrl(final Picture picture,
-                       final Dimension desiredDimension, final IndexingContext context) {
+    @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 context.getGlobalUrl() + context.getLocalUrl() + "/"
-                       + picture.fileName;
+        // in case thumbnail size was equal to original, then return original
+        // file path
+        if (picture.getDimensions().equals(desiredDimension))
+            return context.getGlobalUrl() + context.getLocalUrl() + "/"
+                    + picture.fileName;
 
-               final String thumbnailFileName = picture
-                               .getRelativeThumbnailFileName(desiredDimension);
+        final String thumbnailFileName = picture
+                .getRelativeThumbnailFileName(desiredDimension);
 
-               return context.getGlobalUrl() + context.getLocalUrl() + "/"
-               + Constants.THUMBNAILS_DIRECTORY_NAME + "/"
-               + UrlParamEncoder.encode(thumbnailFileName);
-       }
+        return context.getGlobalUrl() + context.getLocalUrl() + "/"
+                + Constants.THUMBNAILS_DIRECTORY_NAME + "/"
+                + Utils.urlEncode(thumbnailFileName);
+    }
 
 }