Fix for ALF-9086 "RINF 52: Lucene Removal: Fix FileFolderService search methods"

- changed wildcard character to '*'

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@29567 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Steven Glover
2011-08-05 13:31:34 +00:00
parent ee66c4dab2
commit 382ed97a94
7 changed files with 76 additions and 42 deletions

View File

@@ -74,9 +74,36 @@ public class FilterSortNodeEntity
return pattern;
}
protected String escape(String s, char escapeChar)
{
StringBuilder sb = new StringBuilder();
int idx = -1;
int offset = 0;
do
{
idx = s.indexOf(escapeChar, offset);
if(idx != -1)
{
sb.append(s.substring(offset, idx));
sb.append("\\");
sb.append(escapeChar);
offset = idx + 1;
}
}
while(idx != -1);
sb.append(s.substring(offset));
return sb.toString();
}
public void setPattern(String pattern)
{
this.pattern = pattern;
if(pattern != null)
{
// escape the '%' character with '\' (standard SQL escape character)
pattern = escape(pattern, '%');
// replace the wildcard character '*' with the one used in database queries i.e. '%'
this.pattern = pattern.replace('*', '%');
}
}
public Long getNamePropertyQNameId()

View File

@@ -116,6 +116,7 @@ public class GetChildrenCannedQueryFactory extends AbstractCannedQueryFactory<No
* Note: if both filtering and sorting is required then the combined total of unique QName properties should be the 0 to 3.
*
* @param parentRef parent node ref
* @param pattern the pattern to use to filter children (wildcard character is '*')
* @param childTypeQNames type qnames of children nodes (pre-filter)
* @param filterProps filter properties
* @param sortProps sort property pairs (QName and Boolean - true if ascending)

View File

@@ -22,7 +22,6 @@ import java.util.Collections;
import java.util.List;
import java.util.Set;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName;

View File

@@ -545,45 +545,79 @@ public class GetChildrenCannedQueryTest extends TestCase
NodeRef nodeRef2 = createContent(parentNodeRef, "page.component-1-4.user~admin~dashboard.xml", ContentModel.TYPE_CONTENT);
NodeRef nodeRef3 = createContent(parentNodeRef, "page.xml", ContentModel.TYPE_CONTENT);
NodeRef nodeRef4 = createContent(parentNodeRef, "page.component-1-4.user~admin~panel.xml", ContentModel.TYPE_CONTENT);
NodeRef nodeRef5 = createContent(parentNodeRef, "page.component-1-4.user~admin~%dashboard.xml", ContentModel.TYPE_CONTENT);
AuthenticationUtil.popAuthentication();
String pattern = "page.%.user~admin~dashboard.xml";
String pattern = "page.*.user~admin~%dashboard.xml";
PagingResults<NodeRef> results = list(parentNodeRef, -1, -1, 0, pattern, null);
assertFalse(results.hasMoreItems());
int totalCnt = results.getPage().size();
assertTrue(totalCnt == 1);
assertEquals(nodeRef5, results.getPage().get(0));
pattern = "page.*.user~admin~dashboard.xml";
results = list(parentNodeRef, -1, -1, 0, pattern, null);
assertFalse(results.hasMoreItems());
totalCnt = results.getPage().size();
assertTrue(totalCnt == 2);
assertEquals(nodeRef1, results.getPage().get(0));
assertEquals(nodeRef2, results.getPage().get(1));
pattern = "%";
pattern = "*";
results = list(parentNodeRef, -1, -1, 0, pattern, null);
assertFalse(results.hasMoreItems());
totalCnt = results.getPage().size();
assertTrue(totalCnt == 4);
assertTrue(totalCnt == 5);
assertEquals(nodeRef1, results.getPage().get(0));
assertEquals(nodeRef2, results.getPage().get(1));
assertEquals(nodeRef3, results.getPage().get(2));
assertEquals(nodeRef4, results.getPage().get(3));
assertEquals(nodeRef5, results.getPage().get(4));
pattern = "foo%bar";
pattern = "foo*bar";
results = list(parentNodeRef, -1, -1, 0, pattern, null);
assertFalse(results.hasMoreItems());
totalCnt = results.getPage().size();
assertTrue(totalCnt == 0);
assertEquals("", 0, totalCnt);
pattern = "page.%.admin~dashboard.xml";
pattern = "page.*.admin~dashboard.xml";
results = list(parentNodeRef, -1, -1, 0, pattern, null);
assertFalse(results.hasMoreItems());
totalCnt = results.getPage().size();
assertTrue(totalCnt == 0);
assertEquals("", 0, totalCnt);
pattern = "page.*.user~admin~*.xml";
results = list(parentNodeRef, -1, -1, 0, pattern, null);
assertFalse(results.hasMoreItems());
totalCnt = results.getPage().size();
assertEquals("", 4, totalCnt);
pattern = "page.*.user~admin~%*.xml";
results = list(parentNodeRef, -1, -1, 0, pattern, null);
assertFalse(results.hasMoreItems());
totalCnt = results.getPage().size();
assertEquals("", 1, totalCnt);
pattern = "page.*.user~admin~%dashboard.xml";
results = list(parentNodeRef, -1, -1, 0, pattern, null);
assertFalse(results.hasMoreItems());
totalCnt = results.getPage().size();
assertEquals("", 1, totalCnt);
pattern = "page.component-1-4.user~admin~%dashboard.xml";
results = list(parentNodeRef, -1, -1, 0, pattern, null);
assertFalse(results.hasMoreItems());
totalCnt = results.getPage().size();
assertEquals("", 1, totalCnt);
pattern = "page.%.user~admin~%.xml";
results = list(parentNodeRef, -1, -1, 0, pattern, null);
assertFalse(results.hasMoreItems());
totalCnt = results.getPage().size();
assertTrue(totalCnt == 3);
assertEquals("", 0, totalCnt);
}
// test helper method - optional filtering/sorting