From: <die...@us...> - 2010-05-12 09:06:53
|
Revision: 2403 http://openutils.svn.sourceforge.net/openutils/?rev=2403&view=rev Author: diego_schivo Date: 2010-05-12 09:06:47 +0000 (Wed, 12 May 2010) Log Message: ----------- MEDIA-92 MediaUsedInManager 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/lifecycle/MediaModule.java Added Paths: ----------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaUsedInManager.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/UsedInWorkspace.java trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.mediausedin.website.xml 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 2010-05-12 08:26:53 UTC (rev 2402) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaConfigurationManager.java 2010-05-12 09:06:47 UTC (rev 2403) @@ -206,42 +206,10 @@ */ public List<String> getUsedInWebPages(String uuid) throws InvalidQueryException, RepositoryException { - return getUsedInWorkspaceNodes(uuid, ContentRepository.WEBSITE, ItemType.CONTENT.getSystemName()); + return MediaUsedInManager.getInstance().getUsedInWorkspacePaths(uuid, ContentRepository.WEBSITE); } /** - * - * @param mediaUUID - * @param repositoryId - * @param nodeType - * @return - * @throws InvalidQueryException - * @throws RepositoryException - */ - protected List<String> getUsedInWorkspaceNodes(String mediaUUID, String repositoryId, String nodeType) - throws InvalidQueryException, RepositoryException - { - List<String> handles = new ArrayList<String>(); - QueryManager qm = MgnlContext.getQueryManager(repositoryId); - - Query q = qm.createQuery("select * from nt:base where contains(., '" + mediaUUID + "')", Query.SQL); - QueryResult qr = q.execute(); - Collection<Content> nodes = qr.getContent(nodeType); - if (nodes != null) - { - for (Content c : nodes) - { - if (!handles.contains(c.getHandle())) - { - handles.add(c.getHandle()); - } - - } - } - return handles; - } - - /** * Get all media nodes of given type in a folder * @param folder folder * @param type media Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaUsedInManager.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaUsedInManager.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaUsedInManager.java 2010-05-12 09:06:47 UTC (rev 2403) @@ -0,0 +1,144 @@ +package net.sourceforge.openutils.mgnlmedia.media.configuration; + +import info.magnolia.cms.beans.config.ContentRepository; +import info.magnolia.cms.beans.config.ObservedManager; +import info.magnolia.cms.core.Content; +import info.magnolia.cms.core.ItemType; +import info.magnolia.cms.core.search.Query; +import info.magnolia.cms.core.search.QueryManager; +import info.magnolia.cms.core.search.QueryResult; +import info.magnolia.content2bean.Content2BeanException; +import info.magnolia.content2bean.Content2BeanUtil; +import info.magnolia.context.MgnlContext; +import info.magnolia.objectfactory.Components; + +import java.util.ArrayList; +import java.util.Collection; +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.jcr.RepositoryException; +import javax.jcr.query.InvalidQueryException; + +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * @author dschivo + * @version $Id$ + */ +public class MediaUsedInManager extends ObservedManager +{ + + public static MediaUsedInManager getInstance() + { + return Components.getSingleton(MediaUsedInManager.class); + } + + private Logger log = LoggerFactory.getLogger(MediaUsedInManager.class); + + private Map<String, UsedInWorkspace> usedInWorkspaceMap = new HashMap<String, UsedInWorkspace>(); + + /** + * {@inheritDoc} + */ + @Override + protected void onClear() + { + usedInWorkspaceMap.clear(); + } + + /** + * {@inheritDoc} + */ + @Override + protected void onRegister(Content node) + { + Collection<Content> uiwNodes = node.getChildren(ItemType.CONTENTNODE); + for (Content uiwNode : uiwNodes) + { + try + { + UsedInWorkspace uiw = (UsedInWorkspace) Content2BeanUtil.toBean(uiwNode, UsedInWorkspace.class); + if (StringUtils.isEmpty(uiw.getRepositoryId())) + { + uiw.setRepositoryId(uiwNode.getName()); + } + if (StringUtils.isEmpty(uiw.getNodeType())) + { + uiw.setNodeType(ItemType.CONTENT.getSystemName()); + } + usedInWorkspaceMap.put(uiw.getRepositoryId(), uiw); + } + catch (Content2BeanException e) + { + log.error("Error getting media used-in for {}", uiwNode.getHandle(), 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 repositoryId : usedInWorkspaceMap.keySet()) + { + map.put(repositoryId, getUsedInWorkspacePaths(mediaUUID, repositoryId)); + } + return map; + } + + public List<String> getUsedInWorkspacePaths(String mediaUUID, String repositoryId) throws InvalidQueryException, + RepositoryException + { + UsedInWorkspace usedIn = usedInWorkspaceMap.get(repositoryId); + if (usedIn == null) + { + return Collections.emptyList(); + } + List<Content> nodes = getUsedInWorkspaceNodes(mediaUUID, usedIn.getRepositoryId(), usedIn.getNodeType()); + List<String> paths = new ArrayList<String>(nodes.size()); + for (Content node : nodes) + { + paths.add(node.getHandle()); + } + return paths; + } + + private static List<Content> getUsedInWorkspaceNodes(String mediaUUID, String repositoryId, String nodeType) + throws InvalidQueryException, RepositoryException + { + List<Content> nodes = new ArrayList<Content>(); + Set<String> handles = new HashSet<String>(); + + QueryManager qm = MgnlContext.getQueryManager(repositoryId); + Query q = qm.createQuery("select * from nt:base where contains(., '" + mediaUUID + "')", Query.SQL); + QueryResult qr = q.execute(); + Collection<Content> qrNodes = qr.getContent(nodeType); + if (qrNodes != null) + { + for (Content c : qrNodes) + { + if (!handles.contains(c.getHandle())) + { + nodes.add(c); + handles.add(c.getHandle()); + } + + } + } + return nodes; + } + +} Property changes on: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaUsedInManager.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/UsedInWorkspace.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/UsedInWorkspace.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/UsedInWorkspace.java 2010-05-12 09:06:47 UTC (rev 2403) @@ -0,0 +1,50 @@ +package net.sourceforge.openutils.mgnlmedia.media.configuration; + +/** + * @author dschivo + * @version $Id$ + */ +public class UsedInWorkspace +{ + + private String repositoryId; + + private String nodeType; + + /** + * Returns the repositoryId. + * @return the repositoryId + */ + public String getRepositoryId() + { + return repositoryId; + } + + /** + * Sets the repositoryId. + * @param repositoryId the repositoryId to set + */ + public void setRepositoryId(String repositoryId) + { + this.repositoryId = repositoryId; + } + + /** + * Returns the nodeType. + * @return the nodeType + */ + public String getNodeType() + { + return nodeType; + } + + /** + * Sets the nodeType. + * @param nodeType the nodeType to set + */ + public void setNodeType(String nodeType) + { + this.nodeType = nodeType; + } + +} Property changes on: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/UsedInWorkspace.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/lifecycle/MediaModule.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/lifecycle/MediaModule.java 2010-05-12 08:26:53 UTC (rev 2402) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/lifecycle/MediaModule.java 2010-05-12 09:06:47 UTC (rev 2403) @@ -19,12 +19,15 @@ package net.sourceforge.openutils.mgnlmedia.media.lifecycle; +import info.magnolia.cms.beans.config.ContentRepository; import info.magnolia.module.ModuleLifecycle; import info.magnolia.module.ModuleLifecycleContext; import info.magnolia.module.ModuleRegistry; import net.sourceforge.openutils.mgnlmedia.media.advancedsearch.configuration.SearchMediaQueryConfiguration; import net.sourceforge.openutils.mgnlmedia.media.configuration.ImageProcessorsManager; import net.sourceforge.openutils.mgnlmedia.media.configuration.MediaConfigurationManager; +import net.sourceforge.openutils.mgnlmedia.media.configuration.MediaUsedInManager; +import net.sourceforge.openutils.mgnlmedia.playlist.PlaylistConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -72,6 +75,7 @@ log.info("Starting module media"); ctx.registerModuleObservingComponent("mediatypes", MediaConfigurationManager.getInstance()); ctx.registerModuleObservingComponent("processors", ImageProcessorsManager.getInstance()); + ctx.registerModuleObservingComponent("mediausedin", MediaUsedInManager.getInstance()); version = ctx.getCurrentModuleDefinition().getVersion().toString(); } Added: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.mediausedin.website.xml =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.mediausedin.website.xml (rev 0) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.mediausedin.website.xml 2010-05-12 09:06:47 UTC (rev 2403) @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<sv:node sv:name="website" xmlns:sv="http://www.jcp.org/jcr/sv/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <sv:property sv:name="jcr:primaryType" sv:type="Name"> + <sv:value>mgnl:contentNode</sv:value> + </sv:property> + <sv:property sv:name="jcr:mixinTypes" sv:type="Name"> + <sv:value>mix:lockable</sv:value> + </sv:property> + <sv:property sv:name="jcr:uuid" sv:type="String"> + <sv:value>94462ffe-1a8b-4f93-955b-c6ec40c65c89</sv:value> + </sv:property> + <sv:property sv:name="nodeType" sv:type="String"> + <sv:value>mgnl:content</sv:value> + </sv:property> + <sv:node sv:name="MetaData"> + <sv:property sv:name="jcr:primaryType" sv:type="Name"> + <sv:value>mgnl:metaData</sv:value> + </sv:property> + <sv:property sv:name="mgnl:authorid" sv:type="String"> + <sv:value>superuser</sv:value> + </sv:property> + <sv:property sv:name="mgnl:creationdate" sv:type="Date"> + <sv:value>2010-05-12T09:59:19.343+02:00</sv:value> + </sv:property> + <sv:property sv:name="mgnl:lastmodified" sv:type="Date"> + <sv:value>2010-05-12T09:59:44.343+02:00</sv:value> + </sv:property> + </sv:node> +</sv:node> Property changes on: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.mediausedin.website.xml ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |