|
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.
|