|
From: <fg...@us...> - 2011-11-19 21:44:42
|
Revision: 3699
http://openutils.svn.sourceforge.net/openutils/?rev=3699&view=rev
Author: fgiust
Date: 2011-11-19 21:44:36 +0000 (Sat, 19 Nov 2011)
Log Message:
-----------
MEDIA-257 Escape media uuid in MediaUsedInManager
Modified Paths:
--------------
trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaUsedInManager.java
Modified: 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 2011-11-19 21:06:38 UTC (rev 3698)
+++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/configuration/MediaUsedInManager.java 2011-11-19 21:44:36 UTC (rev 3699)
@@ -23,13 +23,9 @@
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.cms.util.FactoryUtil;
import info.magnolia.content2bean.Content2BeanException;
import info.magnolia.content2bean.Content2BeanUtil;
-import info.magnolia.context.MgnlContext;
import java.util.ArrayList;
import java.util.Collection;
@@ -43,6 +39,12 @@
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;
@@ -60,7 +62,7 @@
return (MediaUsedInManager) FactoryUtil.getSingleton(MediaUsedInManager.class);
}
- private Logger log = LoggerFactory.getLogger(MediaUsedInManager.class);
+ private static Logger log = LoggerFactory.getLogger(MediaUsedInManager.class);
private Map<String, UsedInWorkspace> usedInWorkspaceMap = new HashMap<String, UsedInWorkspace>();
@@ -149,31 +151,41 @@
List<Content> nodes = new ArrayList<Content>();
Set<String> handles = new HashSet<String>();
- QueryManager qm = MgnlContext.getQueryManager(uiw.getWorkspaceName());
- Query q = qm.createQuery(
- "select * from nt:base where jcr:path like '"
- + uiw.getBasePath()
- + (StringUtils.endsWith(uiw.getBasePath(), "/") ? StringUtils.EMPTY : "/")
- + "%' and contains("
- + uiw.getPropertyName()
- + ", '"
- + mediaUUID
- + "')",
- Query.SQL);
- QueryResult qr = q.execute();
- Collection<Content> qrNodes = qr.getContent(uiw.getNodeType());
- if (qrNodes != null)
+ String basepath = "/jcr:root" + StringUtils.defaultString(uiw.getBasePath());
+
+ if (!StringUtils.endsWith(basepath, "/"))
{
- for (Content c : qrNodes)
+ 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 (Content item : result.getItems())
+ {
+ // log.debug("{} {}", item.getJCRNode().getPrimaryNodeType().getName(), item.getHandle());
+
+ while (!item.getNodeTypeName().equals(uiw.getNodeType()) && item.getLevel() > 1)
{
- if (!handles.contains(c.getHandle()))
- {
- nodes.add(c);
- handles.add(c.getHandle());
- }
-
+ item = item.getParent();
}
+ if (item.getNodeTypeName().equals(uiw.getNodeType()) && !handles.contains(item.getHandle()))
+ {
+ nodes.add(item);
+ handles.add(item.getHandle());
+ }
}
+
return nodes;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|