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

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@29546 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Steven Glover
2011-08-04 12:31:45 +00:00
parent 4b507ee7d8
commit 7d30b7b050
13 changed files with 311 additions and 38 deletions

View File

@@ -43,6 +43,7 @@ import org.alfresco.repo.node.getchildren.GetChildrenCannedQueryFactory;
import org.alfresco.repo.search.QueryParameterDefImpl;
import org.alfresco.repo.security.permissions.PermissionCheckedCollection.PermissionCheckedCollectionMixin;
import org.alfresco.repo.security.permissions.PermissionCheckedValue.PermissionCheckedValueMixin;
import org.alfresco.service.Auditable;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.model.FileExistsException;
@@ -348,19 +349,8 @@ public class FileFolderServiceImpl implements FileFolderService
return results;
}
/* (non-Javadoc)
* @see org.alfresco.service.cmr.model.FileFolderService#list(org.alfresco.service.cmr.repository.NodeRef, boolean, boolean, java.util.Set, org.alfresco.service.cmr.model.PagingSortRequest)
*/
public PagingResults<FileInfo> list(NodeRef contextNodeRef, boolean files, boolean folders, Set<QName> ignoreQNameTypes, List<Pair<QName, Boolean>> sortProps, PagingRequest pagingRequest)
private PagingResults<FileInfo> getPagingResults(PagingRequest pagingRequest, final CannedQueryResults<NodeRef> results)
{
ParameterCheck.mandatory("contextNodeRef", contextNodeRef);
ParameterCheck.mandatory("pagingRequest", pagingRequest);
Set<QName> searchTypeQNames = buildTypes(files, folders, ignoreQNameTypes);
// execute query
final CannedQueryResults<NodeRef> results = listImpl(contextNodeRef, searchTypeQNames, sortProps, pagingRequest);
List<NodeRef> nodeRefs = null;
if (results.getPageCount() > 0)
{
@@ -411,7 +401,43 @@ public class FileFolderServiceImpl implements FileFolderService
{
return totalCount;
}
};
};
}
/* (non-Javadoc)
* @see org.alfresco.service.cmr.model.FileFolderService#list(org.alfresco.service.cmr.repository.NodeRef, boolean, boolean, java.util.Set, org.alfresco.service.cmr.model.PagingSortRequest)
*/
@Auditable(parameters = {"contextNodeRef", "files", "folders", "ignoreTypeQNames", "sortProps", "pagingRequest"})
public PagingResults<FileInfo> list(NodeRef contextNodeRef,
boolean files,
boolean folders,
Set<QName> ignoreTypeQNames,
List<Pair<QName, Boolean>> sortProps,
PagingRequest pagingRequest)
{
ParameterCheck.mandatory("contextNodeRef", contextNodeRef);
ParameterCheck.mandatory("pagingRequest", pagingRequest);
Set<QName> searchTypeQNames = buildTypes(files, folders, ignoreTypeQNames);
// execute query
final CannedQueryResults<NodeRef> results = listImpl(contextNodeRef, null, searchTypeQNames, sortProps, pagingRequest);
return getPagingResults(pagingRequest, results);
}
/* (non-Javadoc)
* @see org.alfresco.service.cmr.model.FileFolderService#list(org.alfresco.service.cmr.repository.NodeRef, boolean, boolean, String, java.util.Set, org.alfresco.service.cmr.model.PagingSortRequest)
*/
public PagingResults<FileInfo> list(NodeRef contextNodeRef, boolean files, boolean folders, String pattern, Set<QName> ignoreQNameTypes, List<Pair<QName, Boolean>> sortProps, PagingRequest pagingRequest)
{
ParameterCheck.mandatory("contextNodeRef", contextNodeRef);
ParameterCheck.mandatory("pagingRequest", pagingRequest);
Set<QName> searchTypeQNames = buildTypes(files, folders, ignoreQNameTypes);
// execute query
final CannedQueryResults<NodeRef> results = listImpl(contextNodeRef, pattern, searchTypeQNames, sortProps, pagingRequest);
return getPagingResults(pagingRequest, results);
}
private CannedQueryResults<NodeRef> listImpl(NodeRef contextNodeRef, boolean files, boolean folders)
@@ -422,18 +448,18 @@ public class FileFolderServiceImpl implements FileFolderService
private CannedQueryResults<NodeRef> listImpl(NodeRef contextNodeRef, Set<QName> searchTypeQNames)
{
return listImpl(contextNodeRef, searchTypeQNames, null, new PagingRequest(defaultListMaxResults, null));
return listImpl(contextNodeRef, null, searchTypeQNames, null, new PagingRequest(defaultListMaxResults, null));
}
// note: similar to getChildAssocs(contextNodeRef, searchTypeQNames) but enables paging features, including max items, sorting etc (with permissions per-applied)
private CannedQueryResults<NodeRef> listImpl(NodeRef contextNodeRef, Set<QName> searchTypeQNames, List<Pair<QName, Boolean>> sortProps, PagingRequest pagingRequest)
private CannedQueryResults<NodeRef> listImpl(NodeRef contextNodeRef, String pattern, Set<QName> searchTypeQNames, 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, searchTypeQNames, null, sortProps, pagingRequest);
GetChildrenCannedQuery cq = (GetChildrenCannedQuery)getChildrenCannedQueryFactory.getCannedQuery(contextNodeRef, pattern, searchTypeQNames, null, sortProps, pagingRequest);
// execute canned query
CannedQueryResults<NodeRef> results = cq.execute();
@@ -453,6 +479,33 @@ 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

