diff --git a/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImpl.java b/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImpl.java index 82b742d48d..fa742eff8d 100644 --- a/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImpl.java +++ b/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImpl.java @@ -485,7 +485,7 @@ public class FileFolderServiceImpl implements FileFolderService // This is a folder search only; query = XPATH_QUERY_DEEP_FOLDERS; } - else if(fileSearch && folderSearch) + else if(fileSearch && !folderSearch) { // This is a folder search only; query = XPATH_QUERY_DEEP_FILES; @@ -617,18 +617,22 @@ public class FileFolderServiceImpl implements FileFolderService for (ChildAssociationRef folderRef : folderAssocRefs) { + // Add the folders in the currentDir toSearch.push(folderRef.getChildRef()); + if(folders) { result.add(folderRef.getChildRef()); } - if(files) + } + + if(files) + { + // Add the files in the current dir + List fileAssocRefs = nodeService.getChildAssocs(currentDir, fileTypeQNames); + for (ChildAssociationRef fileRef : fileAssocRefs) { - List fileAssocRefs = nodeService.getChildAssocs(currentDir, fileTypeQNames); - for (ChildAssociationRef fileRef : fileAssocRefs) - { - result.add(fileRef.getChildRef()); - } + result.add(fileRef.getChildRef()); } } } diff --git a/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImplTest.java b/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImplTest.java index f046903d61..a3704377a8 100644 --- a/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImplTest.java +++ b/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImplTest.java @@ -219,11 +219,46 @@ public class FileFolderServiceImplTest extends TestCase public void testDeepFilesAndFoldersSearch() throws Exception { - List files = fileFolderService.search(workingRootNodeRef, "?1-*", true, true, true); - // check - String[] expectedNames = new String[] - { NAME_L1_FOLDER_A, NAME_L1_FOLDER_B, NAME_L1_FILE_A, NAME_L1_FILE_B, NAME_L1_FILE_C }; - checkFileList(files, 3, 2, expectedNames); + // Seach for pattern - + { + List files = fileFolderService.search(workingRootNodeRef, "?1-*", true, true, true); + // check + String[] expectedNames = new String[] + { NAME_L1_FOLDER_A, NAME_L1_FOLDER_B, NAME_L1_FILE_A, NAME_L1_FILE_B, NAME_L1_FILE_C }; + checkFileList(files, 3, 2, expectedNames); + } + + // Search for a particular file + { + List files = fileFolderService.search(workingRootNodeRef, NAME_L1_FILE_B, true, true, true); + // check + String[] expectedNames = new String[] + { NAME_L1_FILE_B }; + checkFileList(files, 1, 0, expectedNames); + } + + // Search for all files with wildcard + { + List files = fileFolderService.search(workingRootNodeRef, "*", true, true, true); + // check + String[] expectedNames = new String[] + { + NAME_CHECK_FOLDER, + NAME_L0_FOLDER_A, + NAME_L0_FOLDER_B, + NAME_L0_FOLDER_C, + NAME_L1_FOLDER_A, + NAME_L1_FOLDER_B, + NAME_CHECK_FILE, + NAME_L0_FILE_A, + NAME_L0_FILE_B, + NAME_L1_FILE_A, + NAME_L1_FILE_B, + NAME_L1_FILE_C + }; + checkFileList(files, 6, 6, expectedNames); + } + } public void testDeepFilesOnlySearch() throws Exception diff --git a/source/java/org/alfresco/service/cmr/model/FileFolderService.java b/source/java/org/alfresco/service/cmr/model/FileFolderService.java index 9885c9c57a..7a6348c5e7 100644 --- a/source/java/org/alfresco/service/cmr/model/FileFolderService.java +++ b/source/java/org/alfresco/service/cmr/model/FileFolderService.java @@ -79,6 +79,9 @@ public interface FileFolderService * Searches for all files and folders with the matching name pattern, * using wildcard characters * and ?. * + * Warning: Please avoid using this method with any "namePattern" other than "*". + * Although it works, its performance is poor, which is why this method is deprecated. + * * @param contextNodeRef the context of the search. This node will never be returned * as part of the search results. * @param namePattern the name of the file or folder to search for, or a @@ -88,6 +91,9 @@ public interface FileFolderService * @return Returns a list of file or folder matches * * @see #search(NodeRef, String, boolean, boolean, boolean) + * @deprecated for shallow search use list, listFolders, listFiles, searchSimple, alternatives + * for deep search will be provided in later releases. Avoid calling this method with any + * name pattern except for "*". */ @Auditable(key = Auditable.Key.ARG_0, parameters = {"contextNodeRef", "namePattern", "includeSubFolders"}) public List search( @@ -97,7 +103,10 @@ public interface FileFolderService /** * Perform a search against the name of the files or folders within a hierarchy. - * Wildcard characters are * and ?. + * Wildcard characters are * and ?. + * + * Warning: Please avoid using this method with any "namePattern" other than "*". + * Although it works, its performance is poor which is why this method is deprecated. * * @param contextNodeRef the context of the search. This node will never be returned * as part of the search results. @@ -108,6 +117,9 @@ public interface FileFolderService * @param folderSearch true if folder types are to be included in the search results * @param includeSubFolders true to search the entire hierarchy below the search context * @return Returns a list of file or folder matches + * @deprecated for shallow search use list, listFolders, listFiles, searchSimple, alternatives + * for deep search will be provided in later releases. Avoid calling this method with any + * name pattern except for "*". */ @Auditable(key = Auditable.Key.ARG_0, parameters = {"contextNodeRef", "namePattern", "fileSearch", "folderSearch", "includeSubFolders"}) public List search(