From 5a8ff3dfc12c903b7cc1ca58a06f4a8edf3ba44f Mon Sep 17 00:00:00 2001 From: Steven Glover Date: Mon, 8 Aug 2011 10:45:14 +0000 Subject: [PATCH] ALF-9086 "RINF 52: Lucene Removal: Fix FileFolderService search methods" - FileFolderService can return List or PagingResults git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@29603 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../filefolder/FileFolderServiceImplTest.java | 18 +++ .../filefolder/MLTranslationInterceptor.java | 117 +++++++++++------- 2 files changed, 88 insertions(+), 47 deletions(-) diff --git a/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImplTest.java b/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImplTest.java index efaeaacfd1..e52371ec2b 100644 --- a/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImplTest.java +++ b/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImplTest.java @@ -212,6 +212,24 @@ public class FileFolderServiceImplTest extends TestCase { 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); } + + public void testShallowFilesAndFoldersListWithLocale() throws Exception + { + Locale savedLocale = I18NUtil.getContentLocaleOrNull(); + try + { + I18NUtil.setContentLocale(Locale.CANADA); + List files = fileFolderService.list(workingRootNodeRef); + // 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); + } + finally + { + I18NUtil.setContentLocale(savedLocale); + } + } public void testListPage() throws Exception { diff --git a/source/java/org/alfresco/repo/model/filefolder/MLTranslationInterceptor.java b/source/java/org/alfresco/repo/model/filefolder/MLTranslationInterceptor.java index 9ecf420e27..c10f28ec2d 100644 --- a/source/java/org/alfresco/repo/model/filefolder/MLTranslationInterceptor.java +++ b/source/java/org/alfresco/repo/model/filefolder/MLTranslationInterceptor.java @@ -27,6 +27,7 @@ import java.util.Map; import java.util.Set; import org.springframework.extensions.surf.util.I18NUtil; +import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; import org.alfresco.query.PagingResults; import org.alfresco.service.cmr.ml.MultilingualContentService; @@ -196,6 +197,62 @@ public class MLTranslationInterceptor implements MethodInterceptor return translatedFileInfo; } + private List processList(List fileInfos) + { + // Compile a set to ensure we don't get duplicates + Map translatedFileInfos = new HashMap(17); + for (FileInfo fileInfo : fileInfos) + { + FileInfo translatedFileInfo = getTranslatedFileInfo(fileInfo); + // Add this to the set + translatedFileInfos.put(fileInfo, translatedFileInfo); + } + // Convert the set back to a list + List orderedResults = new ArrayList(fileInfos.size()); + Set alreadyPresent = new HashSet(fileInfos.size() * 2 + 1); + for (FileInfo info : fileInfos) + { + FileInfo translatedFileInfo = translatedFileInfos.get(info); + if (alreadyPresent.contains(translatedFileInfo)) + { + // We've done this one + continue; + } + alreadyPresent.add(translatedFileInfo); + orderedResults.add(translatedFileInfo); + } + return orderedResults; + } + + private PagingResults processPagingResults(final PagingResults fileInfos) + { + final List orderedResults = processList(fileInfos.getPage()); + PagingResults orderedPagingResults = new PagingResults() + { + @Override + public String getQueryExecutionId() + { + return fileInfos.getQueryExecutionId(); + } + @Override + public List getPage() + { + return orderedResults; + } + @Override + public boolean hasMoreItems() + { + return fileInfos.hasMoreItems(); + } + @Override + public Pair getTotalResultCount() + { + return fileInfos.getTotalResultCount(); + } + }; + return orderedPagingResults; + } + @SuppressWarnings("unchecked") public Object invoke(MethodInvocation invocation) throws Throwable { @@ -209,53 +266,19 @@ public class MLTranslationInterceptor implements MethodInterceptor } else if (METHOD_NAMES_LIST.contains(methodName)) { - final PagingResults fileInfos = (PagingResults) invocation.proceed(); - // Compile a set to ensure we don't get duplicates - Map translatedFileInfos = new HashMap(17); - for (FileInfo fileInfo : fileInfos.getPage()) - { - FileInfo translatedFileInfo = getTranslatedFileInfo(fileInfo); - // Add this to the set - translatedFileInfos.put(fileInfo, translatedFileInfo); - } - // Convert the set back to a PagingResults - final List orderedResults = new ArrayList(fileInfos.getPage().size()); - PagingResults orderedPagingResults = new PagingResults() - { - @Override - public String getQueryExecutionId() - { - return fileInfos.getQueryExecutionId(); - } - @Override - public List getPage() - { - return orderedResults; - } - @Override - public boolean hasMoreItems() - { - return fileInfos.hasMoreItems(); - } - @Override - public Pair getTotalResultCount() - { - return fileInfos.getTotalResultCount(); - } - }; - Set alreadyPresent = new HashSet(fileInfos.getPage().size() * 2 + 1); - for (FileInfo info : fileInfos.getPage()) - { - FileInfo translatedFileInfo = translatedFileInfos.get(info); - if (alreadyPresent.contains(translatedFileInfo)) - { - // We've done this one - continue; - } - alreadyPresent.add(translatedFileInfo); - orderedResults.add(translatedFileInfo); - } - ret = orderedPagingResults; + Object result = invocation.proceed(); + if(result instanceof List) + { + return processList((List)result); + } + else if(result instanceof PagingResults) + { + return processPagingResults((PagingResults)result); + } + else + { + throw new ClassCastException("Unexpected return type from method " + methodName + " in " + this); + } } else if (METHOD_NAMES_SINGLE.contains(methodName)) {