@@ -218,7 +218,7 @@ public class FileFolderServiceImplTest extends TestCase
// sanity checks only (see also GetChildrenCannedQueryTest)
PagingRequest pagingRequest = new PagingRequest(100, null);
PagingResults<FileInfo> pagingResults = fileFolderService.list(workingRootNodeRef, true, true, null, null, pagingRequest);
PagingResults<FileInfo> pagingResults = fileFolderService.list(workingRootNodeRef, true, true, null, null, null, pagingRequest);
assertNotNull(pagingResults);
assertFalse(pagingResults.hasMoreItems());
@@ -235,7 +235,7 @@ public class FileFolderServiceImplTest extends TestCase
// empty list if skip count greater than number of results (ALF-7884)
pagingRequest = new PagingRequest(1000, 3, null);
pagingResults = fileFolderService.list(workingRootNodeRef, true, true, null, null, pagingRequest);
pagingResults = fileFolderService.list(workingRootNodeRef, true, true, null, null, null, pagingRequest);
assertNotNull(pagingResults);
assertFalse(pagingResults.hasMoreItems());
@@ -899,9 +899,17 @@ public class FileFolderServiceImplTest extends TestCase
*/
public void testGetType() throws Exception
{
I18NUtil.setContentLocale(Locale.CANADA);
FileFolderServiceType type = fileFolderService.getType(ContentModel.TYPE_FOLDER);
assertEquals("Type incorrect for folder", FileFolderServiceType.FOLDER, type);
Locale savedLocale = I18NUtil.getContentLocaleOrNull();
try
{
I18NUtil.setContentLocale(Locale.CANADA);
FileFolderServiceType type = fileFolderService.getType(ContentModel.TYPE_FOLDER);
assertEquals("Type incorrect for folder", FileFolderServiceType.FOLDER, type);
}
finally
{
I18NUtil.setContentLocale(savedLocale);
}
}
public void testETHREEOH_3088_MoveIntoSelf() throws Exception
@@ -1129,5 +1137,56 @@ public class FileFolderServiceImplTest extends TestCase
assertEquals("cm:modified should not have changed (level too high)",
modifiedTooHigh,
nodeService.getProperty(workingRootNodeRef, ContentModel.PROP_MODIFIED));
}
}
public void testPatterns()
{
// sanity checks only (see also GetChildrenCannedQueryTest)
I18NUtil.setContentLocale(Locale.CANADA);
// test 1
PagingRequest pagingRequest = new PagingRequest(100, null);
PagingResults<FileInfo> pagingResults = fileFolderService.list(workingRootNodeRef, true, true, "L0%", null, null, pagingRequest);
assertNotNull(pagingResults);
assertFalse(pagingResults.hasMoreItems());
assertNull(pagingResults.getTotalResultCount());
List<FileInfo> files = pagingResults.getPage();
// check
String[] expectedNames = new String[]
{ NAME_L0_FILE_A, NAME_L0_FILE_B, NAME_L0_FOLDER_A, NAME_L0_FOLDER_B, NAME_L0_FOLDER_C };
checkFileList(files, 2, 3, expectedNames);
// test 2
pagingResults = fileFolderService.list(workingRootNodeRef, true, true, "L1%", null, null, pagingRequest);
assertNotNull(pagingResults);
assertFalse(pagingResults.hasMoreItems());
assertNull(pagingResults.getTotalResultCount());
files = pagingResults.getPage();
// check
expectedNames = new String[]
{ };
checkFileList(files, 0, 0, expectedNames);
// test 3
pagingResults = fileFolderService.list(workingRootNodeRef, true, true, "L0%File%", null, null, pagingRequest);
assertNotNull(pagingResults);
assertFalse(pagingResults.hasMoreItems());
assertNull(pagingResults.getTotalResultCount());
files = pagingResults.getPage();
// check
expectedNames = new String[]
{ NAME_L0_FILE_A, NAME_L0_FILE_B };
checkFileList(files, 2, 0, expectedNames);
}
}