X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fmeviz%2Fhtmlindexer%2Flayouts%2FMixedLayout.java;h=acc3c4e86859adc5ce6e3be6dfa742b0af8c84fa;hb=cf6e4ace4972f24f40f88ea12fcf99c763e4e40a;hp=4c00985fbc754df7fd74c7b3bdf1bf686fd0bed1;hpb=f826af1cdb62425a975cd174ecd0905100d3a2dc;p=meviz.git diff --git a/src/main/java/eu/svjatoslav/meviz/htmlindexer/layouts/MixedLayout.java b/src/main/java/eu/svjatoslav/meviz/htmlindexer/layouts/MixedLayout.java index 4c00985..acc3c4e 100755 --- a/src/main/java/eu/svjatoslav/meviz/htmlindexer/layouts/MixedLayout.java +++ b/src/main/java/eu/svjatoslav/meviz/htmlindexer/layouts/MixedLayout.java @@ -1,7 +1,7 @@ /* * Meviz - Various tools collection to work with multimedia. - * Copyright (C) 2012, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu - * + * Copyright (C) 2012 -- 2018, 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. @@ -9,284 +9,308 @@ package eu.svjatoslav.meviz.htmlindexer.layouts; -import java.io.UnsupportedEncodingException; -import java.util.List; - -import org.apache.log4j.Logger; - import eu.svjatoslav.commons.file.FilePathParser; -import eu.svjatoslav.commons.network.UrlParamEncoder; -import eu.svjatoslav.meviz.htmlindexer.AbstractIndexer; -import eu.svjatoslav.meviz.htmlindexer.Constants; -import eu.svjatoslav.meviz.htmlindexer.IndexingContext; -import eu.svjatoslav.meviz.htmlindexer.Layout; +import eu.svjatoslav.meviz.htmlindexer.*; 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 org.apache.log4j.Logger; -public class MixedLayout implements Layout { - - Logger logger = Logger.getLogger(MixedLayout.class); - - StringBuffer dirHtml = new StringBuffer(); - - StringBuffer filesHtml = new StringBuffer(); - - String galleryTitle; - - List path; - - public static final String encoding = "UTF-8"; - - int currentColumn = 0; - - int horizontalColumnsLimit = 2; - - private AbstractIndexer indexer; - - private IndexingContext indexingContext; - - public void columnAdded() { - currentColumn++; - if (currentColumn > horizontalColumnsLimit) { - - currentColumn = 0; - - filesHtml.append("\n"); - } - } - - @Override - public void enlistDirectory(final AbstractFile directory) { - dirHtml.append(""); - dirHtml.append(" ==> " + directory.fileName + ""); - dirHtml.append("\n"); - - } - - @Override - public void enlistFile(final AbstractFile file) { - finishRow(); - - final String fullFileName = file.fileName; - - filesHtml.append("\n"); - filesHtml.append(" " + fullFileName + "\n"); - filesHtml.append("  (" - + FilePathParser.getFileSizeDescription(file.getFileLength()) - + ")\n"); - filesHtml.append("\n"); - - } - - @Override - public void enlistImage(final AbstractFile abstractFile) { - try { - - final Picture picture = (Picture) abstractFile; +import java.io.IOException; +import java.util.List; - final Dimension imageSize = picture.getDimensions(); +public class MixedLayout implements Layout { - final List recommendedDimensions = Picture - .getThumbnailDimensions(imageSize); + public static final String encoding = "UTF-8"; - Dimension listingDimension = new Dimension(500, 500); + private final Logger logger = Logger.getLogger(MixedLayout.class); - if (listingDimension.width > imageSize.width) - if (listingDimension.height > imageSize.height) - listingDimension = imageSize; + private StringBuffer dirHtml = new StringBuffer(); - final String listingThumbnailUrl = indexer.getThumbnailUrl(picture, - listingDimension, indexingContext); + private StringBuffer filesHtml = new StringBuffer(); - startcolumn(); + private String galleryTitle; - filesHtml.append("
\n"); + private List path; - filesHtml.append("\n"); - filesHtml.append("
" - + FilePathParser - .getFileNameWithoutExtension(picture.fileName) - + "
("); + private AbstractIndexer indexer; - int count = 0; - for (final Dimension dimension : recommendedDimensions) { - count++; - if (count > 1) - filesHtml.append(", "); - filesHtml.append(""); - filesHtml.append(dimension.width + "x" + dimension.height); - filesHtml.append(""); - } - - filesHtml.append(")\n"); - - columnAdded(); - - } catch (final Exception e) { - logger.error( - "Error generating thumbnails for image file: " - + e.toString() - + ", thumbnail generation skipped, enlisting as ordinary file instead.", - e); - enlistFile(abstractFile); - } - } - - /** {@inheritDoc} */ - @Override - public void enlistOgv(final AbstractFile abstractFile) - throws UnsupportedEncodingException { - - final GeneralFile file = (GeneralFile) abstractFile; - - finishRow(); - - filesHtml - .append("\n"); - filesHtml.append("\n"); - - filesHtml.append("\n"); - - filesHtml.append("
\n"); - - filesHtml - .append("Video: " - + FilePathParser - .getFileNameWithoutExtension(file.fileName) - + "            "); - filesHtml.append("download as OGV\n"); - - filesHtml.append("\n"); - - } - - public void finishRow() { - - if (currentColumn == 0) - return; - - while (currentColumn <= horizontalColumnsLimit) { - filesHtml.append(""); - currentColumn++; - } - filesHtml.append("\n"); - currentColumn = 0; - } - - /** {@inheritDoc} */ - @Override - public String getFileNameSuffix() { - return ""; - } - - /** {@inheritDoc} */ - @Override - public String getHtml() { - - // assemble final page HTML - final StringBuffer finalHtml = new StringBuffer(); - - // page header - finalHtml.append("\n"); - finalHtml.append("\n"); - finalHtml - .append(" \n"); - finalHtml.append("\n"); - finalHtml - .append("\n"); - finalHtml.append("\n"); - finalHtml.append("\n"); - finalHtml.append("\n"); - finalHtml.append("

" + galleryTitle + "

\n"); - - finalHtml.append("

"); - for (final String p : path) - finalHtml.append(" / " + p); - finalHtml.append("

\n"); - - // append directory listing - finalHtml.append("\n"); - - if (path.size() > 0) { - finalHtml.append(""); - finalHtml.append(""); - finalHtml.append("\n"); - } - - finalHtml.append(dirHtml.toString()); - finalHtml.append("\n\n"); - finalHtml.append("
<== ..

\n"); - - // append file listing - - finishRow(); - finalHtml.append("\n"); - finalHtml.append(filesHtml.toString()); - finalHtml.append("\n
\n"); - - finalHtml.append("
\n"); - - return finalHtml.toString(); - } - - @Override - public void init(final String galleryTitle, final List path, - final AbstractIndexer indexer, final IndexingContext indexingContext) { - - this.indexer = indexer; - this.galleryTitle = galleryTitle; - this.path = path; - this.indexingContext = indexingContext; - - dirHtml = new StringBuffer(); - filesHtml = new StringBuffer(); - } - - public void startcolumn() { - if (currentColumn == 0) { - filesHtml.append(""); - currentColumn = 1; - } - } + private IndexingContext indexingContext; + @Override + public void enlistDirectory(final AbstractFile directory, + final DirectoryMetadata parentDirectoryMetadata) { + dirHtml.append(""); + dirHtml.append("

==> " + directory.fileName + "

"); + dirHtml.append("\n"); + + } + + @Override + public void enlistFile(final AbstractFile file, + final DirectoryMetadata parentDirectoryMetadata) { + + final String fullFileName = file.fileName; + + filesHtml.append("
" + fullFileName + "\n"); + filesHtml.append("  (" + + FilePathParser.getFileSizeDescription(file.getFileLength()) + + ")

\n"); + + } + + @Override + public void enlistImage(final Picture picture, + final DirectoryMetadata parentDirectoryMetadata) { + try { + enlistImageInternal(picture); + } catch (final Exception e) { + logger.error( + "Error generating thumbnails for image file: " + + e.toString() + + ", thumbnail generation skipped, enlisting as ordinary file instead.", + e); + enlistFile(picture, parentDirectoryMetadata); + } + } + + private String enlistImageDimensions(final Picture picture) { + final StringBuilder html = new StringBuilder(); + + final List recommendedDimensions = Picture + .getThumbnailDimensions(picture.getDimensions()); + + int count = 0; + for (final Dimension dimension : recommendedDimensions) { + count++; + if (count > 1) + html.append(", "); + html.append(""); + html.append(dimension.width + "x" + dimension.height); + html.append(""); + } + + return html.toString(); + } + + private void enlistImageInternal(final Picture picture) { + + filesHtml.append("
"); + + // clickable image thumbnail + filesHtml.append("\n"); + + filesHtml.append("
\n"); + + // file name + filesHtml.append("" + + FilePathParser.getFileNameWithoutExtension(picture.fileName) + + "
"); + + // links to thumbnails of various sizes + filesHtml.append("(" + enlistImageDimensions(picture) + ")\n"); + + filesHtml.append("
"); + } + + /** + * {@inheritDoc} + */ + @Override + public void enlistOgv(final AbstractFile abstractFile, + final DirectoryMetadata parentDirectoryMetadata) { + + final GeneralFile file = (GeneralFile) abstractFile; + + filesHtml.append("
"); + + // watchable video + filesHtml + .append("\n"); + filesHtml.append("
\n"); + + // video title + filesHtml + .append("Video: " + + FilePathParser + .getFileNameWithoutExtension(file.fileName) + + "            "); + + // video download link + filesHtml.append("download as OGV file"); + + filesHtml.append("
\n"); + + filesHtml.append("\n"); + + } + + /** + * {@inheritDoc} + */ + @Override + public String getFileNameSuffix() { + return ""; + } + + /** + * {@inheritDoc} + * + * @throws IOException + */ + @Override + public String getHtml(final boolean showTitle, + final boolean doHtmlHeaderAndFooter, + final DirectoryMetadata directory) { + + // assemble final page HTML + final StringBuilder html = new StringBuilder(); + + if (doHtmlHeaderAndFooter) + appendHtmlHeader(html); + + if (showTitle) + html.append("

" + galleryTitle + "

\n"); + + html.append(showCurrentPath()); + html.append(listDirectories()); + html.append(directory.getHeaderMevizMetadataHtml()); + html.append(filesHtml.toString()); + + if (doHtmlHeaderAndFooter) + appendHtmlFooter(html); + + return html.toString(); + } + + private void appendHtmlFooter(StringBuilder html) { + html.append("\n"); + } + + private void appendHtmlHeader(StringBuilder html) { + // page header + html.append("\n"); + html.append("\n"); + html.append(" \n"); + html.append("\n"); + html.append("\n"); + html.append("\n"); + html.append("\n"); + html.append("\n"); + } + + private String getImageThumbnailUrl(final Picture picture) { + final Dimension imageSize = picture.getDimensions(); + + Dimension listingDimension = new Dimension(1500, 450); + + if (listingDimension.width > imageSize.width) + if (listingDimension.height > imageSize.height) + listingDimension = imageSize; + + return indexer.getThumbnailUrl(picture, listingDimension, + indexingContext); + } + + @Override + public void init(final String galleryTitle, final List path, + final AbstractIndexer indexer, final IndexingContext indexingContext) { + + this.indexer = indexer; + this.galleryTitle = galleryTitle; + this.path = path; + this.indexingContext = indexingContext; + + dirHtml = new StringBuffer(); + filesHtml = new StringBuffer(); + } + + private String listDirectories() { + final StringBuilder html = new StringBuilder(); + html.append("\n"); + + if (path.size() > 0) { + html.append(""); + html.append(""); + html.append("\n"); + } + + html.append(dirHtml.toString()); + html.append("\n\n"); + html.append("

<== parent directory


\n"); + + return html.toString(); + } + + private String showCurrentPath() { + final StringBuilder html = new StringBuilder(); + html.append("

"); + for (final String p : path) + html.append(" / " + p); + html.append("

\n"); + + return html.toString(); + } + + @Override + public void enlistWebm(AbstractFile abstractFile, + DirectoryMetadata directory) { + final GeneralFile file = (GeneralFile) abstractFile; + + filesHtml.append("
"); + + // watchable video + + String fileUrl = indexingContext.getGlobalUrl() + + Utils.urlEncode(indexingContext.getLocalUrl() + "/" + + file.fileName); + + filesHtml.append("\n"); + filesHtml.append("
\n"); + + // video title + filesHtml + .append("Video: " + + FilePathParser + .getFileNameWithoutExtension(file.fileName) + + "            "); + + // video download link + filesHtml.append("download as WebM file"); + + filesHtml.append("
\n"); + + filesHtml.append("\n"); + } }