Code refactoring
[meviz.git] / src / main / java / eu / svjatoslav / meviz / htmlindexer / layouts / MixedLayout.java
index ebc5ca2..49ffa7e 100755 (executable)
@@ -1,40 +1,44 @@
 /*
  * Meviz - Various tools collection to work with multimedia.
- * Copyright (C) 2012, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
+ * Copyright (C) 2012 -- 2019, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
  *
  * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public License
- * as published by the Free Software Foundation.
- */
+ * modify it under the terms of version 3 of the GNU Lesser General Public License
+ * or later as published by the Free Software Foundation.
+*/
 
 package eu.svjatoslav.meviz.htmlindexer.layouts;
 
 import eu.svjatoslav.commons.file.FilePathParser;
-import eu.svjatoslav.meviz.htmlindexer.*;
+import eu.svjatoslav.meviz.htmlindexer.indexer.AbstractIndexer;
+import eu.svjatoslav.meviz.htmlindexer.Constants;
+import eu.svjatoslav.meviz.htmlindexer.IndexingContext;
 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.GeneralFile;
 import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.Picture;
+import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.Video;
 import org.apache.log4j.Logger;
 
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
 import java.util.List;
 
+import static eu.svjatoslav.commons.file.FilePathParser.getFileNameWithoutExtension;
+import static eu.svjatoslav.meviz.htmlindexer.Utils.urlEncode;
+
 public class MixedLayout implements Layout {
 
     public static final String encoding = "UTF-8";
 
-    Logger logger = Logger.getLogger(MixedLayout.class);
+    private final Logger logger = Logger.getLogger(MixedLayout.class);
 
-    StringBuffer dirHtml = new StringBuffer();
+    private StringBuffer dirHtml = new StringBuffer();
 
-    StringBuffer filesHtml = new StringBuffer();
+    private StringBuffer filesHtml = new StringBuffer();
 
-    String galleryTitle;
+    private String galleryTitle;
 
-    List<String> path;
+    private List<String> path;
 
     private AbstractIndexer indexer;
 
@@ -59,7 +63,7 @@ public class MixedLayout implements Layout {
 
         filesHtml.append("<div style=\"clear: both;\"><a href=\""
                 + indexingContext.getGlobalUrl()
-                + Utils.urlEncode(indexingContext.getLocalUrl() + "/"
+                + urlEncode(indexingContext.getLocalUrl() + "/"
                 + fullFileName) + "\">" + fullFileName + "</a>\n");
         filesHtml.append("&nbsp;&nbsp;("
                 + FilePathParser.getFileSizeDescription(file.getFileLength())
@@ -110,7 +114,7 @@ public class MixedLayout implements Layout {
         // clickable image thumbnail
         filesHtml.append("<a href=\""
                 + indexingContext.getGlobalUrl()
-                + Utils.urlEncode(indexingContext.getLocalUrl() + "/"
+                + urlEncode(indexingContext.getLocalUrl() + "/"
                 + picture.fileName) + "\">\n");
 
         filesHtml.append("<img border=\"0\" src=\""
@@ -118,7 +122,7 @@ public class MixedLayout implements Layout {
 
         // file name
         filesHtml.append("<b>"
-                + FilePathParser.getFileNameWithoutExtension(picture.fileName)
+                + getFileNameWithoutExtension(picture.fileName)
                 + "</b><br/>");
 
         // links to thumbnails of various sizes
@@ -127,49 +131,6 @@ public class MixedLayout implements Layout {
         filesHtml.append("</div>");
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void enlistOgv(final AbstractFile abstractFile,
-                          final DirectoryMetadata parentDirectoryMetadata)
-            throws UnsupportedEncodingException {
-
-        final GeneralFile file = (GeneralFile) abstractFile;
-
-        filesHtml.append("<div style=\"margin: 30px; clear: both;\">");
-
-        // watchable video
-        filesHtml
-                .append("<video preload=\"metadata\" controls=\"controls\" tabindex=\"0\">\n");
-        filesHtml
-                .append("<source type=\"video/ogg\" codecs=\"theora, vorbis\" src=\""
-                        + indexingContext.getGlobalUrl()
-                        + Utils.urlEncode(indexingContext.getLocalUrl() + "/"
-                        + file.fileName) + "\">\n");
-        filesHtml.append("</source>\n");
-        filesHtml.append("</video>\n");
-        filesHtml.append("<br/>\n");
-
-        // video title
-        filesHtml
-                .append("Video: <b>"
-                        + FilePathParser
-                        .getFileNameWithoutExtension(file.fileName)
-                        + "<b/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
-
-        // video download link
-        filesHtml.append("<a href=\""
-                + indexingContext.getGlobalUrl()
-                + Utils.urlEncode(indexingContext.getLocalUrl() + "/"
-                + file.fileName) + "\">download as OGV file</a>");
-
-        filesHtml.append("</div>\n");
-
-        filesHtml.append("\n");
-
-    }
-
     /**
      * {@inheritDoc}
      */
@@ -191,17 +152,8 @@ public class MixedLayout implements Layout {
         // assemble final page HTML
         final StringBuilder html = new StringBuilder();
 
-        if (doHtmlHeaderAndFooter) {
-            // page header
-            html.append("<HTML>\n");
-            html.append("<HEAD>\n");
-            html.append("    <meta HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=UTF-8\"/>\n");
-            html.append("</HEAD>\n");
-            html.append("<BODY bgcolor=\"#000000\" alink=\"#50ffff\" link=\"#50ffff\" vlink=\"#ff50ff\" text=\"#ffffff\">\n");
-            html.append("<!-- " + Constants.HTML_MAGIC_STRING + " -->\n");
-            html.append("<!-- " + Constants.HTML_MEMO + " -->\n");
-            html.append("<font color=\"#ffffff\">\n");
-        }
+        if (doHtmlHeaderAndFooter)
+            appendHtmlHeader(html);
 
         if (showTitle)
             html.append("<CENTER><H1>" + galleryTitle + "</H1></CENTER>\n");
@@ -212,11 +164,27 @@ public class MixedLayout implements Layout {
         html.append(filesHtml.toString());
 
         if (doHtmlHeaderAndFooter)
-            html.append("</font></BODY></HTML>\n");
+            appendHtmlFooter(html);
 
         return html.toString();
     }
 
+    private void appendHtmlFooter(StringBuilder html) {
+        html.append("</font></BODY></HTML>\n");
+    }
+
+    private void appendHtmlHeader(StringBuilder html) {
+        // page header
+        html.append("<HTML>\n");
+        html.append("<HEAD>\n");
+        html.append("    <meta HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=UTF-8\"/>\n");
+        html.append("</HEAD>\n");
+        html.append("<BODY bgcolor=\"#000000\" alink=\"#50ffff\" link=\"#50ffff\" vlink=\"#ff50ff\" text=\"#ffffff\">\n");
+        html.append("<!-- " + Constants.HTML_MAGIC_STRING + " -->\n");
+        html.append("<!-- " + Constants.HTML_MEMO + " -->\n");
+        html.append("<font color=\"#ffffff\">\n");
+    }
+
     private String getImageThumbnailUrl(final Picture picture) {
         final Dimension imageSize = picture.getDimensions();
 
@@ -273,39 +241,34 @@ public class MixedLayout implements Layout {
     }
 
     @Override
-    public void enlistWebm(AbstractFile abstractFile,
-                           DirectoryMetadata directory) {
-        final GeneralFile file = (GeneralFile) abstractFile;
+    public void enlistVideo(Video video) {
 
-        filesHtml.append("<div style=\"margin: 30px; clear: both;\">");
+        filesHtml.append("<div style=\"margin: 30px; clear: both;\">\n");
 
         // watchable video
+        filesHtml.append("  <video width=\"640\" controls>\n");
+        filesHtml.append("    <source src=\"" + getFileUrl(video) + "\" type=\"" + video.mimeType + "\"/>\n");
+        filesHtml.append("  </video>\n");
 
-        String fileUrl = indexingContext.getGlobalUrl()
-                + Utils.urlEncode(indexingContext.getLocalUrl() + "/"
-                + file.fileName);
-
-        filesHtml.append("<video controls>\n");
-        filesHtml.append("  <source src=\"" + fileUrl
-                + "\" type='video/webm;codecs=\"vp8, opus\"'/>\n");
-        filesHtml.append("</video>\n");
-        filesHtml.append("<br/>\n");
+        filesHtml.append("  <br/>\n");
 
         // video title
-        filesHtml
-                .append("Video: <b>"
-                        + FilePathParser
-                        .getFileNameWithoutExtension(file.fileName)
+        filesHtml.append("  Video: <b>"
+                        + getFileNameWithoutExtension(video.fileName)
                         + "<b/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
 
         // video download link
-        filesHtml.append("<a href=\""
-                + indexingContext.getGlobalUrl()
-                + Utils.urlEncode(indexingContext.getLocalUrl() + "/"
-                + file.fileName) + "\">download as WebM file</a>");
+        filesHtml.append("  <a href=\"" + getFileUrl(video) + "\">download</a>\n");
 
         filesHtml.append("</div>\n");
 
         filesHtml.append("\n");
     }
+
+
+    private String getFileUrl(AbstractFile file) {
+        return indexingContext.getGlobalUrl()
+                    + urlEncode(indexingContext.getLocalUrl() + "/"
+                    + file.fileName);
+    }
 }