/*
* $Id$
*
* Copyright 2008 Glencoe Software, Inc. All rights reserved.
* Use is subject to license terms supplied in LICENSE.txt
*/
package ome.server.itests.query.pojos;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import ome.model.IObject;
import ome.model.annotations.CommentAnnotation;
import ome.model.annotations.CommentAnnotation;
import ome.model.containers.Dataset;
import ome.model.containers.Project;
import ome.model.core.Image;
import ome.parameters.Parameters;
import ome.server.itests.AbstractManagedContextTest;
import ome.services.query.PojosLoadHierarchyQueryDefinition;
import org.testng.annotations.Test;
/**
* This class is marked "2" since because the other version is failing due to
* issues with CreatePojosFixture
*
* @author josh
*
*/
@Test
public class LoadContainersQuery2Test extends AbstractManagedContextTest {
PojosLoadHierarchyQueryDefinition q;
List list;
List level2cg;
List level2p;
List level1c;
List level1ds;
List level0img;
Parameters po10000;
Parameters filterForUser;
Parameters noFilter;
public void testQueryReturnsCounts() throws Exception {
Dataset d = createDataset();
long self = iAdmin.getEventContext().getCurrentUserId();
Set<IObject> ds = iContainer.loadContainerHierarchy(Dataset.class,
Collections.singleton(d.getId()), null);
d = (Dataset) ds.iterator().next();
assertNotNull(d.getAnnotationLinksCountPerOwner());
assertTrue(d.getAnnotationLinksCountPerOwner().get(self).longValue() == 1L);
}
public void testQueryReturnsCountsForTwoLevels() throws Exception {
Dataset d = createDataset();
Project p = new Project("name");
CommentAnnotation t = new CommentAnnotation();
t.setNs("");
t.setTextValue("t");
p.linkDataset(d);
p.linkAnnotation(t);
p = iUpdate.saveAndReturnObject(p);
long self = iAdmin.getEventContext().getCurrentUserId();
Set<IObject> ps = iContainer.loadContainerHierarchy(Project.class,
Collections.singleton(p.getId()), null);
p = (Project) ps.iterator().next();
d = p.linkedDatasetList().get(0);
assertNotNull(p.getAnnotationLinksCountPerOwner());
assertTrue(p.getAnnotationLinksCountPerOwner().get(self).longValue() == 1L);
assertNotNull(d.getAnnotationLinksCountPerOwner());
assertTrue(d.getAnnotationLinksCountPerOwner().get(self).longValue() == 1L);
assertNotNull(d.getImageLinksCountPerOwner());
assertTrue(d.getImageLinksCountPerOwner().get(self).longValue() == 1L);
}
@Test(groups = "ticket:882")
public void testDatasetImageCounts() throws Exception {
Dataset d = createDataset();
Set<IObject> ds = this.iContainer.loadContainerHierarchy(Dataset.class,
Collections.singleton(d.getId()), null);
assertTrue(ds.size() == 1);
d = (Dataset) ds.iterator().next();
assertTrue(d.getImageLinksCountPerOwner() != null);
assertTrue(d.getAnnotationLinksCountPerOwner() != null);
// With leaves
ds = this.iContainer.loadContainerHierarchy(Dataset.class, Collections
.singleton(d.getId()), new Parameters().leaves());
assertTrue(ds.size() == 1);
d = (Dataset) ds.iterator().next();
assertTrue(d.getImageLinksCountPerOwner() != null);
assertTrue(d.getAnnotationLinksCountPerOwner() != null);
Image i = d.linkedImageIterator().next();
assertTrue(i.toString(), i.getAnnotationLinksCountPerOwner() != null);
}
@Test(groups = "ticket:907")
public void testRootDatasetAlwaysLoadsLeaves() throws Exception {
Dataset d = createDataset();
// with leaves
Set<IObject> ds = this.iContainer.loadContainerHierarchy(Dataset.class,
Collections.singleton(d.getId()), new Parameters().leaves());
assertTrue(ds.size() == 1);
assertTrue(((Dataset)ds.iterator().next()).sizeOfImageLinks() == 1);
// without leaves
ds = this.iContainer.loadContainerHierarchy(Dataset.class, Collections
.singleton(d.getId()), new Parameters().noLeaves());
assertTrue(ds.size() == 1);
assertTrue(((Dataset)ds.iterator().next()).sizeOfImageLinks() < 0);
}
@Test(groups = {"ticket:1223", "longrunning"})
public void testStackOverflowWithLotsOfDatasets() throws Exception {
loginNewUser();
long uid = iAdmin.getEventContext().getCurrentUserId();
for (int i = 0; i < 10; i++) {
// Project with dataset
Project p = new Project("stackoverflow: 1223");
for (int j = 0; j < 1000; j++) {
Dataset d = new Dataset("stackoverflow: 1223");
p.linkDataset(d);
}
iUpdate.saveObject(p);
// Other datasets
Dataset[] ds = new Dataset[1000];
for (int j = 0; j < 1000; j++) {
ds[j] = new Dataset("stackoverflow: 1223");
}
iUpdate.saveArray(ds);
}
// with leaves
Set<IObject> res = this.iContainer.loadContainerHierarchy(Project.class,
null, new Parameters().exp(uid).orphan());
assertEquals(10, res.size());
}
// Helpers
// =======================================
private Dataset createDataset() {
Dataset d = new Dataset("name");
Image i = new Image("name");
CommentAnnotation t = new CommentAnnotation();
t.setNs("");
t.setTextValue("t");
i.linkAnnotation(t);
d.linkImage(i);
d.linkAnnotation(t);
d = iUpdate.saveAndReturnObject(d);
return d;
}
}