Skip to content
Snippets Groups Projects
Commit 3036127e authored by anttil's avatar anttil
Browse files

SSDM-1813: Return all the files in a dataset instead of only the ones in the...

SSDM-1813: Return all the files in a dataset instead of only the ones in the root folder. Improve tests.

SVN: 34286
parent c65c949a
No related branches found
No related tags found
No related merge requests found
......@@ -17,12 +17,15 @@ package ch.ethz.sis.openbis.generic.dss.api.v3;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.collections.iterators.IteratorChain;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
......@@ -65,7 +68,6 @@ public class DataStoreServerApi extends AbstractDssServiceRpc<IDataStoreServerAp
/**
* Logger with {@link LogCategory#OPERATION} with name of the concrete class, needs to be static for our purpose.
*/
@SuppressWarnings("hiding")
protected static Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION,
DataStoreServerApi.class);
......@@ -127,7 +129,6 @@ public class DataStoreServerApi extends AbstractDssServiceRpc<IDataStoreServerAp
if (iSearchCriterion instanceof DataSetSearchCriterion)
{
List<DataSet> dataSets = as.searchDataSets(sessionToken, (DataSetSearchCriterion) iSearchCriterion, new DataSetFetchOptions());
System.err.println(dataSets.size());
HashSet<String> codes = new HashSet<String>();
for (DataSet dataSet : dataSets)
{
......@@ -150,8 +151,7 @@ public class DataStoreServerApi extends AbstractDssServiceRpc<IDataStoreServerAp
for (String code : resultDataSets)
{
IHierarchicalContent content = getHierarchicalContentProvider(sessionToken).asContent(code);
List<IHierarchicalContentNode> nodes = content.listMatchingNodes("");
for (IHierarchicalContentNode node : nodes)
for (IHierarchicalContentNode node : iterate(content.getRootNode()))
{
DataSetFile file = new DataSetFile();
file.setFileName(node.getFile().getPath());
......@@ -162,6 +162,27 @@ public class DataStoreServerApi extends AbstractDssServiceRpc<IDataStoreServerAp
return result;
}
private Iterable<IHierarchicalContentNode> iterate(final IHierarchicalContentNode node)
{
return new Iterable<IHierarchicalContentNode>()
{
@Override
public Iterator<IHierarchicalContentNode> iterator()
{
IteratorChain<IHierarchicalContentNode> chain = new IteratorChain<>(Collections.singleton(node).iterator());
if (node.isDirectory())
{
for (IHierarchicalContentNode child : node.getChildNodes())
{
chain.addIterator(iterate(child).iterator());
}
}
return chain;
}
};
}
@Override
public int getMajorVersion()
{
......
package ch.ethz.sis.openbis.generic.dss.systemtest.api.v3;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import java.io.File;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
import org.testng.annotations.Test;
import ch.ethz.sis.openbis.generic.dss.api.v3.IDataStoreServerApi;
import ch.ethz.sis.openbis.generic.dss.api.v3.dto.entity.datasetfile.DataSetFile;
import ch.ethz.sis.openbis.generic.dss.api.v3.dto.search.FileSearchCriterion;
import ch.systemsx.cisd.common.filesystem.FileUtilities;
import ch.systemsx.cisd.common.test.AssertionUtil;
import ch.systemsx.cisd.openbis.datastoreserver.systemtests.SystemTestCase;
import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider;
import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService;
......@@ -38,9 +47,15 @@ public class SearchFileTest extends SystemTestCase
String dataSetCode = UUID.randomUUID().toString().toUpperCase();
File dataSetDir = new File(workingDirectory, dataSetCode);
dataSetDir.mkdirs();
FileUtilities.writeToFile(new File(dataSetDir, "file1.txt"), "hello world");
FileUtilities.writeToFile(new File(dataSetDir, "file2.txt"), "hello world");
Set<String> directories = new HashSet<>(Arrays.asList("subdir1", "subdir1/subdir2", "subdir3"));
createDirectories(dataSetDir, directories);
Set<String> files =
new HashSet<>(Arrays.asList("file1.txt", "file2.txt", "subdir1/file3.txt", "subdir1/file4.txt", "subdir1/subdir2/file5.txt",
"subdir3/file6.txt"));
createFiles(dataSetDir, files);
moveFileToIncoming(dataSetDir);
waitUntilDataSetImported();
waitUntilIndexUpdaterIsIdle();
......@@ -53,7 +68,79 @@ public class SearchFileTest extends SystemTestCase
sc.withDataSet().withPermId().thatEquals(dataSetCode);
List<DataSetFile> searchFiles = dss.searchFiles(sessionToken, sc);
AssertionUtil.assertSize(searchFiles, 1);
files.addAll(directories);
assertThat(searchFiles, containsAll(files));
/* directory structure [dataset id]/original/[root folder] */
assertThat(searchFiles.size(), is(files.size() + 3));
}
private void createDirectories(File dataSetDir, Set<String> directories)
{
for (String dir : directories)
{
new File(dataSetDir, dir).mkdirs();
}
}
private void createFiles(File dataSetDir, Collection<String> paths)
{
for (String path : paths)
{
File f = new File(dataSetDir, path);
FileUtilities.writeToFile(f, "file content of " + f.getPath());
}
}
public static Matcher<Collection<DataSetFile>> containsAll(Collection<String> files)
{
return new CollectionContainsFilesMatcher(files);
}
public static class CollectionContainsFilesMatcher extends TypeSafeMatcher<Collection<DataSetFile>>
{
private final Collection<String> files;
public CollectionContainsFilesMatcher(Collection<String> files)
{
this.files = files;
}
@Override
public void describeTo(Description description)
{
description.appendText("A collection containing at least these elements:");
for (String file : files)
{
description.appendText(file + " ");
}
}
@Override
protected boolean matchesSafely(Collection<DataSetFile> elements)
{
for (String file : files)
{
if (fileInElements(file, elements) == false)
{
return false;
}
}
return true;
}
private boolean fileInElements(String file, Collection<DataSetFile> elements)
{
for (DataSetFile dsf : elements)
{
if (dsf.getFileName().endsWith(file))
{
return true;
}
}
return false;
}
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment