From: <fg...@us...> - 2010-02-07 18:57:32
|
Revision: 1851 http://openutils.svn.sourceforge.net/openutils/?rev=1851&view=rev Author: fgiust Date: 2010-02-07 18:57:21 +0000 (Sun, 07 Feb 2010) Log Message: ----------- MEDIA-80 metadata are saved as properties of the main node now - still needs to be cleaned up and reviewed Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/MediaTypeHandler.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/BaseTypeHandler.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/BaseVideoTypeHandler.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/ImageTypeHandler.java trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_en.properties trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_it.properties trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html Added Paths: ----------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/MediaMetadataFormatUtils.java Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.java 2010-02-07 15:48:22 UTC (rev 1850) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.java 2010-02-07 18:57:21 UTC (rev 1851) @@ -55,6 +55,7 @@ import org.apache.commons.chain.Command; import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.time.StopWatch; import org.apache.jackrabbit.util.ISO9075; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -241,6 +242,9 @@ if (mediasOfType != null) { + + StopWatch watch = new StopWatch(); + watch.start(); for (Content media : mediasOfType) { MediaBean mb = new MediaBean(); @@ -273,6 +277,8 @@ medias.add(mb); } + + log.warn("Took {} to display {} files", watch.toSplitString(), mediasOfType.size()); } return super.show(); @@ -785,4 +791,9 @@ } return "white"; } + + public String getMessage(String key, String param) + { + return getMsgs().get(key, new String[]{param }); + } } Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/MediaTypeHandler.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/MediaTypeHandler.java 2010-02-07 15:48:22 UTC (rev 1850) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/MediaTypeHandler.java 2010-02-07 18:57:21 UTC (rev 1851) @@ -24,8 +24,6 @@ import info.magnolia.cms.security.AccessDeniedException; import java.io.File; -import java.util.Arrays; -import java.util.List; import java.util.Map; import javax.jcr.RepositoryException; @@ -40,11 +38,20 @@ public interface MediaTypeHandler { - /** - * languages - */ - List<String> LANGUAGES = Arrays.asList("en", "en_us", "it", "fr", "de"); + String METADATA_WIDTH = "media_width"; + String METADATA_HEIGHT = "media_height"; + + String METADATA_BITDEPTH = "media_bitdepth"; + + String METADATA_DURATION = "media_duration"; + + String METADATA_FRAMERATE = "media_framerate"; + + String METADATA_EXTENSION = "media_extension"; + + String METADATA_SIZE = "media_size"; + /** * init handler * @param typeDefinitionNode type definition node Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/BaseTypeHandler.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/BaseTypeHandler.java 2010-02-07 15:48:22 UTC (rev 1850) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/BaseTypeHandler.java 2010-02-07 18:57:21 UTC (rev 1851) @@ -35,6 +35,7 @@ import java.util.Locale; import java.util.Map; +import javax.jcr.PropertyType; import javax.jcr.RepositoryException; import javax.servlet.http.HttpServletRequest; @@ -43,7 +44,6 @@ import net.sourceforge.openutils.mgnlmedia.media.types.MediaTypeHandler; import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.math.NumberUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -251,11 +251,11 @@ String languageCountry = language + "_" + locale.getCountry().toLowerCase(); try { - if (LANGUAGES.contains(languageCountry) && media.hasNodeData(property + "-" + languageCountry)) + if (media.hasNodeData(property + "-" + languageCountry)) { return NodeDataUtil.getString(media, property + "-" + languageCountry); } - else if (LANGUAGES.contains(language) && media.hasNodeData(property + "-" + language)) + else if (media.hasNodeData(property + "-" + language)) { return NodeDataUtil.getString(media, property + "-" + language); } @@ -308,36 +308,61 @@ */ public Map<String, String> getMediaInfo(Content media) { - FileProperties fp = new FileProperties(media, ORGINAL_NODEDATA_NAME); - String extension = fp.getProperty(FileProperties.PROPERTY_EXTENSION); - String size = StringUtils.EMPTY; + Map<String, String> info = new LinkedHashMap<String, String>(); - try + NodeData originalFileNodeData = getOriginalFileNodeData(media); + if (originalFileNodeData.getType() == PropertyType.BINARY) { - size = fp.getProperty(FileProperties.PROPERTY_SIZE); + + FileProperties fp = new FileProperties(media, ORGINAL_NODEDATA_NAME); + + String extension = fp.getProperty(FileProperties.PROPERTY_EXTENSION); + info.put(METADATA_EXTENSION, extension); + + String size = StringUtils.EMPTY; + + try + { + size = fp.getProperty(FileProperties.PROPERTY_SIZE); + } + catch (NumberFormatException nfe) + { + // just ignore, no file size info + } + info.put(METADATA_SIZE, size); + } - catch (NumberFormatException nfe) - { - // just ignore, no file size info - } - int width = NumberUtils.toInt(fp.getProperty(FileProperties.PROPERTY_WIDTH)); - int height = NumberUtils.toInt(fp.getProperty(FileProperties.PROPERTY_HEIGHT)); + addToInfo(media, info, METADATA_WIDTH); + addToInfo(media, info, METADATA_HEIGHT); + addToInfo(media, info, METADATA_BITDEPTH); - // return extension + (width > 0 ? (" " + width + "x" + height) : "") + " " + size; + return info; + } - Map<String, String> info = new LinkedHashMap<String, String>(); - info.put("extension", extension); - if (width > 0) + protected void addToInfo(Content media, Map<String, String> info, String key) + { + NodeData data = media.getNodeData(key); + + String string = null; + if (data.getType() == PropertyType.LONG || data.getType() == PropertyType.DOUBLE) { - info.put("width", String.valueOf(width)); + int numeric = (int) data.getLong(); + if (numeric > 0) + { + string = String.valueOf(numeric); + } } - if (height > 0) + else { - info.put("height", String.valueOf(height)); + string = data.getString(); } - info.put("size", size); - return info; + + if (StringUtils.isNotEmpty(string)) + { + info.put(key, string); + } + } } Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/BaseVideoTypeHandler.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/BaseVideoTypeHandler.java 2010-02-07 15:48:22 UTC (rev 1850) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/BaseVideoTypeHandler.java 2010-02-07 18:57:21 UTC (rev 1851) @@ -19,17 +19,14 @@ package net.sourceforge.openutils.mgnlmedia.media.types.impl; -import info.magnolia.cms.beans.runtime.FileProperties; import info.magnolia.cms.core.Content; -import info.magnolia.cms.util.ContentUtil; import info.magnolia.cms.util.NodeDataUtil; -import java.util.LinkedHashMap; import java.util.Map; +import net.sourceforge.openutils.mgnlmedia.media.utils.MediaMetadataFormatUtils; import net.sourceforge.openutils.mgnlmedia.media.utils.FLVMedataUtils.FLVMetaData; -import org.apache.commons.lang.time.DurationFormatUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,8 +42,6 @@ */ private Logger log = LoggerFactory.getLogger(BaseVideoTypeHandler.class); - protected final String DURATION_ATTRIBUTE = "duration"; - protected abstract FLVMetaData parseFLVMetaData(Content media) throws Exception; @Override @@ -71,16 +66,14 @@ if (flvMetaData != null) { - // duh, we should be able to set properties on binary nodedata but at the moment there is no - // setAttribute(Long) in the interface! - Content originalAsNode = ContentUtil.getContent(media, BaseTypeHandler.ORGINAL_NODEDATA_NAME); - Content flvMetaDataNode = originalAsNode != null ? originalAsNode : media; - NodeDataUtil.getOrCreateAndSet(flvMetaDataNode, FileProperties.PROPERTY_WIDTH, flvMetaData.getWidth()); - NodeDataUtil - .getOrCreateAndSet(flvMetaDataNode, FileProperties.PROPERTY_HEIGHT, flvMetaData.getHeight()); - NodeDataUtil.getOrCreateAndSet(flvMetaDataNode, DURATION_ATTRIBUTE, flvMetaData.getDuration()); - flvMetaDataNode.save(); + NodeDataUtil.getOrCreateAndSet(media, METADATA_EXTENSION, "flv"); + NodeDataUtil.getOrCreateAndSet(media, METADATA_WIDTH, flvMetaData.getWidth()); + NodeDataUtil.getOrCreateAndSet(media, METADATA_HEIGHT, flvMetaData.getHeight()); + NodeDataUtil.getOrCreateAndSet(media, METADATA_DURATION, flvMetaData.getDuration()); + NodeDataUtil.getOrCreateAndSet(media, METADATA_FRAMERATE, flvMetaData.getFrameRate()); + + media.save(); } } catch (Exception e) @@ -97,61 +90,15 @@ public Map<String, String> getMediaInfo(Content media) { - Content originalAsNode = ContentUtil.getContent(media, BaseTypeHandler.ORGINAL_NODEDATA_NAME); - Content flvMetaDataNode = originalAsNode != null ? originalAsNode : media; + Map<String, String> info = super.getMediaInfo(media); - String ext = flvMetaDataNode.getNodeData(FileProperties.PROPERTY_EXTENSION).getString(); - long width = flvMetaDataNode.getNodeData(FileProperties.PROPERTY_WIDTH).getLong(); - long height = flvMetaDataNode.getNodeData(FileProperties.PROPERTY_HEIGHT).getLong(); - long duration = flvMetaDataNode.getNodeData(DURATION_ATTRIBUTE).getLong(); - long size = flvMetaDataNode.getNodeData(FileProperties.PROPERTY_SIZE).getLong(); - -// return ext -// + (width > 0 ? (" " + width + "x" + height) : "") -// + " length: " -// + DurationFormatUtils.formatDuration(duration * 1000, "m:ss ") -// + "size: " -// + toSizeString(size); - - Map<String, String> info = new LinkedHashMap<String, String>(); - info.put("extension", ext); - if (width > 0) + long duration = media.getNodeData(METADATA_DURATION).getLong(); + if (duration > 0) { - info.put("width", String.valueOf(width)); + info.put(METADATA_DURATION, MediaMetadataFormatUtils.formatDuration(duration)); } - if (height > 0) - { - info.put("height", String.valueOf(height)); - } - info.put("duration", DurationFormatUtils.formatDuration(duration * 1000, "m:ss ")); - info.put("size", toSizeString(size)); + return info; } - /* - * todo: move to an utility class - */ - private String toSizeString(long size) - { - String unit = "bytes"; - String sizeStr; - if (size >= 1000) - { - size = size / 1024; - unit = "KB"; - if (size >= 1000) - { - size = size / 1024; - unit = "MB"; - } - sizeStr = Double.toString(size); - sizeStr = sizeStr.substring(0, sizeStr.indexOf(".") + 2); //$NON-NLS-1$ - } - else - { - sizeStr = Double.toString(size); - sizeStr = sizeStr.substring(0, sizeStr.indexOf(".")); //$NON-NLS-1$ - } - return sizeStr + " " + unit; - } } Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/ImageTypeHandler.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/ImageTypeHandler.java 2010-02-07 15:48:22 UTC (rev 1850) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/ImageTypeHandler.java 2010-02-07 18:57:21 UTC (rev 1851) @@ -20,11 +20,9 @@ package net.sourceforge.openutils.mgnlmedia.media.types.impl; import info.magnolia.cms.core.Content; -import info.magnolia.cms.util.ContentUtil; import info.magnolia.cms.util.NodeDataUtil; import java.io.InputStream; -import java.util.Map; import net.sourceforge.openutils.mgnlmedia.media.configuration.MediaConfigurationManager; import net.sourceforge.openutils.mgnlmedia.media.utils.ImageUtils; @@ -43,13 +41,12 @@ */ public class ImageTypeHandler extends BaseTypeHandler { + /** * Logger. */ private Logger log = LoggerFactory.getLogger(ImageTypeHandler.class); - protected final String BIT_DEPTH_ATTRIBUTE = "bitDepth"; - /** * {@inheritDoc} */ @@ -85,40 +82,34 @@ public boolean onPostSave(Content media) { InputStream stream = null; - try { - ImageInfo ii = new ImageInfo(); + try + { stream = getOriginalFileNodeData(media).getStream(); + ImageInfo ii = new ImageInfo(); ii.setInput(stream); - if (ii.check()) { - Content originalAsNode = ContentUtil.getContent(media, BaseTypeHandler.ORGINAL_NODEDATA_NAME); - NodeDataUtil.getOrCreateAndSet(originalAsNode, BIT_DEPTH_ATTRIBUTE, ii.getBitsPerPixel()); - originalAsNode.save(); + if (ii.check()) + { + NodeDataUtil.getOrCreateAndSet(media, METADATA_BITDEPTH, ii.getBitsPerPixel()); + NodeDataUtil.getOrCreateAndSet(media, METADATA_WIDTH, ii.getWidth()); + NodeDataUtil.getOrCreateAndSet(media, METADATA_HEIGHT, ii.getHeight()); + media.save(); } } - catch (Throwable e) { + catch (Throwable e) + { log.warn("Error determining bit depth " - + getOriginalFileNodeData(media).getHandle() - + " " - + e.getClass().getName() - + " " - + e.getMessage(), e); + + getOriginalFileNodeData(media).getHandle() + + " " + + e.getClass().getName() + + " " + + e.getMessage(), e); } - finally { + finally + { IOUtils.closeQuietly(stream); } return super.onPostSave(media); } - @Override - public Map<String, String> getMediaInfo(Content media) - { - Map<String, String> info = super.getMediaInfo(media); - - Content originalAsNode = ContentUtil.getContent(media, BaseTypeHandler.ORGINAL_NODEDATA_NAME); - long bitDepth = originalAsNode.getNodeData(BIT_DEPTH_ATTRIBUTE).getLong(); - info.put("bitDepth", String.valueOf(bitDepth)); - - return info; - } } Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/MediaMetadataFormatUtils.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/MediaMetadataFormatUtils.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/MediaMetadataFormatUtils.java 2010-02-07 18:57:21 UTC (rev 1851) @@ -0,0 +1,73 @@ +/** + * + * Magnolia SimpleMedia Module (http://www.openmindlab.com/lab/products/media.html) + * Copyright (C)2008 - 2010, Openmind S.r.l. http://www.openmindonline.it + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.sourceforge.openutils.mgnlmedia.media.utils; + +import org.apache.commons.lang.time.DurationFormatUtils; + + +/** + * @author fgiust + * @version $Id$ + */ +public class MediaMetadataFormatUtils +{ + + /** + * Format a size + * @param size + * @return + */ + public static String formatSize(long size) + { + String unit = "bytes"; + String sizeStr; + if (size >= 1000) + { + size = size / 1024; + unit = "KB"; + if (size >= 1000) + { + size = size / 1024; + unit = "MB"; + } + sizeStr = Double.toString(size); + sizeStr = sizeStr.substring(0, sizeStr.indexOf(".") + 2); //$NON-NLS-1$ + } + else + { + sizeStr = Double.toString(size); + sizeStr = sizeStr.substring(0, sizeStr.indexOf(".")); //$NON-NLS-1$ + } + return sizeStr + " " + unit; + } + + public static String formatDuration(long duration) + { + if (duration > 0) + { + return DurationFormatUtils.formatDuration(duration * 1000, "m:ss "); + } + return null; + } + + public static String formatBitDepth(int bitDepth) + { + return String.valueOf(bitDepth); + } +} Property changes on: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/MediaMetadataFormatUtils.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_en.properties =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_en.properties 2010-02-07 15:48:22 UTC (rev 1850) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_en.properties 2010-02-07 18:57:21 UTC (rev 1851) @@ -86,9 +86,13 @@ media.move.error.selectnode=Select a node media.move.error.samenode=It is not allowed to move a node inside itself. -media.info.size=Size -media.info.bitDepth=Bit depth -media.info.duration=Duration +media.info.media_extension=Extension: {0} +media.info.media_size=Size: {0} +media.info.media_width=Width: {0}px +media.info.media_height=Height: {0}px +media.info.media_bitDepth=Bit depth: {0} +media.info.media_duration=Duration: {0} +media.info.media_framerate=Frame rate: {0} media.bgselector.white=White media.bgselector.transparent=Transparent Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_it.properties =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_it.properties 2010-02-07 15:48:22 UTC (rev 1850) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_it.properties 2010-02-07 18:57:21 UTC (rev 1851) @@ -87,10 +87,16 @@ media.move.error.selectnode=Seleziona un nodo media.move.error.samenode=Non \u00E8 possibile spostare all'interno dello stesso nodo. -media.info.size=Dimensione -media.info.bitDepth=Profondit\u00E0 di colore -media.info.duration=Durata +media.info.media_extension=Extension: {0} +media.info.media_size=Dimensione: {0} +media.info.media_width=Larghezza: {0}px +media.info.media_height=Altezza: {0}px +media.info.media_bitDepth=Profondit\u00E0 di colore: {0} +media.info.media_duration=Durata: {0} +media.info.media_framerate=Frame rate: {0} + + media.bgselector.white=Bianco media.bgselector.transparent=Trasparente media.bgselector.black=Nero Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html 2010-02-07 15:48:22 UTC (rev 1850) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html 2010-02-07 18:57:21 UTC (rev 1851) @@ -292,17 +292,16 @@ <img src="${this.request.contextPath}${thumbnailPath}" border="0" alt="" /> </a> <div class="details"> + <h4>${media.description!""}</h4> [#list media.mediaInfo?keys as key] - [#if key != 'extension' && key != 'width' && key != 'height'] - ${this.msgs.get("media.info.${key}")}: ${media.mediaInfo[key]}<br/> - [/#if] + ${this.getMessage("media.info.${key}", media.mediaInfo[key])}<br/> [/#list] </div> </div> </div> [#if media.mediaInfo??] <div class="mediainfo"> - ${media.mediaInfo['extension']} + ${media.mediaInfo['extension']!} [#if media.mediaInfo['width']?? && media.mediaInfo['height']??] ${media.mediaInfo['width']}x${media.mediaInfo['height']} [/#if] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |