|
From: <fg...@us...> - 2013-10-19 20:58:12
|
Revision: 4388
http://openutils.svn.sourceforge.net/openutils/?rev=4388&view=rev
Author: fgiust
Date: 2013-10-19 20:58:07 +0000 (Sat, 19 Oct 2013)
Log Message:
-----------
refactoring observedManagers
Modified Paths:
--------------
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/externalvideo/ExternalVideoTypeHandler.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/SearchFilterSpecFieldMedia.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/ImageProcessorsManager.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaConfigurationManager.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaUsedInManager.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/UsedInWorkspace.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogFileAudio.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogFileImage.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogFileVideo.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogSelectMedia.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/LayerDialogMVC.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/lifecycle/MediaModule.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBean.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBeanBuilder.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MessagesTemplatedMVCHandler.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/save/MediaCustomSaveHandler.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/MediaModuleVersionHandler.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tags/el/MediaEl.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tree/MediaModuleTreeConfiguration.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/BaseTypeHandler.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/ImageTypeHandler.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/MediaWithPreviewImageTypeHandler.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/MediaLoadUtils.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/resources/META-INF/magnolia/media.xml
magnoliamodules/trunk/openutils-mgnlmedia/src/main/resources/META-INF/media.tld
magnoliamodules/trunk/openutils-mgnlmedia/src/test/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageProcessorsManagerMock.java
Added Paths:
-----------
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/DefaultImageProcessorsManager.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/DefaultMediaConfigurationManager.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/DefaultMediaUsedInManager.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.mediausedin.entries.website.xml
Removed Paths:
-------------
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaSearchPage.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/YouTubeVideoTypeHandler.java
magnoliamodules/trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.mediausedin.website.xml
magnoliamodules/trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaSearchPage.html
Modified: magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/externalvideo/ExternalVideoTypeHandler.java
===================================================================
--- magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/externalvideo/ExternalVideoTypeHandler.java 2013-10-19 13:13:31 UTC (rev 4387)
+++ magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/externalvideo/ExternalVideoTypeHandler.java 2013-10-19 20:58:07 UTC (rev 4388)
@@ -21,6 +21,7 @@
import info.magnolia.cms.beans.runtime.MultipartForm;
import info.magnolia.jcr.util.PropertyUtil;
+import info.magnolia.objectfactory.Components;
import java.io.File;
import java.util.HashMap;
@@ -45,8 +46,8 @@
public static ExternalVideoProvider getExternalVideoProvider(Node media)
{
- MediaTypeHandler mth = MediaConfigurationManager
- .getInstance()
+ MediaTypeHandler mth = Components
+ .getComponent(MediaConfigurationManager.class)
.getMediaTypeConfigurationFromMedia(media)
.getHandler();
if (mth.getClass().isAssignableFrom(ExternalVideoTypeHandler.class))
Modified: magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/SearchFilterSpecFieldMedia.java
===================================================================
--- magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/SearchFilterSpecFieldMedia.java 2013-10-19 13:13:31 UTC (rev 4387)
+++ magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/SearchFilterSpecFieldMedia.java 2013-10-19 20:58:07 UTC (rev 4388)
@@ -19,6 +19,8 @@
package net.sourceforge.openutils.mgnlmedia.media.advancedsearch;
+import info.magnolia.objectfactory.Components;
+
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -45,7 +47,9 @@
return super.getOptions();
}
List<Option> options = new ArrayList<Option>();
- Map<String, MediaTypeConfiguration> mediatype = MediaConfigurationManager.getInstance().getTypes();
+ Map<String, MediaTypeConfiguration> mediatype = Components
+ .getComponent(MediaConfigurationManager.class)
+ .getTypes();
Option option;
for (String media : mediatype.keySet())
{
Copied: magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/DefaultImageProcessorsManager.java (from rev 4371, magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/ImageProcessorsManager.java)
===================================================================
--- magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/DefaultImageProcessorsManager.java (rev 0)
+++ magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/DefaultImageProcessorsManager.java 2013-10-19 20:58:07 UTC (rev 4388)
@@ -0,0 +1,277 @@
+/**
+ *
+ * SimpleMedia Module for Magnolia CMS (http://www.openmindlab.com/lab/products/media.html)
+ * Copyright(C) 2008-2013, 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.configuration;
+
+import info.magnolia.jcr.util.NodeUtil;
+import info.magnolia.jcr.util.PropertyUtil;
+import it.openutils.mgnlutils.api.ObservedManagerAdapter;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.inject.Singleton;
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+
+import net.sourceforge.openutils.mgnlmedia.media.processors.FitInAndFillWithBandsImageResolutionProcessor;
+import net.sourceforge.openutils.mgnlmedia.media.processors.FitInImageResolutionProcessor;
+import net.sourceforge.openutils.mgnlmedia.media.processors.ImagePostProcessor;
+import net.sourceforge.openutils.mgnlmedia.media.processors.ImageResolutionProcessor;
+import net.sourceforge.openutils.mgnlmedia.media.processors.ResizeCropCenteredImageResolutionProcessor;
+import net.sourceforge.openutils.mgnlmedia.media.processors.ResizeNoCropImageResolutionProcessor;
+
+import org.apache.commons.lang.StringUtils;
+
+
+/**
+ * ObservedManager that manages the maps of processors that handle images resize and processors that do operation on
+ * images after the resize. <br/>
+ * default image resolution processors:
+ * <table>
+ * <tbody>
+ * <tr>
+ * <td>control chars</td>
+ * <td>image resolution processor</td>
+ * <td>description</td>
+ * </tr>
+ * <tr>
+ * <td>b, o</td>
+ * <td>{@link FitInAndFillWithBandsImageResolutionProcessor}</td>
+ * <td>resize image to fit in required resolution and fills empty areas by color passed in parameters as "background"</td>
+ * </tr>
+ * <tr>
+ * <td>l</td>
+ * <td>{@link FitInImageResolutionProcessor}</td>
+ * <td>resize image to fit in required resolution</td>
+ * </tr>
+ * <tr>
+ * <td>x</td>
+ * <td>{@link ResizeNoCropImageResolutionProcessor}</td>
+ * <td>resize image to contain required resolution</td>
+ * </tr>
+ * <tr>
+ * <td>no control char (default), c</td>
+ * <td>{@link ResizeCropCenteredImageResolutionProcessor}</td>
+ * <td>resize image to contain required resolution, and crop simmetric bands that outfits the required resolution rect</td>
+ * </tr>
+ * </tbody>
+ * </table>
+ * @author molaschi
+ * @version $Id: $
+ */
+@Singleton
+public class DefaultImageProcessorsManager extends ObservedManagerAdapter implements ImageProcessorsManager
+{
+
+ 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>();
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void onClear()
+ {
+ imageResProcs.clear();
+ imagePostProcs.clear();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ protected void onRegister(Node parentNode)
+ {
+
+ Iterable<Node> nodes;
+ try
+ {
+ nodes = NodeUtil.getNodes(parentNode, NodeUtil.EXCLUDE_META_DATA_FILTER);
+ }
+ catch (RepositoryException e)
+ {
+ log.error("Error initializing image processor configuration", e);
+ return;
+ }
+
+ for (Node processorsNode : nodes)
+ {
+
+ Iterable<Node> processors;
+ try
+ {
+ processors = NodeUtil.getNodes(processorsNode, NodeUtil.EXCLUDE_META_DATA_FILTER);
+ }
+ catch (RepositoryException e)
+ {
+ log
+ .error(
+ "Error initializing image processor configuration for " + NodeUtil.getName(processorsNode),
+ e);
+ continue;
+ }
+
+ for (Node node : processors)
+ {
+ try
+ {
+
+ if (IMAGE_POST_PROCESSORS_NAME.equals(NodeUtil.getName(processorsNode)))
+ {
+ String classNameHandler = PropertyUtil.getString(node, "class");
+ Class classHandler = Class.forName(classNameHandler);
+ if (!ImagePostProcessor.class.isAssignableFrom(classHandler))
+ {
+ log.error(
+ "Error getting post processor for {}: class {} not implements ImagePostProcessor",
+ NodeUtil.getPathIfPossible(node),
+ classHandler);
+ continue;
+ }
+
+ ImagePostProcessor imagePostProcessor = (ImagePostProcessor) classHandler.newInstance();
+ imagePostProcs.put(NodeUtil.getName(node), imagePostProcessor);
+ }
+
+ if (IMAGE_RESOLUTION_PROCESSORS_NAME.equals(NodeUtil.getName(processorsNode)))
+ {
+ String controlChar = NodeUtil.getName(node);
+
+ String classNameHandler = PropertyUtil.getString(node, "class");
+ Class classHandler = Class.forName(classNameHandler);
+ if (!ImageResolutionProcessor.class.isAssignableFrom(classHandler))
+ {
+ log
+ .error(
+ "Error getting resolution processor for {}: class {} not implements ImageResolutionProcessor",
+ NodeUtil.getPathIfPossible(node),
+ classHandler);
+ continue;
+ }
+
+ ImageResolutionProcessor imageResolutionProcessor = (ImageResolutionProcessor) classHandler
+ .newInstance();
+ if (!controlChar.equals("default"))
+ {
+ controlChar = controlChar.substring(0, 1);
+ }
+ imageResProcs.put(controlChar, imageResolutionProcessor);
+ try
+ {
+ if (node.hasProperty("aliases"))
+ {
+ String[] aliases = StringUtils.split(PropertyUtil.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 {}", NodeUtil.getPathIfPossible(node), ex);
+ }
+ catch (IllegalAccessException ex)
+ {
+ log.error("Error getting media type configuration for {}", NodeUtil.getPathIfPossible(node), ex);
+ }
+ catch (ClassNotFoundException ex)
+ {
+ log.error("Error getting media type configuration for {}", NodeUtil.getPathIfPossible(node), ex);
+ }
+ catch (RuntimeException ex)
+ {
+ log.error("Error getting media type configuration for {}", NodeUtil.getPathIfPossible(node), ex);
+ }
+ }
+ }
+ }
+
+ /**
+ * Get image resolution processor for a given control char
+ * @param controlChar resolution control char
+ * @return image resolution processor for a given control char
+ */
+ public ImageResolutionProcessor getImageResolutionProcessor(char controlChar)
+ {
+ return imageResProcs.get(String.valueOf(controlChar));
+ }
+
+ /**
+ * Check if control char is registered
+ * @param controlChar control char to check
+ * @return true if control char is registered
+ */
+ public boolean isValidControlChar(char controlChar)
+ {
+ return imageResProcs.keySet().contains(String.valueOf(controlChar));
+ }
+
+ /**
+ * Get the default image resolution processor (by default config is
+ * {@link ResizeCropCenteredImageResolutionProcessor})
+ * @return the default image resolution processor
+ */
+ public ImageResolutionProcessor getDefaultImageResolutionProcessor()
+ {
+ return imageResProcs.get("default");
+ }
+
+ /**
+ * Get image post processor by its name
+ * @param name image post processor name
+ * @return image post processor
+ */
+ public ImagePostProcessor getImagePostProcessor(String name)
+ {
+ return imagePostProcs.get(name);
+ }
+
+ /**
+ * Get all image post processors
+ * @return image post processors list
+ */
+ public Collection<ImagePostProcessor> getImagePostProcessorsList()
+ {
+ return imagePostProcs.values();
+ }
+
+ /**
+ * Get the map of image post processors
+ * @return image post processors map
+ */
+ public Map<String, ImagePostProcessor> getImagePostProcessorsMap()
+ {
+ return imagePostProcs;
+ }
+}
Copied: magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/DefaultMediaConfigurationManager.java (from rev 4371, magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaConfigurationManager.java)
===================================================================
--- magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/DefaultMediaConfigurationManager.java (rev 0)
+++ magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/DefaultMediaConfigurationManager.java 2013-10-19 20:58:07 UTC (rev 4388)
@@ -0,0 +1,209 @@
+/**
+ *
+ * SimpleMedia Module for Magnolia CMS (http://www.openmindlab.com/lab/products/media.html)
+ * Copyright(C) 2008-2013, 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.configuration;
+
+import info.magnolia.cms.beans.config.URI2RepositoryManager;
+import info.magnolia.cms.beans.config.URI2RepositoryMapping;
+import info.magnolia.jcr.util.NodeUtil;
+import info.magnolia.jcr.util.PropertyUtil;
+import it.openutils.mgnlutils.api.NodeUtilsExt;
+import it.openutils.mgnlutils.api.ObservedManagerAdapter;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+
+import net.sourceforge.openutils.mgnlmedia.media.lifecycle.MediaModule;
+
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * ObservedManager that keeps that media types configuration.<br/>
+ * Each media type is defined under the mediatypes contentnode in /modules/media.<br/>
+ * I.e.<br/>
+ * /modules/media/mediatypes/pdf<br/>
+ * <ul>
+ * <li>label = pdf file</li>
+ * <li>handler = info.acme.PdfTypeHandler</li>
+ * <li>menuIcon = .resources/pdf/icons/pdf16.gif</li>
+ * <li>extensions = pdf</li>
+ * </ul>
+ * @author molaschi
+ */
+@Singleton
+public class DefaultMediaConfigurationManager extends ObservedManagerAdapter implements MediaConfigurationManager
+{
+
+ private Logger log = LoggerFactory.getLogger(MediaConfigurationManager.class);
+
+ private Map<String, MediaTypeConfiguration> types = new LinkedHashMap<String, MediaTypeConfiguration>();
+
+ @Inject
+ private URI2RepositoryManager uri2RepositoryManager;
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void onClear()
+ {
+ types.clear();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ protected void onRegister(Node node)
+ {
+
+ try
+ {
+ for (Iterator<Node> iter = NodeUtil.getNodes(node, NodeUtil.EXCLUDE_META_DATA_FILTER).iterator(); iter
+ .hasNext();)
+ {
+ Node typeNode = iter.next();
+
+ if (!PropertyUtil.getBoolean(typeNode, "enabled", true))
+ {
+ continue;
+ }
+
+ try
+ {
+ MediaTypeConfiguration conf = (MediaTypeConfiguration) NodeUtilsExt.toBean(
+ typeNode,
+ true,
+ MediaTypeConfiguration.class);
+
+ if (conf.getHandler() != null)
+ {
+ conf.getHandler().init(typeNode);
+ }
+ else
+ {
+ log.error("Missing handler for media type {}", typeNode.getName());
+ continue;
+ }
+
+ types.put(typeNode.getName(), conf);
+ }
+ catch (Throwable e)
+ {
+ log.error("Error getting media type configuration for {}", NodeUtil.getPathIfPossible(typeNode), e);
+ }
+ }
+ }
+ catch (RepositoryException e)
+ {
+ log.error("Error getting nodes for {}", NodeUtil.getPathIfPossible(node), e);
+ }
+ }
+
+ /**
+ * Get the media type from a file extension
+ * @param extension file extension
+ * @return media type
+ */
+ public MediaTypeConfiguration getMediaHandlerFromExtension(String extension)
+ {
+ if (extension == null)
+ {
+ return null;
+ }
+
+ String lowerCasedExtension = extension.toLowerCase();
+ for (Map.Entry<String, MediaTypeConfiguration> entry : getTypes().entrySet())
+ {
+
+ MediaTypeConfiguration value = entry.getValue();
+
+ List<String> extensionsList = value.getExtensionsList();
+
+ if (extensionsList != null && extensionsList.contains(lowerCasedExtension))
+ {
+ return entry.getValue();
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Get all media type map
+ * @return media type map
+ */
+ public Map<String, MediaTypeConfiguration> getTypes()
+ {
+ return types;
+ }
+
+ /**
+ * Get the type configuration for a media
+ * @param media media
+ * @return type configuration
+ */
+ public MediaTypeConfiguration getMediaTypeConfigurationFromMedia(Node media)
+ {
+ try
+ {
+ if (!StringUtils.equals(media.getPrimaryNodeType().getName(), NT_MEDIA))
+ {
+ return null;
+ }
+ }
+ catch (RepositoryException e)
+ {
+ log.error("Error getting item type on node {} module media", NodeUtil.getPathIfPossible(media), e);
+ return null;
+ }
+
+ return types.get(PropertyUtil.getString(media, "type"));
+ }
+
+ /**
+ * Get uri mapping for repo
+ * @return uri mapping for repo
+ */
+ @Override
+ public String getURIMappingPrefix()
+ {
+ Collection<URI2RepositoryMapping> mappings = uri2RepositoryManager.getMappings();
+ for (URI2RepositoryMapping mapping : mappings)
+ {
+ if (mapping.getRepository().equals(MediaModule.REPO))
+ {
+ return mapping.getURIPrefix();
+ }
+ }
+ return StringUtils.EMPTY;
+ }
+}
Copied: magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/DefaultMediaUsedInManager.java (from rev 4371, magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaUsedInManager.java)
===================================================================
--- magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/DefaultMediaUsedInManager.java (rev 0)
+++ magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/DefaultMediaUsedInManager.java 2013-10-19 20:58:07 UTC (rev 4388)
@@ -0,0 +1,130 @@
+/**
+ *
+ * SimpleMedia Module for Magnolia CMS (http://www.openmindlab.com/lab/products/media.html)
+ * Copyright(C) 2008-2013, 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.configuration;
+
+import info.magnolia.cms.core.MgnlNodeType;
+import info.magnolia.content2bean.Content2BeanException;
+import info.magnolia.jcr.RuntimeRepositoryException;
+import info.magnolia.jcr.util.NodeUtil;
+import info.magnolia.objectfactory.Components;
+import it.openutils.mgnlutils.api.NodeUtilsExt;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.inject.Singleton;
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+
+import net.sourceforge.openutils.mgnlcriteria.jcr.query.AdvancedResult;
+import net.sourceforge.openutils.mgnlcriteria.jcr.query.Criteria;
+import net.sourceforge.openutils.mgnlcriteria.jcr.query.JCRCriteriaFactory;
+import net.sourceforge.openutils.mgnlcriteria.jcr.query.criterion.Disjunction;
+import net.sourceforge.openutils.mgnlcriteria.jcr.query.criterion.Order;
+import net.sourceforge.openutils.mgnlcriteria.jcr.query.criterion.Restrictions;
+
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @author dschivo
+ * @version $Id$
+ */
+@Singleton
+public class DefaultMediaUsedInManager implements MediaUsedInManager
+{
+
+ private static Logger log = LoggerFactory.getLogger(MediaUsedInManager.class);
+
+ private Map<String, UsedInWorkspace> usedInWorkspaceMap = new HashMap<String, UsedInWorkspace>();
+
+ public Map<String, UsedInWorkspace> getEntries()
+ {
+ return usedInWorkspaceMap;
+ }
+
+ public void setEntries(Map<String, UsedInWorkspace> entries)
+ {
+ this.usedInWorkspaceMap = entries;
+ }
+
+ public Map<String, AdvancedResult> getUsedIn(String mediaUUID)
+ {
+ Map<String, AdvancedResult> map = new HashMap<String, AdvancedResult>(usedInWorkspaceMap.size());
+ for (String workspaceName : usedInWorkspaceMap.keySet())
+ {
+ map.put(workspaceName, getUsedInWorkspace(mediaUUID, workspaceName));
+ }
+ return map;
+ }
+
+ public AdvancedResult getUsedInWorkspace(String mediaUUID, String workspaceName)
+ {
+ UsedInWorkspace uiw = usedInWorkspaceMap.get(workspaceName);
+ if (uiw == null)
+ {
+ return AdvancedResult.EMPTY_RESULT;
+ }
+
+ return getUsedInWorkspaceNodes(mediaUUID, uiw);
+ }
+
+ private AdvancedResult getUsedInWorkspaceNodes(String mediaUUID, UsedInWorkspace uiw)
+
+ {
+ List<Node> nodes = new ArrayList<Node>();
+ Set<String> handles = new HashSet<String>();
+
+ String basepath = "/jcr:root" + StringUtils.defaultString(uiw.getBasepath(), "/");
+
+ if (!StringUtils.endsWith(basepath, "/"))
+ {
+ basepath = basepath + "/";
+ }
+ basepath = basepath + "/*";
+
+ Criteria criteria = JCRCriteriaFactory
+ .createCriteria()
+ .setWorkspace(uiw.getWorkspaceName())
+ .setBasePath(basepath)
+ .addOrder(Order.desc("@jcr:score"));
+
+ criteria.add(Restrictions.not(Restrictions.in("@jcr:primaryType", uiw.getNodetypes())));
+
+ Disjunction properties = Restrictions.disjunction();
+ for (String string : uiw.getProperties())
+ {
+ properties.add(Restrictions.contains(string, mediaUUID));
+ }
+ criteria.add(properties);
+
+ AdvancedResult result = criteria.execute();
+
+ log.debug("{} > {}", criteria.toXpathExpression(), result.getTotalSize());
+
+ return result;
+ }
+}
Modified: magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/ImageProcessorsManager.java
===================================================================
--- magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/ImageProcessorsManager.java 2013-10-19 13:13:31 UTC (rev 4387)
+++ magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/ImageProcessorsManager.java 2013-10-19 20:58:07 UTC (rev 4388)
@@ -19,269 +19,30 @@
package net.sourceforge.openutils.mgnlmedia.media.configuration;
-import info.magnolia.jcr.util.NodeUtil;
-import info.magnolia.jcr.util.PropertyUtil;
-import info.magnolia.objectfactory.Components;
-import it.openutils.mgnlutils.api.ObservedManagerAdapter;
-
import java.util.Collection;
-import java.util.HashMap;
import java.util.Map;
-import javax.inject.Singleton;
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import net.sourceforge.openutils.mgnlmedia.media.processors.FitInAndFillWithBandsImageResolutionProcessor;
-import net.sourceforge.openutils.mgnlmedia.media.processors.FitInImageResolutionProcessor;
import net.sourceforge.openutils.mgnlmedia.media.processors.ImagePostProcessor;
import net.sourceforge.openutils.mgnlmedia.media.processors.ImageResolutionProcessor;
-import net.sourceforge.openutils.mgnlmedia.media.processors.ResizeCropCenteredImageResolutionProcessor;
-import net.sourceforge.openutils.mgnlmedia.media.processors.ResizeNoCropImageResolutionProcessor;
-import org.apache.commons.lang.StringUtils;
-
/**
- * ObservedManager that manages the maps of processors that handle images resize and processors that do operation on
- * images after the resize. <br/>
- * default image resolution processors:
- * <table>
- * <tbody>
- * <tr>
- * <td>control chars</td>
- * <td>image resolution processor</td>
- * <td>description</td>
- * </tr>
- * <tr>
- * <td>b, o</td>
- * <td>{@link FitInAndFillWithBandsImageResolutionProcessor}</td>
- * <td>resize image to fit in required resolution and fills empty areas by color passed in parameters as "background"</td>
- * </tr>
- * <tr>
- * <td>l</td>
- * <td>{@link FitInImageResolutionProcessor}</td>
- * <td>resize image to fit in required resolution</td>
- * </tr>
- * <tr>
- * <td>x</td>
- * <td>{@link ResizeNoCropImageResolutionProcessor}</td>
- * <td>resize image to contain required resolution</td>
- * </tr>
- * <tr>
- * <td>no control char (default), c</td>
- * <td>{@link ResizeCropCenteredImageResolutionProcessor}</td>
- * <td>resize image to contain required resolution, and crop simmetric bands that outfits the required resolution rect</td>
- * </tr>
- * </tbody>
- * </table>
- * @author molaschi
+ * @author fgiust
* @version $Id: $
*/
-@Singleton
-public class ImageProcessorsManager extends ObservedManagerAdapter
+public interface ImageProcessorsManager
{
- private static final String IMAGE_RESOLUTION_PROCESSORS_NAME = "image-resolution";
+ ImageResolutionProcessor getImageResolutionProcessor(char controlChar);
- private static final String IMAGE_POST_PROCESSORS_NAME = "image-post";
+ boolean isValidControlChar(char controlChar);
- private Map<String, ImageResolutionProcessor> imageResProcs = new HashMap<String, ImageResolutionProcessor>();
+ ImageResolutionProcessor getDefaultImageResolutionProcessor();
- private Map<String, ImagePostProcessor> imagePostProcs = new HashMap<String, ImagePostProcessor>();
+ ImagePostProcessor getImagePostProcessor(String name);
- /**
- * Get singleton instance
- * @return singleton manager instance
- */
- public static ImageProcessorsManager getInstance()
- {
- return Components.getComponent(ImageProcessorsManager.class);
- }
+ Collection<ImagePostProcessor> getImagePostProcessorsList();
- /**
- * {@inheritDoc}
- */
- @Override
- protected void onClear()
- {
- imageResProcs.clear();
- imagePostProcs.clear();
- }
+ Map<String, ImagePostProcessor> getImagePostProcessorsMap();
- /**
- * {@inheritDoc}
- */
- @SuppressWarnings("unchecked")
- @Override
- protected void onRegister(Node parentNode)
- {
-
- Iterable<Node> nodes;
- try
- {
- nodes = NodeUtil.getNodes(parentNode, NodeUtil.EXCLUDE_META_DATA_FILTER);
- }
- catch (RepositoryException e)
- {
- log.error("Error initializing image processor configuration", e);
- return;
- }
-
- for (Node processorsNode : nodes)
- {
-
- Iterable<Node> processors;
- try
- {
- processors = NodeUtil.getNodes(processorsNode, NodeUtil.EXCLUDE_META_DATA_FILTER);
- }
- catch (RepositoryException e)
- {
- log
- .error(
- "Error initializing image processor configuration for " + NodeUtil.getName(processorsNode),
- e);
- continue;
- }
-
- for (Node node : processors)
- {
- try
- {
-
- if (IMAGE_POST_PROCESSORS_NAME.equals(NodeUtil.getName(processorsNode)))
- {
- String classNameHandler = PropertyUtil.getString(node, "class");
- Class classHandler = Class.forName(classNameHandler);
- if (!ImagePostProcessor.class.isAssignableFrom(classHandler))
- {
- log.error(
- "Error getting post processor for {}: class {} not implements ImagePostProcessor",
- NodeUtil.getPathIfPossible(node),
- classHandler);
- continue;
- }
-
- ImagePostProcessor imagePostProcessor = (ImagePostProcessor) classHandler.newInstance();
- imagePostProcs.put(NodeUtil.getName(node), imagePostProcessor);
- }
-
- if (IMAGE_RESOLUTION_PROCESSORS_NAME.equals(NodeUtil.getName(processorsNode)))
- {
- String controlChar = NodeUtil.getName(node);
-
- String classNameHandler = PropertyUtil.getString(node, "class");
- Class classHandler = Class.forName(classNameHandler);
- if (!ImageResolutionProcessor.class.isAssignableFrom(classHandler))
- {
- log
- .error(
- "Error getting resolution processor for {}: class {} not implements ImageResolutionProcessor",
- NodeUtil.getPathIfPossible(node),
- classHandler);
- continue;
- }
-
- ImageResolutionProcessor imageResolutionProcessor = (ImageResolutionProcessor) classHandler
- .newInstance();
- if (!controlChar.equals("default"))
- {
- controlChar = controlChar.substring(0, 1);
- }
- imageResProcs.put(controlChar, imageResolutionProcessor);
- try
- {
- if (node.hasProperty("aliases"))
- {
- String[] aliases = StringUtils.split(PropertyUtil.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 {}", NodeUtil.getPathIfPossible(node), ex);
- }
- catch (IllegalAccessException ex)
- {
- log.error("Error getting media type configuration for {}", NodeUtil.getPathIfPossible(node), ex);
- }
- catch (ClassNotFoundException ex)
- {
- log.error("Error getting media type configuration for {}", NodeUtil.getPathIfPossible(node), ex);
- }
- catch (RuntimeException ex)
- {
- log.error("Error getting media type configuration for {}", NodeUtil.getPathIfPossible(node), ex);
- }
- }
- }
- }
-
- /**
- * Get image resolution processor for a given control char
- * @param controlChar resolution control char
- * @return image resolution processor for a given control char
- */
- public ImageResolutionProcessor getImageResolutionProcessor(char controlChar)
- {
- return imageResProcs.get(String.valueOf(controlChar));
- }
-
- /**
- * Check if control char is registered
- * @param controlChar control char to check
- * @return true if control char is registered
- */
- public boolean isValidControlChar(char controlChar)
- {
- return imageResProcs.keySet().contains(String.valueOf(controlChar));
- }
-
- /**
- * Get the default image resolution processor (by default config is
- * {@link ResizeCropCenteredImageResolutionProcessor})
- * @return the default image resolution processor
- */
- public ImageResolutionProcessor getDefaultImageResolutionProcessor()
- {
- return imageResProcs.get("default");
- }
-
- /**
- * Get image post processor by its name
- * @param name image post processor name
- * @return image post processor
- */
- public ImagePostProcessor getImagePostProcessor(String name)
- {
- return imagePostProcs.get(name);
- }
-
- /**
- * Get all image post processors
- * @return image post processors list
- */
- public Collection<ImagePostProcessor> getImagePostProcessorsList()
- {
- return imagePostProcs.values();
- }
-
- /**
- * Get the map of image post processors
- * @return image post processors map
- */
- public Map<String, ImagePostProcessor> getImagePostProcessorsMap()
- {
- return imagePostProcs;
- }
}
Modified: magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaConfigurationManager.java
===================================================================
--- magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaConfigurationManager.java 2013-10-19 13:13:31 UTC (rev 4387)
+++ magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaConfigurationManager.java 2013-10-19 20:58:07 UTC (rev 4388)
@@ -19,280 +19,31 @@
package net.sourceforge.openutils.mgnlmedia.media.configuration;
-import info.magnolia.cms.beans.config.URI2RepositoryManager;
-import info.magnolia.cms.beans.config.URI2RepositoryMapping;
import info.magnolia.cms.core.MgnlNodeType;
-import info.magnolia.jcr.util.NodeUtil;
-import info.magnolia.jcr.util.PropertyUtil;
-import info.magnolia.objectfactory.Components;
-import info.magnolia.repository.RepositoryConstants;
-import it.openutils.mgnlutils.api.NodeUtilsExt;
-import it.openutils.mgnlutils.api.ObservedManagerAdapter;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
import java.util.Map;
-import javax.inject.Singleton;
import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.query.InvalidQueryException;
-import net.sourceforge.openutils.mgnlmedia.media.lifecycle.MediaModule;
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
/**
- * ObservedManager that keeps that media types configuration.<br/>
- * Each media type is defined under the mediatypes contentnode in /modules/media.<br/>
- * I.e.<br/>
- * /modules/media/mediatypes/pdf<br/>
- * <ul>
- * <li>label = pdf file</li>
- * <li>handler = info.acme.PdfTypeHandler</li>
- * <li>menuIcon = .resources/pdf/icons/pdf16.gif</li>
- * <li>extensions = pdf</li>
- * </ul>
- * @author molaschi
+ * @author fgiust
+ * @version $Id$
*/
-@Singleton
-public class MediaConfigurationManager extends ObservedManagerAdapter
+public interface MediaConfigurationManager
{
- private static final String MGNL_MEDIA_TYPE = "mgnl:media";
+ String NT_FOLDER = MgnlNodeType.NT_CONTENT;
- private static final String MGNL_RESOLUTION_TYPE = "mgnl:resolutions";
+ String NT_MEDIA = "mgnl:media";
- /**
- * Folder type
- */
- public static final String NT_FOLDER = MgnlNodeType.NT_CONTENT;
+ String NT_RESOLUTIONS = "mgnl:resolutions";
- /**
- * Media type
- */
- public static final String NT_MEDIA = MGNL_MEDIA_TYPE;
+ String getURIMappingPrefix();
- /**
- * Resolutions node type
- */
- public static final String NT_RESOLUTIONS = MGNL_RESOLUTION_TYPE;
+ MediaTypeConfiguration getMediaTypeConfigurationFromMedia(Node media);
- private Logger log = LoggerFactory.getLogger(MediaConfigurationManager.class);
+ Map<String, MediaTypeConfiguration> getTypes();
- private Map<String, MediaTypeConfiguration> types = new LinkedHashMap<String, MediaTypeConfiguration>();
-
- /**
- * {@inheritDoc}
- */
- @Override
- protected void onClear()
- {
- types.clear();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- @SuppressWarnings("unchecked")
- protected void onRegister(Node node)
- {
-
- try
- {
- for (Iterator<Node> iter = NodeUtil.getNodes(node, NodeUtil.EXCLUDE_META_DATA_FILTER).iterator(); iter
- .hasNext();)
- {
- Node typeNode = iter.next();
-
- if (!PropertyUtil.getBoolean(typeNode, "enabled", true))
- {
- continue;
- }
-
- try
- {
- MediaTypeConfiguration conf = (MediaTypeConfiguration) NodeUtilsExt.toBean(
- typeNode,
- true,
- MediaTypeConfiguration.class);
-
- if (conf.getHandler() != null)
- {
- conf.getHandler().init(typeNode);
- }
- else
- {
- log.error("Missing handler for media type {}", typeNode.getName());
- continue;
- }
-
- types.put(typeNode.getName(), conf);
- }
- catch (Throwable e)
- {
- log.error("Error getting media type configuration for {}", NodeUtil.getPathIfPossible(typeNode), e);
- }
- }
- }
- catch (RepositoryException e)
- {
- log.error("Error getting nodes for {}", NodeUtil.getPathIfPossible(node), e);
- }
- }
-
- /**
- * Get singleton instance
- * @return singleton instance
- */
- public static MediaConfigurationManager getInstance()
- {
- return Components.getComponent(MediaConfigurationManager.class);
- }
-
- /**
- * Get the media type from a file extension
- * @param extension file extension
- * @return media type
- */
- public static MediaTypeConfiguration getMediaHandlerFromExtension(String extension)
- {
- if (extension == null)
- {
- return null;
- }
-
- String lowerCasedExtension = extension.toLowerCase();
- for (Map.Entry<String, MediaTypeConfiguration> entry : MediaConfigurationManager
- .getInstance()
- .getTypes()
- .entrySet())
- {
-
- MediaTypeConfiguration value = entry.getValue();
-
- List<String> extensionsList = value.getExtensionsList();
-
- if (extensionsList != null && extensionsList.contains(lowerCasedExtension))
- {
- return entry.getValue();
- }
- }
-
- return null;
- }
-
- /**
- * Get all media type map
- * @return media type map
- */
- public Map<String, MediaTypeConfiguration> getTypes()
- {
- return types;
- }
-
- /**
- * Get the list of web pages where a media is used
- * @param uuid uuid of media
- * @return list of web pages where a media is used
- * @throws InvalidQueryException invalid query
- * @throws RepositoryException repository exception
- */
- public List<String> getUsedInWebPages(String uuid) throws InvalidQueryException, RepositoryException
- {
- return MediaUsedInManager.getInstance().getUsedInWorkspacePaths(uuid, RepositoryConstants.WEBSITE);
- }
-
- // /**
- // * @param path
- // * @param type
- // * @param search
- // * @param recursive
- // * @return
- // * @throws RepositoryException
- // * @deprecated use the find method overload based on Magnolia Criteria API
- // */
- // @Deprecated
- // public Collection<Content> find(String path, String type, String search, boolean recursive)
- // throws RepositoryException
- // {
- // QueryManager qm = MgnlContext.getQueryManager(MediaModule.REPO);
- // StringBuffer sbQuery = new StringBuffer("/jcr:root/");
- // path = StringUtils.removeEnd(StringUtils.removeStart(StringUtils.trimToEmpty(path), "/"), "/");
- // if (StringUtils.isNotEmpty(path))
- // {
- // sbQuery.append(ISO9075.encodePath(path)).append('/');
- // }
- // if (recursive)
- // {
- // sbQuery.append('/');
- // }
- // sbQuery.append("element(*," + MediaConfigurationManager.NT_MEDIA + ")");
- // List<String> clauses = new ArrayList<String>();
- // if (StringUtils.isNotBlank(search))
- // {
- // clauses.add("jcr:contains(.,'" + StringUtils.replace(search, "'", "''") + "')");
- // }
- // if (StringUtils.isNotBlank(type))
- // {
- // clauses.add("@type='" + type + "'");
- // }
- // if (!clauses.isEmpty())
- // {
- // sbQuery.append('[').append(StringUtils.join(clauses, " and ")).append(']');
- // }
- // if (StringUtils.isNotBlank(search))
- // {
- // sbQuery.append(" order by @jcr:score descending");
- // }
- // Query q = qm.createQuery(new String(sbQuery), Query.XPATH);
- // QueryResult qr = q.execute();
- // return qr.getContent(MediaConfigurationManager.MGNL_MEDIA_TYPE);
- // }
-
- /**
- * Get the type configuration for a media
- * @param media media
- * @return type configuration
- */
- public MediaTypeConfiguration getMediaTypeConfigurationFromMedia(Node media)
- {
- try
- {
- if (!StringUtils.equals(media.getPrimaryNodeType().getName(), MGNL_MEDIA_TYPE))
- {
- return null;
- }
- }
- catch (RepositoryException e)
- {
- log.error("Error getting item type on node {} module media", NodeUtil.getPathIfPossible(media), e);
- return null;
- }
-
- return types.get(PropertyUtil.getString(media, "type"));
- }
-
- /**
- * Get uri mapping for repo
- * @return uri mapping for repo
- */
- public String getURIMappingPrefix()
- {
- Collection<URI2RepositoryMapping> mappings = Components.getComponent(URI2RepositoryManager.class).getMappings();
- for (URI2RepositoryMapping mapping : mappings)
- {
- if (mapping.getRepository().equals(MediaModule.REPO))
- {
- return mapping.getURIPrefix();
- }
- }
- return StringUtils.EMPTY;
- }
+ MediaTypeConfiguration getMediaHandlerFromExtension(String extension);
}
Modified: magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaUsedInManager.java
===================================================================
--- magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaUsedInManager.java 2013-10-19 13:13:31 UTC (rev 4387)
+++ magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaUsedInManager.java 2013-10-19 20:58:07 UTC (rev 4388)
@@ -16,190 +16,22 @@
* 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.configuration;
-import info.magnolia.cms.core.MgnlNodeType;
-import info.magnolia.content2bean.Content2BeanException;
-import info.magnolia.jcr.RuntimeRepositoryException;
-import info.magnolia.jcr.util.NodeUtil;
-import info.magnolia.objectfactory.Components;
-import info.magnolia.repository.RepositoryConstants;
-import it.openutils.mgnlutils.api.NodeUtilsExt;
-import it.openutils.mgnlutils.api.ObservedManagerAdapter;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
import java.util.Map;
-import java.util.Set;
-import javax.inject.Singleton;
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.query.InvalidQueryException;
-
import net.sourceforge.openutils.mgnlcriteria.jcr.query.AdvancedResult;
-import net.sourceforge.openutils.mgnlcriteria.jcr.query.Criteria;
-import net.sourceforge.openutils.mgnlcriteria.jcr.query.JCRCriteriaFactory;
-import net.sourceforge.openutils.mgnlcriteria.jcr.query.criterion.Order;
-import net.sourceforge.openutils.mgnlcriteria.jcr.query.criterion.Restrictions;
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
/**
- * @author dschivo
+ * @author fgiust
* @version $Id$
*/
-@Singleton
-public class MediaUsedInManager extends ObservedManagerAdapter
+public interface MediaUsedInManager
{
- public static MediaUsedInManager getInstance()
- {
- return Components.getComponent(MediaUsedInManager.class);
- }
+ Map<String, AdvancedResult> getUsedIn(String mediaUUID);
- private static Logger log = LoggerFactory.getLogger(MediaUsedInManager.class);
+ AdvancedResult getUsedInWorkspace(String mediaUUID, String workspaceName);
- private Map<String, UsedInWorkspace> usedInWorkspaceMap = new HashMap<String, UsedInWorkspace>();
-
- /**
- * {@inheritDoc}
- */
- @Override
- protected void onClear()
- {
- usedInWorkspaceMap.clear();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- protected void onRegister(Node node)
- {
-
- Iterable<Node> uiwNodes;
- try
- {
- uiwNodes = NodeUtil.getNodes(node, MgnlNodeType.NT_CONTENTNODE);
- }
- catch (RepositoryException e)
- {
- throw new RuntimeRepositoryException(e);
- }
-
- for (Node uiwNode : uiwNodes)
- {
- try
- {
- UsedInWorkspace uiw = (UsedInWorkspace) NodeUtilsExt.toBean(uiwNode, UsedInWorkspace.class);
- if (StringUtils.isEmpty(uiw.getWorkspaceName()))
- {
- uiw.setWorkspaceName(NodeUtil.getName(uiwNode));
- }
- if (StringUtils.isEmpty(uiw.getNodeType()))
- {
- uiw.setNodeType(MgnlNodeType.NT_CONTENT);
- }
- usedInWorkspaceMap.put(uiw.getWorkspaceName(), uiw);
- }
- catch (Content2BeanException e)
- {
- log.error("Error getting media used-in for {}", NodeUtil.getPathIfPossible(uiwNode), e);
- }
- }
- }
-
- /**
- * @param mediaUUID
- * @return
- * @throws InvalidQueryException
- * @throws RepositoryException
- */
- public Map<String, List<String>> getUsedInPaths(String mediaUUID) throws InvalidQueryException, RepositoryException
- {
- Map<String, List<String>> map = new HashMap<String, List<String>>(usedInWorkspaceMap.size());
- for (String workspaceName : usedInWorkspaceMap.keySet())
- {
- map.put(workspaceName, getUsedInWorkspacePaths(mediaUUID, workspaceName));
- }
- return map;
- }
-
- public List<String> getUsedInWorkspacePaths(String mediaUUID, String workspaceName) throws InvalidQueryException,
- RepositoryException
- {
- UsedInWorkspace uiw = usedInWorkspaceMap.get(workspaceName);
- if (uiw == null)
- {
- if (RepositoryConstants.WEBSITE.equals(workspaceName) && usedInWorkspaceMap.isEmpty())
- {
- // backward compatibility
- uiw = UsedInWorkspace.DEFAULT_WEBSITE;
- }
- else
- {
- return Collections.emptyList();
- }
- }
- List<Node> nodes = getUsedInWorkspaceNodes(mediaUUID, uiw);
- List<String> paths = new ArrayList<String>(nodes.size());
- for (Node node : nodes)
- {
- paths.add(node.getPath());
- }
- return paths;
- }
-
- private static List<Node> getUsedInWorkspaceNodes(String mediaUUID, UsedInWorkspace uiw)
- throws InvalidQueryException, RepositoryException
- {
- List<Node> nodes = new ArrayList<Node>();
- Set<String> handles = new HashSet<String>();
-
- String basepath = "/jcr:root" + StringUtils.defaultString(uiw.getBasePath());
-
- if (!StringUtils.endsWith(basepath, "/"))
- {
- basepath = basepath + "/";
- }
- basepath = basepath + "/*";
-
- Criteria criteria = JCRCriteriaFactory
- .createCriteria()
- .setWorkspace(uiw.getWorkspaceName())
- .setBasePath(basepath)
- .add(Restrictions.contains(uiw.getPropertyName(), mediaUUID))
- .add(Restrictions.not(Restrictions.eq("@jcr:primaryType", "nt:frozenNode")))
- .addOrder(Order.desc("@jcr:score"));
-
- AdvancedResult result = criteria.execute();
-
- log.debug("{} > {}", criteria.toXpathExpression(), result.getTotalSize());
-
- for (Node item : result.getItems())
- {
- while (!StringUtils.equals(item.getPrimaryNodeType().getName(), uiw.getNodeType()) && item.getDepth() > 1)
- {
- item = item.getParent();
- }
-
- if (StringUtils.equals(item.getPrimaryNodeType().getName(), uiw.getNodeType())
- && !handles.contains(item.getPath()))
- {
- nodes.add(item);
- handles.add(item.getPath());
- }
- }
-
- return nodes;
- }
-
}
Modified: magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/UsedInWorkspace.java
===================================================================
--- magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/UsedInWorkspace.java 2013-10-19 13:13:31 UTC (rev 4387)
+++ magnoliamodules/trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/UsedInWorkspace.java 2013-10-19 20:58:07 UTC (rev 4388)
@@ -19,10 +19,17 @@
package net.sourceforge.openutils.mgnlmedia.media.configuration;
-import info.magnolia.cms.core.MgnlNodeType;
import info.magnolia.repository.RepositoryConstants;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.lang.builder.ToStringBuilder;
+import org.apache.commons.lang.builder.ToStringStyle;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
/**
* @author dschivo
* @version $Id$
@@ -34,97 +41,72 @@
private String workspaceName;
- private String nodeType = MgnlNodeType.NT_PAGE;
+ private List<String> nodetypes = new ArrayList<String>();
- private String basePath = "/";
+ private String basepath = "/";
- private String propertyName = ".";
+ private List<String> properties = new ArrayList<String>();
- /**
- *
- */
public UsedInWorkspace()
{
}
- /**
- * @param workspaceName
- * @param nodeType
- */
public UsedInWorkspace(String workspaceName)
{
this.workspaceName = workspaceName;
}
- /**
- * Returns...
[truncated message content] |