From: <die...@us...> - 2011-12-25 08:18:36
|
Revision: 3731 http://openutils.svn.sourceforge.net/openutils/?rev=3731&view=rev Author: diego_schivo Date: 2011-12-25 08:18:30 +0000 (Sun, 25 Dec 2011) Log Message: ----------- MEDIA-277 Lazy resolution creation Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/lifecycle/MediaModule.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tags/el/MediaEl.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/uri/MediaURI2RepositoryMapping.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/lifecycle/MediaModule.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/lifecycle/MediaModule.java 2011-12-19 10:17:54 UTC (rev 3730) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/lifecycle/MediaModule.java 2011-12-25 08:18:30 UTC (rev 3731) @@ -78,6 +78,8 @@ private List playlistLinks = new ArrayList(); + private boolean lazyResolutionCreation; + /** * Constructor */ @@ -291,4 +293,22 @@ { this.playlistLinks.add(playlistLink); } + + /** + * Returns the lazyResolutionCreation. + * @return the lazyResolutionCreation + */ + public boolean isLazyResolutionCreation() + { + return lazyResolutionCreation; + } + + /** + * Sets the lazyResolutionCreation. + * @param lazyResolutionCreation the lazyResolutionCreation to set + */ + public void setLazyResolutionCreation(boolean lazyResolutionCreation) + { + this.lazyResolutionCreation = lazyResolutionCreation; + } } Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tags/el/MediaEl.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tags/el/MediaEl.java 2011-12-19 10:17:54 UTC (rev 3730) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tags/el/MediaEl.java 2011-12-25 08:18:30 UTC (rev 3731) @@ -303,7 +303,7 @@ } } - if (!ImageUtils.checkOrCreateResolution(media, resolution, null)) + if (!ImageUtils.checkOrCreateResolution(media, resolution, null, module().isLazyResolutionCreation())) { return null; } Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/uri/MediaURI2RepositoryMapping.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/uri/MediaURI2RepositoryMapping.java 2011-12-19 10:17:54 UTC (rev 3730) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/uri/MediaURI2RepositoryMapping.java 2011-12-25 08:18:30 UTC (rev 3731) @@ -20,12 +20,17 @@ package net.sourceforge.openutils.mgnlmedia.media.uri; import info.magnolia.cms.beans.config.URI2RepositoryMapping; +import info.magnolia.cms.core.Content; +import info.magnolia.cms.core.NodeData; +import info.magnolia.cms.util.ContentUtil; import info.magnolia.context.MgnlContext; import info.magnolia.link.Link; import javax.jcr.RepositoryException; +import net.sourceforge.openutils.mgnlmedia.media.lifecycle.MediaModule; import net.sourceforge.openutils.mgnlmedia.media.tags.el.MediaEl; +import net.sourceforge.openutils.mgnlmedia.media.utils.ImageUtils; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; @@ -97,4 +102,39 @@ return handle; } + /** + * {@inheritDoc} + */ + @Override + public String getHandle(String uri) + { + String handle = super.getHandle(uri); + if (MediaEl.module().isLazyResolutionCreation()) + { + String resolutionsName = "resolutions"; + String search = "/" + resolutionsName + "/"; + int p = StringUtils.indexOf(handle, search); + if (p != -1) + { + String mediaPath = handle.substring(0, p); + Content mediaNode = ContentUtil.getContent(MediaModule.REPO, mediaPath); + if (mediaNode != null) + { + Content resolutionsNode = ContentUtil.getContent(mediaNode, resolutionsName); + String ndName = StringUtils.substringBefore(handle.substring(p + search.length()), "/"); + if (resolutionsNode != null && !StringUtils.isEmpty(ndName)) + { + NodeData nd = resolutionsNode.getNodeData(ndName); + String resolution = nd.getAttribute("resolutionNotYetCreated"); + if (!StringUtils.isEmpty(resolution)) + { + ImageUtils.checkOrCreateResolution(mediaNode, resolution, null); + } + } + } + } + } + return handle; + } + } Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java 2011-12-19 10:17:54 UTC (rev 3730) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java 2011-12-25 08:18:30 UTC (rev 3731) @@ -455,10 +455,10 @@ * @throws RepositoryException exception in jcr operations * @throws IOException exception converting image to jpg */ - public static void saveResolution(BufferedImage image, Content saveTo, String extension, float quality, + public static NodeData saveResolution(BufferedImage image, Content saveTo, String extension, float quality, boolean forceProgressive) throws RepositoryException, IOException { - saveResolution(image, saveTo, null, extension, quality, forceProgressive); + return saveResolution(image, saveTo, null, extension, quality, forceProgressive); } /** @@ -472,7 +472,7 @@ * @throws RepositoryException exception in jcr operations * @throws IOException exception converting image to jpg */ - public static void saveResolution(BufferedImage image, Content saveTo, String name, String extension, + public static NodeData saveResolution(BufferedImage image, Content saveTo, String name, String extension, float quality, boolean forceProgressive) throws RepositoryException, IOException { @@ -564,6 +564,8 @@ nd.setAttribute(FileProperties.PROPERTY_SIZE, "" + count); resolutions.save(); + + return nd; } finally { @@ -746,7 +748,13 @@ public static boolean checkOrCreateResolution(final Content media, final String resolutionTarget, String nodeDataName) { + return checkOrCreateResolution(media, resolutionTarget, nodeDataName, false); + } + public static boolean checkOrCreateResolution(final Content media, final String resolutionTarget, + String nodeDataName, final boolean lazy) + { + Content resolutions = getResolutionsNode(media); String resolution = resolutionTarget; @@ -759,7 +767,19 @@ { if (resolutions != null && resolutions.hasNodeData(getResolutionPath(resolution))) { - return true; + if (lazy) + { + return true; + } + else if (!StringUtils.isEmpty(resolutions.getNodeData(getResolutionPath(resolution)).getAttribute( + "resolutionNotYetCreated"))) + { + // continue: replace the fake image with the actual one + } + else + { + return true; + } } } catch (RepositoryException e1) @@ -862,7 +882,14 @@ BufferedImage img; try { - img = ImageUtils.getImageForResolution(original, resolutionstring, params); + if (lazy) + { + img = new BufferedImage(1, 1, getType(original.getColorModel())); + } + else + { + img = ImageUtils.getImageForResolution(original, resolutionstring, params); + } } catch (IllegalArgumentException e) { @@ -893,13 +920,20 @@ forceProgressive = true; } - ImageUtils.saveResolution( + NodeData nd = ImageUtils.saveResolution( img, node, resolutioNodeName, outputextension, quality, forceProgressive); + if (lazy) + { + nd.setAttribute( + "resolutionNotYetCreated", + StringUtils.removeStart(resolutioNodeName, "res-")); + nd.getParent().save(); + } } catch (RepositoryException e) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |