From: <fg...@us...> - 2010-01-09 14:01:00
|
Revision: 1617 http://openutils.svn.sourceforge.net/openutils/?rev=1617&view=rev Author: fgiust Date: 2010-01-09 14:00:53 +0000 (Sat, 09 Jan 2010) Log Message: ----------- CRIT-3 Don't generate an invalid Xpath in case of empty expressions Modified Paths: -------------- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/JCRMagnoliaCriteriaQueryTranslator.java trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/impl/MagnoliaCriteriaImpl.java trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/JCRMagnoliaCriteriaQueryTranslator.java =================================================================== --- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/JCRMagnoliaCriteriaQueryTranslator.java 2010-01-09 10:36:17 UTC (rev 1616) +++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/JCRMagnoliaCriteriaQueryTranslator.java 2010-01-09 14:00:53 UTC (rev 1617) @@ -18,13 +18,14 @@ */ package net.sourceforge.openutils.mgnlcriteria.jcr.query; - import java.util.Iterator; import net.sourceforge.openutils.mgnlcriteria.jcr.query.xpath.impl.AbstractCriteriaImpl; import net.sourceforge.openutils.mgnlcriteria.jcr.query.xpath.impl.AbstractMagnoliaCriteriaImpl; +import org.apache.commons.lang.StringUtils; + /** * @author Federico Grilli * @version $Id$ @@ -49,16 +50,25 @@ { StringBuilder condition = new StringBuilder(30); Iterator<AbstractMagnoliaCriteriaImpl.CriterionEntry> criterionIterator = criteria.iterateExpressionEntries(); + + boolean isfirst = true; while (criterionIterator.hasNext()) { AbstractMagnoliaCriteriaImpl.CriterionEntry entry = criterionIterator.next(); String xpathString = entry.getCriterion().toXPathString(entry.getCriteria()); - condition.append(xpathString); - if (criterionIterator.hasNext()) + + if (StringUtils.isNotBlank(xpathString)) { - condition.append(" and "); + if (!isfirst && StringUtils.isNotBlank(xpathString)) + { + condition.append(" and "); + } + + condition.append(xpathString); + isfirst = false; } } + return condition.toString(); } Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/impl/MagnoliaCriteriaImpl.java =================================================================== --- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/impl/MagnoliaCriteriaImpl.java 2010-01-09 10:36:17 UTC (rev 1616) +++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/impl/MagnoliaCriteriaImpl.java 2010-01-09 14:00:53 UTC (rev 1617) @@ -33,9 +33,7 @@ import javax.jcr.RepositoryException; import javax.jcr.query.InvalidQueryException; -import net.sourceforge.openutils.mgnlcriteria.jcr.query.JCRMagnoliaCriteriaQueryTranslator; import net.sourceforge.openutils.mgnlcriteria.jcr.query.JCRQueryException; -import net.sourceforge.openutils.mgnlcriteria.jcr.query.xpath.XPathSelect; /** @@ -63,17 +61,14 @@ public Collection< ? > list() throws JCRQueryException { if (queryManager == null) + { throw new IllegalStateException("QueryManager cannot be null"); + } log.debug("creating statement..."); long start = System.currentTimeMillis(); - JCRMagnoliaCriteriaQueryTranslator translator = new JCRMagnoliaCriteriaQueryTranslator(this); - XPathSelect statement = new XPathSelect(); - statement.setRoot(this.path); - statement.setPredicate(translator.getPredicate()); - statement.setOrderByClause(translator.getOrderBy()); - String stmt = statement.toStatementString(); + String stmt = toXpathExpression(); long stop = System.currentTimeMillis(); log.debug("statement created in {} ms", stop - start); @@ -101,7 +96,7 @@ if (Content.class.isAssignableFrom(classType)) { log.debug("returning a Collection holding objects of type {} ", Content.class.getName()); - retVal = retVal == null ? new ArrayList<Content>(): retVal; + retVal = retVal == null ? new ArrayList<Content>() : retVal; log.debug("got {} node(s) in {} ms", new Object[]{retVal.size(), stop - start }); return retVal; @@ -140,4 +135,5 @@ throw new JCRQueryException(e); } } + } \ No newline at end of file Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java =================================================================== --- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java 2010-01-09 10:36:17 UTC (rev 1616) +++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java 2010-01-09 14:00:53 UTC (rev 1617) @@ -49,6 +49,10 @@ */ public static String escapeIllegalXpathSearchChars(String s) { + if (StringUtils.isEmpty(s)) + { + return s; + } StringBuffer sb = new StringBuffer(); sb.append(s.substring(0, (s.length() - 1))); char c = s.charAt(s.length() - 1); @@ -77,6 +81,10 @@ */ public static String stringToXPathLiteral(String str) { + if (StringUtils.isEmpty(str)) + { + return str; + } // Single quotes needed for jcr:contains() return str.replaceAll("'", "\""); } @@ -90,6 +98,11 @@ */ public static String stringToJCRSearchExp(String str) { + if (StringUtils.isEmpty(str)) + { + return str; + } + // Escape ' and \ everywhere, preceding them with \ except when \ // appears // in one of the combinations \" or \- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |