From: <mol...@us...> - 2009-09-04 16:15:34
|
Revision: 1361 http://openutils.svn.sourceforge.net/openutils/?rev=1361&view=rev Author: molaschi Date: 2009-09-04 16:15:19 +0000 (Fri, 04 Sep 2009) Log Message: ----------- Deep refactor of simplemedia module: - refactoring media types for better OO design - add OO architecture for resolution handling - add OO architecture for image post processing - rename all nodedata properties in which was stored the base media to from "image","video","audio" to "original" - added a new DialogFileNoPreview which doesn't show media preview but shows media download, shows a list of accepted file extensions and validates the file extension to be in this list - removed mgnl-messages - fix tests Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaConfigurationManager.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogFileAudio.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/LayerDialogMVC.java 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/save/MediaCustomSaveHandler.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/MediaModuleVersionHandler.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/types/MediaTypeHandler.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/AudioTypeHandler.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/ImageTypeHandler.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/VideoTypeHandler.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/YouTubeVideoTypeHandler.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.mediaAudioDlg.xml trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.mediaImageDlg.xml trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.mediaVideoDlg.xml trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.mediaYoutubeDlg.xml trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.mediatypes.audio.xml trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.mediatypes.image.xml trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.mediatypes.video.xml trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.mediatypes.youtube.xml 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/test/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtilsTest.java Added Paths: ----------- trunk/openutils-mgnlmedia/src/main/java/META-INF/ trunk/openutils-mgnlmedia/src/main/java/META-INF/MANIFEST.MF trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/ImageProcessorsManager.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogFileNoPreview.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/BaseImageResolutionProcessor.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/FitInAndFillWithBandsImageResolutionProcessor.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/FitInImageResolutionProcessor.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ImagePostProcessor.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ImageResolutionProcessor.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/LogSizePostProcessor.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ResizeCropCenteredImageResolutionProcessor.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ResizeNoCropImageResolutionProcessor.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/MediaWithPreviewImageTypeHandler.java trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.controls.mediaFile.xml trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.processors.image-post.logsize.xml trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.processors.image-resolution.b.xml trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.processors.image-resolution.default.xml trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.processors.image-resolution.l.xml trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.processors.image-resolution.x.xml trunk/openutils-mgnlmedia/src/test/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageProcessorsManagerMock.java Removed Paths: ------------- trunk/openutils-mgnlmedia/src/main/resources/mgnl-messages/ Added: trunk/openutils-mgnlmedia/src/main/java/META-INF/MANIFEST.MF =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/META-INF/MANIFEST.MF (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/META-INF/MANIFEST.MF 2009-09-04 16:15:19 UTC (rev 1361) @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/ImageProcessorsManager.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/ImageProcessorsManager.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/ImageProcessorsManager.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -0,0 +1,176 @@ +package net.sourceforge.openutils.mgnlmedia.media.configuration; + +import info.magnolia.cms.beans.config.ObservedManager; +import info.magnolia.cms.core.Content; +import info.magnolia.cms.util.ContentUtil; +import info.magnolia.cms.util.FactoryUtil; +import info.magnolia.cms.util.NodeDataUtil; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import javax.jcr.RepositoryException; + +import net.sourceforge.openutils.mgnlmedia.media.processors.ImagePostProcessor; +import net.sourceforge.openutils.mgnlmedia.media.processors.ImageResolutionProcessor; + +import org.apache.commons.lang.StringUtils; + + +/** + * @author molaschi + * @version $Id: $ + */ +public class ImageProcessorsManager extends ObservedManager +{ + + private static final String IMAGE_RESOLUTION_PROCESSORS_NAME = "image-resolution"; + + private static final String IMAGE_POST_PROCESSORS_NAME = "image-post"; + + private Map<String, ImageResolutionProcessor> imageResProcs = new HashMap<String, ImageResolutionProcessor>(); + + private Map<String, ImagePostProcessor> imagePostProcs = new HashMap<String, ImagePostProcessor>(); + + public static ImageProcessorsManager getInstance() + { + return (ImageProcessorsManager) FactoryUtil.getSingleton(ImageProcessorsManager.class); + } + + /** + * {@inheritDoc} + */ + @Override + protected void onClear() + { + imageResProcs.clear(); + imagePostProcs.clear(); + } + + /** + * {@inheritDoc} + */ + @Override + protected void onRegister(Content parentNode) + { + for (Iterator iter = ContentUtil.getAllChildren(parentNode).iterator(); iter.hasNext();) + { + Content processorsNode = (Content) iter.next(); + + for (Iterator iterProcessor = ContentUtil.getAllChildren(processorsNode).iterator(); iterProcessor + .hasNext();) + { + Content node = (Content) iterProcessor.next(); + + try + { + + if (IMAGE_POST_PROCESSORS_NAME.equals(processorsNode.getName())) + { + String classNameHandler = NodeDataUtil.getString(node, "class"); + Class classHandler = Class.forName(classNameHandler); + if (!ImagePostProcessor.class.isAssignableFrom(classHandler)) + { + log.error( + "Error getting post processor for {}: class {} not implements ImagePostProcessor", + node.getHandle(), + classHandler); + continue; + } + + ImagePostProcessor imagePostProcessor = (ImagePostProcessor) classHandler.newInstance(); + imagePostProcs.put(node.getName(), imagePostProcessor); + } + + if (IMAGE_RESOLUTION_PROCESSORS_NAME.equals(processorsNode.getName())) + { + String controlChar = node.getName(); + + String classNameHandler = NodeDataUtil.getString(node, "class"); + Class classHandler = Class.forName(classNameHandler); + if (!ImageResolutionProcessor.class.isAssignableFrom(classHandler)) + { + log + .error( + "Error getting resolution processor for {}: class {} not implements ImageResolutionProcessor", + node.getHandle(), + classHandler); + continue; + } + + ImageResolutionProcessor imageResolutionProcessor = (ImageResolutionProcessor) classHandler + .newInstance(); + if (!controlChar.equals("default")) + { + controlChar = controlChar.substring(0, 1); + } + imageResProcs.put(controlChar, imageResolutionProcessor); + try + { + if (node.hasNodeData("aliases")) + { + String[] aliases = StringUtils.split(NodeDataUtil.getString(node, "aliases"), ","); + for (String alias : aliases) + { + imageResProcs.put(alias, imageResolutionProcessor); + } + } + } + catch (RepositoryException ex) + { + // go on + } + } + } + catch (InstantiationException ex) + { + log.error("Error getting media type configuration for {}", node.getHandle(), ex); + } + catch (IllegalAccessException ex) + { + log.error("Error getting media type configuration for {}", node.getHandle(), ex); + } + catch (ClassNotFoundException ex) + { + log.error("Error getting media type configuration for {}", node.getHandle(), ex); + } + catch (RuntimeException ex) + { + log.error("Error getting media type configuration for {}", node.getHandle(), ex); + } + } + } + } + + public ImageResolutionProcessor getImageResolutionProcessor(char controlChar) + { + return imageResProcs.get(String.valueOf(controlChar)); + } + + public boolean isValidControlChar(char controlChar) + { + return imageResProcs.keySet().contains(String.valueOf(controlChar)); + } + + public ImageResolutionProcessor getDefaultImageResolutionProcessor() + { + return imageResProcs.get("default"); + } + + public ImagePostProcessor getImagePostProcessor(String name) + { + return imagePostProcs.get(name); + } + + public Collection<ImagePostProcessor> getImagePostProcessorsList() + { + return imagePostProcs.values(); + } + + public Map<String, ImagePostProcessor> getImagePostProcessorsMap() + { + return imagePostProcs; + } +} Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaConfigurationManager.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaConfigurationManager.java 2009-09-04 14:44:47 UTC (rev 1360) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaConfigurationManager.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -48,6 +48,7 @@ import net.sourceforge.openutils.mgnlmedia.media.lifecycle.MediaModule; import net.sourceforge.openutils.mgnlmedia.media.pages.MediaFolderViewPage; +import net.sourceforge.openutils.mgnlmedia.media.processors.ImageResolutionProcessor; import net.sourceforge.openutils.mgnlmedia.media.types.MediaTypeHandler; import org.apache.commons.collections.CollectionUtils; Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogFileAudio.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogFileAudio.java 2009-09-04 14:44:47 UTC (rev 1360) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogFileAudio.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -28,6 +28,8 @@ import javax.jcr.PropertyType; +import org.apache.commons.lang.StringUtils; + import net.sourceforge.openutils.mgnlmedia.media.configuration.MediaConfigurationManager; @@ -45,7 +47,11 @@ @Override public void initImageExtensions() { - this.getImageExtensions().add("mp3"); + String extensions = this.getConfigValue("extensions"); + for (String extension : StringUtils.split(extensions, ",")) + { + this.getImageExtensions().add(extension); + } } /** Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogFileNoPreview.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogFileNoPreview.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogFileNoPreview.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -0,0 +1,122 @@ +package net.sourceforge.openutils.mgnlmedia.media.dialog; + +import info.magnolia.cms.beans.runtime.Document; +import info.magnolia.cms.beans.runtime.MultipartForm; +import info.magnolia.cms.gui.dialog.DialogFile; +import info.magnolia.cms.gui.misc.Spacer; +import info.magnolia.cms.i18n.Messages; +import info.magnolia.cms.i18n.MessagesManager; +import info.magnolia.cms.i18n.MessagesUtil; + +import java.io.IOException; +import java.io.Writer; + +import org.apache.commons.lang.StringUtils; + + +/** + * @author molaschi + * @version $Id: $ + */ +public class DialogFileNoPreview extends DialogFile +{ + + private final String i18nBasename = "net.sourceforge.openutils.mgnlmedia.media.lang.messages"; + + private Messages messages; + + /** + * {@inheritDoc} + */ + @Override + public void drawHtml(Writer out) throws IOException + { + this.getImageExtensions().clear(); + this.setConfig("preview", false); + super.drawHtml(out); + } + + /** + * {@inheritDoc} + */ + @Override + public void drawHtmlPre(Writer out) throws IOException + { + super.drawHtmlPre(out); + String extensions = this.getConfigValue("extensions"); + if (StringUtils.isNotBlank(extensions)) + { + StringBuffer sb = new StringBuffer(); + sb + .append("<span class=\"mgnlDialogDescription\">") + .append(getMessage("dialog.filenopreview.extensions")) + .append(" ") + .append(extensions) + .append("</span>") + .append(Spacer.getHtml(0, 0)); + out.write(sb.toString()); + } + } + + /** + * {@inheritDoc} + */ + @Override + public boolean validate() + { + boolean valid = super.validate(); + if (valid) + { + MultipartForm form = (MultipartForm) getRequest().getAttribute(MultipartForm.REQUEST_ATTRIBUTE_NAME); + if (form != null) + { + Document doc = form.getDocument(getName()); + String extensions = this.getConfigValue("extensions"); + if (StringUtils.isNotBlank(extensions)) + { + String[] allowedExtensions = StringUtils.split(extensions, ','); + for (String allowedExtension : allowedExtensions) + { + if (StringUtils.trimToEmpty(allowedExtension).equals(doc.getExtension())) + { + return true; + } + + } + + setValidationMessage(getMessage("dialog.filenopreview.error.extension")); + return false; + } + // String extensions = doc.getExtension(); + } + } + return valid; + } + + @Override + protected Messages getMessages() + { + if (messages == null) + { + // if this is the root + if (this.getParent() == null) + { + messages = MessagesManager.getMessages(); + } + else + { + // try to get it from the control nearest to the root + messages = super.getMessages(); + } + // if this control defines a bundle (basename in the terms of jstl) + String basename = this.getConfigValue("i18nBasename", i18nBasename); + if (StringUtils.isNotEmpty(basename)) + { + // extend the chain with this bundle + messages = MessagesUtil.chain(basename, messages); + } + } + return messages; + } + +} Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/LayerDialogMVC.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/LayerDialogMVC.java 2009-09-04 14:44:47 UTC (rev 1360) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/LayerDialogMVC.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -155,8 +155,7 @@ @Override protected boolean onPreSave(SaveHandler control) { - // TODO non mi piace molto... - String type = form.getParameter("type"); + String type = this.request.getParameter("type"); if (control.getNodeName().equals("mgnlNew")) { @@ -176,7 +175,7 @@ .getTypes() .get(type) .getHandler() - .getNewNodeName(form)))); + .getNewNodeName(form, request)))); } return super.onPreSave(control); 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 2009-09-04 14:44:47 UTC (rev 1360) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/lifecycle/MediaModule.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -19,6 +19,7 @@ import info.magnolia.module.ModuleLifecycle; import info.magnolia.module.ModuleLifecycleContext; +import net.sourceforge.openutils.mgnlmedia.media.configuration.ImageProcessorsManager; import net.sourceforge.openutils.mgnlmedia.media.configuration.MediaConfigurationManager; import org.slf4j.Logger; @@ -59,6 +60,7 @@ { log.info("Starting module media"); ctx.registerModuleObservingComponent("mediatypes", MediaConfigurationManager.getInstance()); + ctx.registerModuleObservingComponent("processors", ImageProcessorsManager.getInstance()); } /** Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/BaseImageResolutionProcessor.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/BaseImageResolutionProcessor.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/BaseImageResolutionProcessor.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -0,0 +1,109 @@ +package net.sourceforge.openutils.mgnlmedia.media.processors; + +import java.awt.Color; +import java.awt.image.BufferedImage; + +import net.sourceforge.openutils.mgnlmedia.media.utils.ImageUtils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * @author molaschi + * @version $Id: $ + */ +public abstract class BaseImageResolutionProcessor implements ImageResolutionProcessor +{ + + /** + * Logger. + */ + private Logger log = LoggerFactory.getLogger(BaseImageResolutionProcessor.class); + + /** + * Resize an image to fit into x,y not changing x/y + * @param original original image + * @param x max width + * @param y max height + * @return resized image + */ + public BufferedImage fitIn(BufferedImage original, int x, int y) + { + return resizeInOut(original, x, y, false, null); + } + + public BufferedImage resizeNoCrop(BufferedImage original, int x, int y) + { + return resizeInOut(original, x, y, true, null); + } + + public BufferedImage resizeNoCrop(BufferedImage original, int x, int y, Color background) + { + return resizeInOut(original, x, y, true, background); + } + + protected BufferedImage resizeInOut(BufferedImage original, int x, int y, boolean external, Color background) + { + if (original == null) + { + throw new IllegalArgumentException("input image is null"); + } + + float oX = original.getWidth(); + float oY = original.getHeight(); + + if (oX < 1 || oY < 1) + { + throw new IllegalArgumentException("Broken input image (width=" + oX + ",height=" + oY + ")"); + } + + double xRatio = (double) x / oX; + double yRatio = (double) y / oY; + + if (xRatio * yRatio == 1) + { + log.debug("Nothing to resize, return original"); + return original; + } + + double ratio = Math.min(xRatio, yRatio); + int newX = (int) Math.round(oX * ratio); + int newY = (int) Math.round(oY * ratio); + + return ImageUtils.resizeImage(original, newX, newY, external ? x : newX, external ? y : newY, background); + } + + /** + * Resize an image to fill x or y and (if set) center and crop what is out + * @param original original image + * @param x min width + * @param y min height + * @param cropCentered crop image + * @return resized image + */ + public BufferedImage fill(BufferedImage original, int x, int y, boolean cropCentered) + { + float oX = original.getWidth(); + float oY = original.getHeight(); + float oDelta = oX / oY; + float delta = ((float) x) / ((float) y); + + if (oDelta > delta) + { + int newX = (int) (y * oX / oY); + BufferedImage filled = ImageUtils.resizeImage(original, newX, y); + return cropCentered ? ImageUtils.cropImage(filled, (newX - x) / 2, 0, x, y) : filled; + } + else if (oDelta < delta) + { + int newY = (int) (x * oY / oX); + BufferedImage filled = ImageUtils.resizeImage(original, x, newY); + return cropCentered ? ImageUtils.cropImage(filled, 0, (newY - y) / 2, x, y) : filled; + } + else + { + return original; + } + } +} Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/FitInAndFillWithBandsImageResolutionProcessor.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/FitInAndFillWithBandsImageResolutionProcessor.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/FitInAndFillWithBandsImageResolutionProcessor.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -0,0 +1,46 @@ +package net.sourceforge.openutils.mgnlmedia.media.processors; + +import java.awt.Color; +import java.awt.image.BufferedImage; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * @author molaschi + * @version $Id: $ + */ +public class FitInAndFillWithBandsImageResolutionProcessor extends BaseImageResolutionProcessor +{ + + /** + * Logger. + */ + private Logger log = LoggerFactory.getLogger(FitInAndFillWithBandsImageResolutionProcessor.class); + + /** + * {@inheritDoc} + */ + public BufferedImage getImageForResolution(BufferedImage original, int x, int y, Map<String, String> parameters) + { + Color color = Color.WHITE; + String hexColor = parameters.get("background"); + + if (StringUtils.isNotBlank(hexColor)) + { + try + { + hexColor = "0x" + (hexColor.startsWith("#") ? hexColor.substring(1) : hexColor); + color = Color.decode(hexColor); + } + catch (NumberFormatException e) + { + log.error("Invalid color code: " + hexColor, e); + } + } + return resizeInOut(original, x, y, false, color); + } +} Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/FitInImageResolutionProcessor.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/FitInImageResolutionProcessor.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/FitInImageResolutionProcessor.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -0,0 +1,22 @@ +package net.sourceforge.openutils.mgnlmedia.media.processors; + +import java.awt.image.BufferedImage; +import java.util.Map; + + +/** + * @author molaschi + * @version $Id: $ + */ +public class FitInImageResolutionProcessor extends BaseImageResolutionProcessor +{ + + /** + * {@inheritDoc} + */ + public BufferedImage getImageForResolution(BufferedImage original, int x, int y, Map<String, String> parameters) + { + return resizeInOut(original, x, y, false, null); + } + +} Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ImagePostProcessor.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ImagePostProcessor.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ImagePostProcessor.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -0,0 +1,15 @@ +package net.sourceforge.openutils.mgnlmedia.media.processors; + +import java.awt.image.BufferedImage; +import java.util.Map; + + +/** + * @author molaschi + * @version $Id: $ + */ +public interface ImagePostProcessor +{ + + BufferedImage processImage(BufferedImage image, int x, int y, Map<String, String> parameters); +} Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ImageResolutionProcessor.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ImageResolutionProcessor.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ImageResolutionProcessor.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -0,0 +1,16 @@ +package net.sourceforge.openutils.mgnlmedia.media.processors; + +import java.awt.image.BufferedImage; +import java.util.Map; + + +/** + * @author molaschi + * @version $Id: $ + */ +public interface ImageResolutionProcessor +{ + + BufferedImage getImageForResolution(BufferedImage original, int x, int y, Map<String, String> parameters); + +} Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/LogSizePostProcessor.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/LogSizePostProcessor.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/LogSizePostProcessor.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -0,0 +1,38 @@ +package net.sourceforge.openutils.mgnlmedia.media.processors; + +import java.awt.image.BufferedImage; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * @author molaschi + * @version $Id: $ + */ +public class LogSizePostProcessor implements ImagePostProcessor +{ + + /** + * Logger. + */ + private Logger log = LoggerFactory.getLogger(LogSizePostProcessor.class); + + /** + * {@inheritDoc} + */ + public BufferedImage processImage(BufferedImage image, int x, int y, Map<String, String> parameters) + { + if (parameters.containsKey("logsize")) + { + log.info("Image size [{},{}] - Required size [{},{}]", new Object[]{ + image.getWidth(), + image.getHeight(), + x, + y }); + } + return image; + } + +} Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ResizeCropCenteredImageResolutionProcessor.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ResizeCropCenteredImageResolutionProcessor.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ResizeCropCenteredImageResolutionProcessor.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -0,0 +1,22 @@ +package net.sourceforge.openutils.mgnlmedia.media.processors; + +import java.awt.image.BufferedImage; +import java.util.Map; + + +/** + * @author molaschi + * @version $Id: $ + */ +public class ResizeCropCenteredImageResolutionProcessor extends BaseImageResolutionProcessor +{ + + /** + * {@inheritDoc} + */ + public BufferedImage getImageForResolution(BufferedImage original, int x, int y, Map<String, String> parameters) + { + return fill(original, x, y, true); + } + +} Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ResizeNoCropImageResolutionProcessor.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ResizeNoCropImageResolutionProcessor.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/processors/ResizeNoCropImageResolutionProcessor.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -0,0 +1,22 @@ +package net.sourceforge.openutils.mgnlmedia.media.processors; + +import java.awt.image.BufferedImage; +import java.util.Map; + + +/** + * @author molaschi + * @version $Id: $ + */ +public class ResizeNoCropImageResolutionProcessor extends BaseImageResolutionProcessor +{ + + /** + * {@inheritDoc} + */ + public BufferedImage getImageForResolution(BufferedImage original, int x, int y, Map<String, String> parameters) + { + return fill(original, x, y, false); + } + +} Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/save/MediaCustomSaveHandler.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/save/MediaCustomSaveHandler.java 2009-09-04 14:44:47 UTC (rev 1360) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/save/MediaCustomSaveHandler.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -26,6 +26,7 @@ import javax.jcr.ItemNotFoundException; import javax.jcr.RepositoryException; +import javax.servlet.http.HttpServletRequest; import net.sourceforge.openutils.mgnlmedia.media.configuration.MediaConfigurationManager; import net.sourceforge.openutils.mgnlmedia.media.configuration.MediaTypeConfiguration; @@ -54,9 +55,9 @@ public void save(Content parentNode, Content configNode, String name, MultipartForm form, int type, int valueType, int isRichEditValue, int encoding) throws RepositoryException, AccessDeniedException { + HttpServletRequest request = MgnlContext.getWebContext().getRequest(); + String value = request.getParameter(name); - String value = form.getParameter(name); - if (value == null || StringUtils.EMPTY.equals(value)) { if (parentNode.hasNodeData(name)) @@ -80,6 +81,7 @@ parentNode, configNode, name, + request, form, type, valueType, Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/MediaModuleVersionHandler.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/MediaModuleVersionHandler.java 2009-09-04 14:44:47 UTC (rev 1360) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/MediaModuleVersionHandler.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -17,15 +17,37 @@ */ package net.sourceforge.openutils.mgnlmedia.media.setup; +import info.magnolia.cms.core.Content; +import info.magnolia.cms.core.NodeData; +import info.magnolia.cms.core.SystemProperty; +import info.magnolia.cms.core.search.Query; +import info.magnolia.cms.core.search.QueryManager; +import info.magnolia.cms.core.search.QueryResult; import info.magnolia.module.InstallContext; +import info.magnolia.module.delta.Delta; +import info.magnolia.module.delta.DeltaBuilder; import info.magnolia.module.delta.Task; +import info.magnolia.module.delta.TaskExecutionException; +import info.magnolia.module.model.Version; import it.openutils.mgnltasks.NodeSortTask; import it.openutils.mgnltasks.SimpleModuleVersionHandler; import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import javax.jcr.RepositoryException; +import javax.jcr.nodetype.ConstraintViolationException; +import net.sourceforge.openutils.mgnlmedia.media.configuration.MediaConfigurationManager; +import net.sourceforge.openutils.mgnlmedia.media.lifecycle.MediaModule; +import net.sourceforge.openutils.mgnlmedia.media.types.impl.BaseTypeHandler; + +import org.apache.commons.lang.ObjectUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + /** * @author manuel * @version $Id @@ -36,6 +58,7 @@ /** * {@inheritDoc} */ + @SuppressWarnings("unchecked") @Override protected List getStartupTasks(InstallContext installContext) { @@ -43,6 +66,72 @@ tasks.add(new NodeSortTask("config", "/modules/media/mediatypes", "order")); + tasks.add(new Task() + { + + /** + * Logger. + */ + private Logger log = LoggerFactory.getLogger(this.getClass()); + + public String getName() + { + return "file store nodedata name updater"; + } + + public String getDescription() + { + return "update custom nodedata names (where original files are stored) to \"original\""; + } + + public void execute(InstallContext installContext) throws TaskExecutionException + { + QueryManager mgr = installContext.getHierarchyManager(MediaModule.REPO).getQueryManager(); + try + { + reset(mgr, "image", "image"); + reset(mgr, "video", "video"); + reset(mgr, "audio", "audio"); + } + catch (RepositoryException ex) + { + log.error(ex.getMessage(), ex); + } + } + + private void reset(QueryManager queryManager, String type, String nodedataOldName) + throws RepositoryException + { + Query query = queryManager.createQuery( + "//*[" + nodedataOldName + " and type='" + type + "']", + Query.XPATH); + QueryResult queryResult = query.execute(); + Collection<Content> medias = queryResult.getContent(MediaConfigurationManager.MEDIA.getSystemName()); + for (Content media : medias) + { + NodeData nd = media.getNodeData(nodedataOldName); + if (nd.getValue() != null) + { + NodeData ndNew = media.createNodeData(BaseTypeHandler.ORGINAL_NODEDATA_NAME, nd.getValue()); + for (String attributeName : ((List<String>) nd.getAttributeNames())) + { + try + { + ndNew.setAttribute(attributeName, nd.getAttribute(attributeName)); + } + catch (ConstraintViolationException ex) + { + // go on + } + } + nd.delete(); + } + // media.deleteNodeData(nd.getName()); + media.save(); + } + } + }); + return tasks; } 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 2009-09-04 14:44:47 UTC (rev 1360) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tags/el/MediaEl.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -303,7 +303,7 @@ try { - String resString = "res-" + URLEncoder.encode(resolution, "utf-8"); + String resString = "res-" + ImageUtils.getResolutionPath(resolution); if (resolutions != null && resolutions.hasNodeData(resString)) { String resPath = new FileProperties(resolutions, resString).getProperty(FileProperties.PATH); @@ -316,10 +316,6 @@ { log.debug(e.getMessage(), e); } - catch (UnsupportedEncodingException e) - { - log.debug(e.getMessage(), e); - } return null; } @@ -331,40 +327,43 @@ */ public static int[] getSize(Content media, String resolution) { - NodeData res = null; - if ("original".equals(resolution)) + if (media != null) { - res = media.getNodeData("original"); - } - else - { - Content resolutions = media.getChildByName("resolutions"); - try + + NodeData res = null; + if ("original".equals(resolution)) { - if (resolutions.hasNodeData("res-" + resolution)) + res = media.getNodeData("original"); + } + else + { + Content resolutions = media.getChildByName("resolutions"); + try { - res = resolutions.getNodeData("res-" + resolution); + if (resolutions.hasNodeData("res-" + resolution)) + { + res = resolutions.getNodeData("res-" + resolution); + } + else + { + res = null; + } } - else + catch (RepositoryException e) { res = null; } } - catch (RepositoryException e) + + if (res != null) { - res = null; + return new int[]{ + NumberUtils.toInt(res.getAttribute(FileProperties.PROPERTY_WIDTH)), + NumberUtils.toInt(res.getAttribute(FileProperties.PROPERTY_HEIGHT)) }; } } - if (res != null) - { - return new int[]{ - NumberUtils.toInt(res.getAttribute(FileProperties.PROPERTY_WIDTH)), - NumberUtils.toInt(res.getAttribute(FileProperties.PROPERTY_HEIGHT)) }; - } - return new int[]{-1, -1 }; - } /** 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 2009-09-04 14:44:47 UTC (rev 1360) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/MediaTypeHandler.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -27,6 +27,7 @@ import java.util.Map; import javax.jcr.RepositoryException; +import javax.servlet.http.HttpServletRequest; /** @@ -134,9 +135,10 @@ /** * Get the name for a new node * @param form multipart form + * @param request current request * @return new name */ - String getNewNodeName(MultipartForm form); + String getNewNodeName(MultipartForm form, HttpServletRequest request); /** * Called when a media is going to be associated with a node @@ -144,6 +146,7 @@ * @param parentNode node to be associated * @param configNode configuration node * @param name property name + * @param request current request * @param form request form * @param type typee * @param valueType value type @@ -154,8 +157,8 @@ * @exception AccessDeniedException access denied exception */ boolean onSavingPropertyMedia(Content media, Content parentNode, Content configNode, String name, - MultipartForm form, int type, int valueType, int isRichEditValue, int encoding) throws RepositoryException, - AccessDeniedException; + HttpServletRequest request, MultipartForm form, int type, int valueType, int isRichEditValue, int encoding) + throws RepositoryException, AccessDeniedException; /** * save a media file to a newly created media content Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/AudioTypeHandler.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/AudioTypeHandler.java 2009-09-04 14:44:47 UTC (rev 1360) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/AudioTypeHandler.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -17,23 +17,9 @@ */ package net.sourceforge.openutils.mgnlmedia.media.types.impl; -import info.magnolia.cms.beans.runtime.Document; -import info.magnolia.cms.beans.runtime.FileProperties; -import info.magnolia.cms.beans.runtime.MultipartForm; import info.magnolia.cms.core.Content; -import info.magnolia.cms.core.NodeData; -import info.magnolia.cms.security.AccessDeniedException; -import info.magnolia.cms.util.NodeDataUtil; -import info.magnolia.module.admininterface.SaveHandlerImpl; -import java.io.File; -import java.util.Map; -import javax.jcr.RepositoryException; - -import net.sourceforge.openutils.mgnlmedia.media.configuration.MediaConfigurationManager; - - /** * @author molaschi * @version $Id$ @@ -44,115 +30,9 @@ /** * {@inheritDoc} */ - public void init(Content typeDefinitionNode) - { - - } - - /** - * {@inheritDoc} - */ - public String getUrl(Content media) - { - NodeData file = media.getNodeData("audio"); - String fileName = file.getAttribute(FileProperties.PROPERTY_FILENAME) - + "." - + file.getAttribute(FileProperties.EXTENSION); - - return MediaConfigurationManager.getInstance().getURIMappingPrefix() + media.getHandle() + "/audio/" + fileName; - } - - /** - * {@inheritDoc} - */ - public String getUrl(Content media, Map<String, String> options) - { - return getUrl(media); - } - - /** - * {@inheritDoc} - */ - public String getFilename(Content media) - { - NodeData file = media.getNodeData("audio"); - return file.getAttribute(FileProperties.PROPERTY_FILENAME); - } - - /** - * {@inheritDoc} - */ - public String getExtension(Content media) - { - NodeData file = media.getNodeData("audio"); - return file.getAttribute(FileProperties.PROPERTY_EXTENSION); - } - - /** - * {@inheritDoc} - */ - public String getFullFilename(Content media) - { - return getFilename(media) + "." + getExtension(media); - } - - /** - * {@inheritDoc} - */ public String getThumbnailUrl(Content media) { return "/.resources/media/icons/audioThumb.jpg"; } - /** - * {@inheritDoc} - */ - public String getPreviewUrl(Content media) - { - return getUrl(media); - } - - /** - * {@inheritDoc} - */ - @Override - public boolean onPostSave(Content media) - { - return super.onPostSave(media); - } - - public void saveFromZipFile(Content media, File f, String cleanFileName, String extension) - throws AccessDeniedException, RepositoryException - { - Document doc = new Document(f, "audio/" + extension); - doc.setExtention(extension); - SaveHandlerImpl.saveDocument(media, doc, "audio", cleanFileName, cleanFileName - + "_" - + FileProperties.PROPERTY_TEMPLATE); - this.onPostSave(media); - } - - /** - * {@inheritDoc} - */ - public String getNewNodeName(MultipartForm form) - { - return form.getParameter("audio_" + FileProperties.PROPERTY_FILENAME); - } - - /** - * {@inheritDoc} - */ - public boolean onSavingPropertyMedia(Content media, Content parentNode, Content configNode, String name, - MultipartForm form, int type, int valueType, int isRichEditValue, int encoding) throws RepositoryException, - AccessDeniedException - { - String value = form.getParameter(name); - - NodeData nd = NodeDataUtil.getOrCreate(parentNode, name); - nd.setValue(value); - - return true; - } - } 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 2009-09-04 14:44:47 UTC (rev 1360) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/BaseTypeHandler.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -17,19 +17,29 @@ */ package net.sourceforge.openutils.mgnlmedia.media.types.impl; +import info.magnolia.cms.beans.runtime.Document; +import info.magnolia.cms.beans.runtime.FileProperties; +import info.magnolia.cms.beans.runtime.MultipartForm; import info.magnolia.cms.core.Content; import info.magnolia.cms.core.NodeData; +import info.magnolia.cms.security.AccessDeniedException; import info.magnolia.cms.util.NodeDataUtil; import info.magnolia.context.MgnlContext; +import info.magnolia.module.admininterface.SaveHandlerImpl; +import java.io.File; import java.util.Collection; import java.util.Locale; +import java.util.Map; import javax.jcr.RepositoryException; +import javax.servlet.http.HttpServletRequest; +import net.sourceforge.openutils.mgnlmedia.media.configuration.MediaConfigurationManager; import net.sourceforge.openutils.mgnlmedia.media.lifecycle.MediaModule; import net.sourceforge.openutils.mgnlmedia.media.types.MediaTypeHandler; +import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,11 +51,164 @@ public abstract class BaseTypeHandler implements MediaTypeHandler { + public static final String ORGINAL_NODEDATA_NAME = "original"; + /** * Logger. */ private Logger log = LoggerFactory.getLogger(BaseTypeHandler.class); + private String type = null; + + /** + * {@inheritDoc} + */ + public void init(Content typeDefinitionNode) + { + type = typeDefinitionNode.getName(); + } + + /** + * {@inheritDoc} + */ + public String getNewNodeName(MultipartForm form, HttpServletRequest request) + { + return form.getParameter(ORGINAL_NODEDATA_NAME + "_" + FileProperties.PROPERTY_FILENAME); + } + + /** + * {@inheritDoc} + */ + public boolean onSavingPropertyMedia(Content media, Content parentNode, Content configNode, String name, + HttpServletRequest request, MultipartForm form, int type, int valueType, int isRichEditValue, int encoding) + throws RepositoryException, AccessDeniedException + { + String uuid = request.getParameter(name); + + NodeData nd = NodeDataUtil.getOrCreate(parentNode, name); + nd.setValue(uuid); + + return true; + } + + public void saveFromZipFile(Content media, File f, String cleanFileName, String extension) + throws AccessDeniedException, RepositoryException + { + Document doc = new Document(f, type + extension); + doc.setExtention(extension); + SaveHandlerImpl.saveDocument(media, doc, ORGINAL_NODEDATA_NAME, cleanFileName, cleanFileName + + "_" + + FileProperties.PROPERTY_TEMPLATE); + this.onPostSave(media); + } + + /** + * {@inheritDoc} + */ + @SuppressWarnings("unchecked") + public boolean onPostSave(Content media) + { + try + { + if (media.hasContent("resolutions")) + { + Collection<NodeData> nodedatas = media.getChildByName("resolutions").getNodeDataCollection(); + for (NodeData nd : nodedatas) + { + nd.delete(); + } + media.save(); + } + + if (MediaModule.getInstance().isAutoactivate()) + { + media.getMetaData().setActivated(); + media.save(); + } + } + catch (RepositoryException ex) + { + log.error("Error removing resolutions", ex); + } + + Collection<NodeData> nds = media.getNodeDataCollection("tags*"); + for (NodeData nd : nds) + { + if (nd.getString() != null) + { + try + { + nd.setValue(nd.getString().toLowerCase()); + nd.save(); + } + catch (RepositoryException ex) + { + log.warn("Error putting property to lower case", ex); + } + } + } + return true; + } + + protected NodeData getOriginalFileNodeData(Content media) + { + return media.getNodeData(ORGINAL_NODEDATA_NAME); + } + + /** + * {@inheritDoc} + */ + public String getExtension(Content media) + { + return getOriginalFileNodeData(media).getAttribute(FileProperties.PROPERTY_EXTENSION); + } + + /** + * {@inheritDoc} + */ + public String getFilename(Content media) + { + return getOriginalFileNodeData(media).getAttribute(FileProperties.PROPERTY_FILENAME); + } + + /** + * {@inheritDoc} + */ + public String getFullFilename(Content media) + { + return getFilename(media) + + (StringUtils.isNotBlank(getExtension(media)) ? "." + getExtension(media) : StringUtils.EMPTY); + } + + /** + * {@inheritDoc} + */ + public String getUrl(Content media, Map<String, String> options) + { + return MediaConfigurationManager.getInstance().getURIMappingPrefix() + + media.getHandle() + + "/" + + ORGINAL_NODEDATA_NAME + + "/" + + getFullFilename(media); + } + + /** + * {@inheritDoc} + */ + public String getUrl(Content media) + { + return getUrl(media, null); + } + + /** + * {@inheritDoc} + */ + public String getPreviewUrl(Content media) + { + return getUrl(media); + } + protected String getPropertyLocalized(Content media, String property) { Locale locale = MgnlContext.getLocale(); @@ -104,36 +267,4 @@ { return getPropertyLocalized(media, "abstract"); } - - /** - * {@inheritDoc} - */ - @SuppressWarnings("unchecked") - public boolean onPostSave(Content media) - { - try - { - if (media.hasContent("resolutions")) - { - Collection<NodeData> nodedatas = media.getChildByName("resolutions").getNodeDataCollection(); - for (NodeData nd : nodedatas) - { - nd.delete(); - } - media.save(); - } - - if (MediaModule.getInstance().isAutoactivate()) - { - media.getMetaData().setActivated(); - media.save(); - } - } - catch (RepositoryException ex) - { - log.error("Error removing resolutions", ex); - } - return true; - } - } 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 2009-09-04 14:44:47 UTC (rev 1360) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/ImageTypeHandler.java 2009-09-04 16:15:19 UTC (rev 1361) @@ -17,21 +17,7 @@ */ package net.sourceforge.openutils.mgnlmedia.media.types.impl; -import info.magnolia.cms.beans.runtime.Document; -import info.magnolia.cms.beans.runtime.FileProperties; -import info.magnolia.cms.beans.runtime.MultipartForm; import info.magnolia.cms.core.Content; -import info.magnolia.cms.core.NodeData; -import info.magnolia.cms.security.AccessDeniedException; -import info.magnolia.cms.util.NodeDataUtil; -import info.magnolia.module.admininterface.SaveHandlerImpl; - -import java.io.File; -import java.util.Collection; -import java.util.Map; - -import javax.jcr.RepositoryException; - import net.sourceforge.openutils.mgnlmedia.media.configuration.MediaConfigurationManager; import net.sourceforge.openutils.mgnlmedia.media.utils.ImageUtils; @@ -55,61 +41,6 @@ /** * {@inheritDoc} */ - public void init(Content typeDefinitionNode) - { - - } - - /** - * {@inheritDoc} - */ - public String getFilename(Content media) - { - NodeData file = media.getNodeData("image"); - return file.getAttribute(FileProperties.PROPERTY_FILENAME); - } - - /** - * {@inheritDoc} - */ - public String getExtension(Content media) - { - NodeData file = media.getNodeData("image"); - return file.getAttribute(FileProperties.PROPERTY_EXTENSION); - } - - /** - * {@inheritDoc} - */ - public String getFullFilename(Content media) - { - return getFilename(media) + "." + getExtension(media); - } - - /** - * {@inheritDoc} - */ - public String getUrl(Content media) - { - NodeData file = media.getNodeData("image"); - String fileName = file.getAttribute(FileProperties.PROPERTY_FILENAME) - + "." - + file.getAttribute(FileProperties.EXTENSION); - - return MediaConfigurationManager.getInstance().getURIMappingPrefix() + media.getHandle() + "/image/" + fileName; - } - - /** - * {@inheritDoc} - */ - public String getUrl(Content media, Map<String, String> options) - { - return getUrl(media); - } - - /** - * {@inheritDoc} - */ public String getThumbnailUrl(Content media) { if (!ImageUtils.checkOrCreateResolution(media, "thumbnail")) @@ -125,6 +56,7 @@ /** * {@inheritDoc} */ + @Override public String getPreviewUrl(Content media) { if (!ImageUtils.checkOrCreateResolution(media, "preview")) @@ -136,67 +68,4 @@ + "/resolutions/preview/data." + ImageUtils.getExtension(media, "preview"); } - - /** - * {@inheritDoc} - */ - @Override - @SuppressWarnings("unchecked") - public boolean onPostSave(Content media) - { - Collection<NodeData> nds = media.getNodeDataCollection("tags-*"); - for (NodeData nd : nds) - { - if (nd.getString() != null) - { - try - { - nd.setValue(nd.getString().toLowerCase()); - nd.save(); - } - catch (RepositoryException ex) - { - log.warn("Error putting property to lower case", ex); - } - ... [truncated message content] |