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=8ae10026eb4e340a5999f4e39b316419a4b85c62;hpb=4d5a88dcfde63a2250b0a9f430ef07744df99720;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 8ae1002..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,6 +1,6 @@ /* * 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 @@ -9,235 +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"; - - private AbstractIndexer indexer; - - private IndexingContext indexingContext; - - @Override - public void enlistDirectory(final AbstractFile directory) { - dirHtml.append(""); - dirHtml.append("

==> " + directory.fileName + "

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

\n"); - - } +import java.io.IOException; +import java.util.List; - @Override - public void enlistImage(final AbstractFile abstractFile) { - try { +public class MixedLayout implements Layout { - final Picture picture = (Picture) abstractFile; + public static final String encoding = "UTF-8"; - final Dimension imageSize = picture.getDimensions(); + private final Logger logger = Logger.getLogger(MixedLayout.class); - final List recommendedDimensions = Picture - .getThumbnailDimensions(imageSize); + private StringBuffer dirHtml = new StringBuffer(); - Dimension listingDimension = new Dimension(1500, 450); + private StringBuffer filesHtml = new StringBuffer(); - if (listingDimension.width > imageSize.width) - if (listingDimension.height > imageSize.height) - listingDimension = imageSize; - - final String listingThumbnailUrl = indexer.getThumbnailUrl(picture, - listingDimension, indexingContext); - - filesHtml.append("
"); - filesHtml.append("\n"); - - filesHtml.append("\n"); - filesHtml.append("
" - + FilePathParser - .getFileNameWithoutExtension(picture.fileName) - + "
("); + private String galleryTitle; - 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(""); - } + private List path; - filesHtml.append(")\n"); - filesHtml.append("
"); + private AbstractIndexer indexer; - } 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; - - filesHtml - .append("
\n"); - - filesHtml.append("
\n"); - - filesHtml - .append("Video: " - + FilePathParser - .getFileNameWithoutExtension(file.fileName) - + "            "); - filesHtml.append("download as OGV
\n"); - - filesHtml.append("\n"); - - } - - /** {@inheritDoc} */ - @Override - public String getFileNameSuffix() { - return ""; - } - - /** {@inheritDoc} */ - @Override - public String getHtml(final boolean showTitle, - final boolean doHtmlHeaderAndFooter) { - - // assemble final page HTML - final StringBuffer finalHtml = new StringBuffer(); - - if (doHtmlHeaderAndFooter) { - // 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"); - } - - if (showTitle) - finalHtml - .append("

" + galleryTitle + "

\n"); - - showCurrentPath(finalHtml); - - listDirectories(finalHtml); - - finalHtml.append(filesHtml.toString()); - - if (doHtmlHeaderAndFooter) - 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(); - } - - private void listDirectories(final StringBuffer finalHtml) { - finalHtml.append("\n"); - - if (path.size() > 0) { - finalHtml.append(""); - finalHtml.append(""); - finalHtml.append("\n"); - } - - finalHtml.append(dirHtml.toString()); - finalHtml.append("\n\n"); - finalHtml.append("

<== parent directory


\n"); - } - - private void showCurrentPath(final StringBuffer finalHtml) { - finalHtml.append("

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

\n"); - } + 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"); + } }