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

@@ -479,33 +479,6 @@ public class FileFolderServiceImpl implements FileFolderService
return results;
}
// private CannedQueryResults<NodeRef> listImpl(NodeRef contextNodeRef, String pattern, List<Pair<QName, Boolean>> sortProps, PagingRequest pagingRequest)
// {
// Long start = (logger.isDebugEnabled() ? System.currentTimeMillis() : null);
//
// // get canned query
// GetChildrenCannedQueryFactory getChildrenCannedQueryFactory = (GetChildrenCannedQueryFactory)cannedQueryRegistry.getNamedObject(CANNED_QUERY_FILEFOLDER_LIST);
//
// GetChildrenCannedQuery cq = (GetChildrenCannedQuery)getChildrenCannedQueryFactory.getCannedQuery(contextNodeRef, null, pattern, null, sortProps, pagingRequest);
//
// // execute canned query
// CannedQueryResults<NodeRef> results = cq.execute();
//
// if (start != null)
// {
// int cnt = results.getPagedResultCount();
// int skipCount = pagingRequest.getSkipCount();
// int maxItems = pagingRequest.getMaxItems();
// boolean hasMoreItems = results.hasMoreItems();
// Pair<Integer, Integer> totalCount = (pagingRequest.getRequestTotalCountMax() > 0 ? results.getTotalResultCount() : null);
// int pageNum = (skipCount / maxItems) + 1;
//
// logger.debug("List: "+cnt+" items in "+(System.currentTimeMillis()-start)+" msecs [pageNum="+pageNum+",skip="+skipCount+",max="+maxItems+",hasMorePages="+hasMoreItems+",totalCount="+totalCount+",parentNodeRef="+contextNodeRef+"]");
// }
//
// return results;
// }
public List<FileInfo> listFiles(NodeRef contextNodeRef)
{
// execute the query

View File

@@ -1147,7 +1147,7 @@ public class FileFolderServiceImplTest extends TestCase
// test 1
PagingRequest pagingRequest = new PagingRequest(100, null);
PagingResults<FileInfo> pagingResults = fileFolderService.list(workingRootNodeRef, true, true, "L0%", null, null, pagingRequest);
PagingResults<FileInfo> pagingResults = fileFolderService.list(workingRootNodeRef, true, true, "L0*", null, null, pagingRequest);
assertNotNull(pagingResults);
assertFalse(pagingResults.hasMoreItems());
@@ -1161,7 +1161,7 @@ public class FileFolderServiceImplTest extends TestCase
checkFileList(files, 2, 3, expectedNames);
// test 2
pagingResults = fileFolderService.list(workingRootNodeRef, true, true, "L1%", null, null, pagingRequest);
pagingResults = fileFolderService.list(workingRootNodeRef, true, true, "L1*", null, null, pagingRequest);
assertNotNull(pagingResults);
assertFalse(pagingResults.hasMoreItems());
@@ -1175,7 +1175,7 @@ public class FileFolderServiceImplTest extends TestCase
checkFileList(files, 0, 0, expectedNames);
// test 3
pagingResults = fileFolderService.list(workingRootNodeRef, true, true, "L0%File%", null, null, pagingRequest);
pagingResults = fileFolderService.list(workingRootNodeRef, true, true, "L0*File*", null, null, pagingRequest);
assertNotNull(pagingResults);
assertFalse(pagingResults.hasMoreItems());

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

View File

@@ -73,7 +73,7 @@ public interface FileFolderService
* Lists page of immediate child files and/or folders of the given context node
* with pattern matching and optional filtering (exclusion of certain child file/folder subtypes) and sorting
*
* Pattern uses '%' as a wildcard
* Pattern uses '*' as a wildcard
*
* @since 4.0
*/