X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fmeviz%2Fhtmlindexer%2Flayouts%2FMixedLayout.java;h=49ffa7e4b734b39d8a595eabfc26c812750616fe;hb=35252da406b80b367bf8ff130991165c7e865687;hp=fd70b107b1a51224eb0c008d72f4762312cafdc6;hpb=0679806fed21137dc0d10f1ef99dc1bba73ddb95;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 fd70b10..49ffa7e 100755 --- a/src/main/java/eu/svjatoslav/meviz/htmlindexer/layouts/MixedLayout.java +++ b/src/main/java/eu/svjatoslav/meviz/htmlindexer/layouts/MixedLayout.java @@ -1,275 +1,274 @@ /* * 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 java.io.IOException; -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.indexer.AbstractIndexer; import eu.svjatoslav.meviz.htmlindexer.Constants; import eu.svjatoslav.meviz.htmlindexer.IndexingContext; -import eu.svjatoslav.meviz.htmlindexer.Layout; 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.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"; + public static final String encoding = "UTF-8"; + + private final Logger logger = Logger.getLogger(MixedLayout.class); + + private StringBuffer dirHtml = new StringBuffer(); + + private StringBuffer filesHtml = new StringBuffer(); + + private String galleryTitle; + + private List path; + + private AbstractIndexer indexer; - Logger logger = Logger.getLogger(MixedLayout.class); + 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"); - StringBuffer dirHtml = new StringBuffer(); + } + + @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("" + + getFileNameWithoutExtension(picture.fileName) + + "
"); + + // links to thumbnails of various sizes + filesHtml.append("(" + enlistImageDimensions(picture) + ")\n"); + + filesHtml.append("
"); + } + + /** + * {@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 enlistVideo(Video video) { + + filesHtml.append("
\n"); - StringBuffer filesHtml = new StringBuffer(); + // watchable video + filesHtml.append(" \n"); - String galleryTitle; + filesHtml.append("
\n"); - List path; + // video title + filesHtml.append(" Video: " + + getFileNameWithoutExtension(video.fileName) + + "            "); - private AbstractIndexer indexer; + // video download link + filesHtml.append(" download\n"); + + filesHtml.append("
\n"); - private IndexingContext indexingContext; + filesHtml.append("\n"); + } - @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) - throws UnsupportedEncodingException { - - 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"); - - 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 StringBuffer html = new StringBuffer(); - - if (doHtmlHeaderAndFooter) { - // 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"); - } - - if (showTitle) - html.append("

" + galleryTitle + "

\n"); - - html.append(showCurrentPath()); - html.append(listDirectories()); - html.append(directory.getHeaderMevizMetadataHtml()); - html.append(filesHtml.toString()); - - if (doHtmlHeaderAndFooter) - html.append("
\n"); - - return html.toString(); - } - - 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(); - } + private String getFileUrl(AbstractFile file) { + return indexingContext.getGlobalUrl() + + urlEncode(indexingContext.getLocalUrl() + "/" + + file.fileName); + } }