/*
* Copyright 2006-2013 University of Dundee. All rights reserved.
* Use is subject to license terms supplied in LICENSE.txt
*/
package integration;
import static omero.rtypes.rbool;
import static omero.rtypes.rlong;
import static omero.rtypes.rstring;
import static omero.rtypes.rtime;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.assertTrue;
import static org.testng.AssertJUnit.fail;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.UUID;
import omero.RType;
import omero.api.IAdminPrx;
import omero.api.IQueryPrx;
import omero.api.IUpdatePrx;
import omero.api.ServiceFactoryPrx;
import omero.model.CommentAnnotation;
import omero.model.CommentAnnotationI;
import omero.model.Dataset;
import omero.model.DatasetAnnotationLinkI;
import omero.model.DatasetImageLink;
import omero.model.DatasetImageLinkI;
import omero.model.Experimenter;
import omero.model.ExperimenterGroup;
import omero.model.ExperimenterGroupI;
import omero.model.ExperimenterI;
import omero.model.Fileset;
import omero.model.IObject;
import omero.model.Image;
import omero.model.ImagingEnvironment;
import omero.model.Instrument;
import omero.model.Objective;
import omero.model.ObjectiveSettings;
import omero.model.PermissionsI;
import omero.model.Plate;
import omero.model.PlateAcquisition;
import omero.model.PlateAcquisitionAnnotationLinkI;
import omero.model.PlateAnnotationLinkI;
import omero.model.Project;
import omero.model.ProjectAnnotationLinkI;
import omero.model.ProjectDatasetLink;
import omero.model.ProjectDatasetLinkI;
import omero.model.Screen;
import omero.model.ScreenAnnotationLinkI;
import omero.model.ScreenPlateLink;
import omero.model.ScreenPlateLinkI;
import omero.model.StageLabel;
import omero.sys.EventContext;
import omero.sys.Parameters;
import omero.sys.ParametersI;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import omero.gateway.model.DatasetData;
import omero.gateway.model.ImageData;
import omero.gateway.model.PixelsData;
import omero.gateway.model.PlateAcquisitionData;
import omero.gateway.model.PlateData;
import omero.gateway.model.ProjectData;
import omero.gateway.model.ScreenData;
/**
* Collections of tests for the <code>IContainer</code> service.
*
* @author Josh Moore <a
* href="mailto:josh.moore@gmx.de">josh.moore@gmx.de</a>
* @since 2.0
*/
public class PojosServiceTest extends AbstractServerTest {
/** Reference to class used to create data object. */
CreatePojosFixture2 fixture;
/**
* Makes sure that the pixels set is loaded.
*
* @param pixels
* The pixels to handle.
* @throws Exception
* Thrown if an error occurred.
*/
private void checkPixels(PixelsData pixels) throws Exception {
assertNotNull(pixels);
assertNotNull(pixels.getPixelSizeX(null));
assertNotNull(pixels.getPixelSizeY(null));
assertNotNull(pixels.getPixelSizeZ(null));
assertNotNull(pixels.getPixelType());
assertNotNull(pixels.getImage());
assertNotNull(pixels.getOwner());
assertNotNull(pixels.getSizeC());
assertNotNull(pixels.getSizeT());
assertNotNull(pixels.getSizeZ());
assertNotNull(pixels.getSizeY());
assertNotNull(pixels.getSizeX());
}
/**
* Initializes the various services.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Override
@BeforeClass
protected void setUp() throws Exception {
super.setUp();
fixture = CreatePojosFixture2.withNewUser(root);
fixture.createAllPojos();
}
/**
* Test to load container hierarchy with project specified.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadContainerHierarchyProjectSpecified() throws Exception {
// first create a project
Project p = (Project) iUpdate.saveAndReturnObject(mmFactory
.simpleProjectData().asIObject());
Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
// link the 2
ProjectDatasetLink link = new ProjectDatasetLinkI();
link.setParent(p);
link.setChild(d);
iUpdate.saveAndReturnObject(link);
//
Parameters param = new ParametersI();
List<Long> ids = new ArrayList<Long>();
ids.add(p.getId().getValue());
List results = factory.getContainerService().loadContainerHierarchy(
Project.class.getName(), ids, param);
assertEquals(results.size(), 1);
Iterator i = results.iterator();
ProjectData project;
Set<DatasetData> datasets;
Iterator<DatasetData> j;
DatasetData dataset;
while (i.hasNext()) {
project = new ProjectData((Project) i.next());
assertEquals(project.getId(), p.getId().getValue());
datasets = project.getDatasets();
assertEquals(datasets.size(), 1);
j = datasets.iterator();
while (j.hasNext()) {
dataset = j.next();
assertEquals(dataset.getId(), d.getId().getValue());
}
}
}
/**
* Test to load container hierarchy with screen specified.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadContainerHierarchyScreenSpecified() throws Exception {
// first create a project
Screen p = (Screen) iUpdate.saveAndReturnObject(mmFactory
.simpleScreenData().asIObject());
Plate d = (Plate) iUpdate.saveAndReturnObject(mmFactory
.simplePlateData().asIObject());
// link the 2
ScreenPlateLink link = new ScreenPlateLinkI();
link.setParent(p);
link.setChild(d);
iUpdate.saveAndReturnObject(link);
//
Parameters param = new ParametersI();
List<Long> ids = new ArrayList<Long>();
ids.add(p.getId().getValue());
List results = factory.getContainerService().loadContainerHierarchy(
Screen.class.getName(), ids, param);
assertEquals(results.size(), 1);
Iterator i = results.iterator();
ScreenData screen;
Set<PlateData> plates;
Iterator<PlateData> j;
PlateData plate;
while (i.hasNext()) {
screen = new ScreenData((Screen) i.next());
assertEquals(screen.getId(), p.getId().getValue());
plates = screen.getPlates();
assertEquals(plates.size(), 1);
j = plates.iterator();
while (j.hasNext()) {
plate = j.next();
assertEquals(plate.getId(), d.getId().getValue());
}
}
}
/**
* Test to load container hierarchy with screen specified.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadContainerHierarchyScreenWithPlateAndPlateAcquisitionSpecified()
throws Exception {
// first create a project
Screen p = (Screen) iUpdate.saveAndReturnObject(mmFactory
.simpleScreenData().asIObject());
Plate d = (Plate) iUpdate.saveAndReturnObject(mmFactory
.simplePlateData().asIObject());
PlateAcquisition pa = (PlateAcquisition) mmFactory
.simplePlateAcquisitionData().asIObject();
pa.setPlate(d);
pa = (PlateAcquisition) iUpdate.saveAndReturnObject(pa);
// link the 2
ScreenPlateLink link = new ScreenPlateLinkI();
link.setParent(p);
link.setChild(d);
iUpdate.saveAndReturnObject(link);
Parameters param = new ParametersI();
List<Long> ids = new ArrayList<Long>();
ids.add(p.getId().getValue());
List results = factory.getContainerService().loadContainerHierarchy(
Screen.class.getName(), ids, param);
assertEquals(results.size(), 1);
Iterator i = results.iterator();
ScreenData screen;
Set<PlateData> plates;
Iterator<PlateData> j;
PlateData plate;
while (i.hasNext()) {
screen = new ScreenData((Screen) i.next());
assertEquals(screen.getId(), p.getId().getValue());
plates = screen.getPlates();
assertEquals(plates.size(), 1);
j = plates.iterator();
while (j.hasNext()) {
plate = j.next();
assertEquals(plate.getId(), d.getId().getValue());
}
}
}
/**
* Test to load container hierarchy with no project specified, no orphan
* loaded
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadContainerHierarchyNoProjectSpecified() throws Exception {
// first create a project
long self = factory.getAdminService().getEventContext().userId;
Project p = (Project) iUpdate.saveAndReturnObject(mmFactory
.simpleProjectData().asIObject());
Project p2 = (Project) iUpdate.saveAndReturnObject(mmFactory
.simpleProjectData().asIObject());
ParametersI param = new ParametersI();
param.exp(rlong(self));
List results = factory.getContainerService().loadContainerHierarchy(
Project.class.getName(), new ArrayList(), param);
assertTrue(results.size() > 0);
Iterator i = results.iterator();
int count = 0;
IObject object;
while (i.hasNext()) {
object = (IObject) i.next();
if (!(object instanceof Project)) {
count++;
}
}
assertEquals(count, 0);
}
/**
* Test to load container hierarchy with no screen specified, no orphan
* loaded
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadContainerHierarchyNoScreenSpecified() throws Exception {
// first create a screen
long self = factory.getAdminService().getEventContext().userId;
Screen p = (Screen) iUpdate.saveAndReturnObject(mmFactory
.simpleScreenData().asIObject());
Screen p2 = (Screen) iUpdate.saveAndReturnObject(mmFactory
.simpleScreenData().asIObject());
ParametersI param = new ParametersI();
param.exp(rlong(self));
List results = factory.getContainerService().loadContainerHierarchy(
Screen.class.getName(), new ArrayList(), param);
assertTrue(results.size() > 0);
Iterator i = results.iterator();
int count = 0;
IObject object;
while (i.hasNext()) {
object = (IObject) i.next();
if (!(object instanceof Screen)) {
count++;
}
}
assertEquals(count, 0);
}
/**
* Test to load container hierarchy with project specified, with orphan
* loaded
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadContainerHierarchyNoProjectSpecifiedWithOrphan()
throws Exception {
// first create a project
long self = factory.getAdminService().getEventContext().userId;
Project p = (Project) iUpdate.saveAndReturnObject(mmFactory
.simpleProjectData().asIObject());
Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
Project p2 = (Project) iUpdate.saveAndReturnObject(mmFactory
.simpleProjectData().asIObject());
ParametersI param = new ParametersI();
param.exp(rlong(self));
param.orphan();
List results = factory.getContainerService().loadContainerHierarchy(
Project.class.getName(), new ArrayList(), param);
assertTrue(results.size() > 0);
Iterator i = results.iterator();
IObject object;
int value = 0;
while (i.hasNext()) {
object = (IObject) i.next();
if (object instanceof Dataset) {
if (object.getId().getValue() == d.getId().getValue()) {
value++;
}
}
}
assertEquals(value, 1);
}
/**
* Test to load container hierarchy with project specified, with orphan
* loaded
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadContainerHierarchyNoScreenSpecifiedWithOrphan()
throws Exception {
// first create a project
long self = factory.getAdminService().getEventContext().userId;
Screen p = (Screen) iUpdate.saveAndReturnObject(mmFactory
.simpleScreenData().asIObject());
Plate d = (Plate) iUpdate.saveAndReturnObject(mmFactory
.simplePlateData().asIObject());
ParametersI param = new ParametersI();
param.exp(rlong(self));
param.orphan();
List results = factory.getContainerService().loadContainerHierarchy(
Screen.class.getName(), new ArrayList(), param);
assertTrue(results.size() > 0);
Iterator i = results.iterator();
IObject object;
int value = 0;
while (i.hasNext()) {
object = (IObject) i.next();
if (object instanceof Plate) {
if (object.getId().getValue() == d.getId().getValue()) {
value++;
}
}
}
assertEquals(value, 1);
}
/**
* Test to load container hierarchy with dataset specified and loads the
* images.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadContainerHierarchyDatasetSpecifiedAndLeaves()
throws Exception {
Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
Image img = (Image) iUpdate.saveAndReturnObject(mmFactory
.simpleImage());
// link the 2
DatasetImageLink link = new DatasetImageLinkI();
link.setParent(d);
link.setChild(img);
iUpdate.saveAndReturnObject(link);
ParametersI param = new ParametersI();
param.leaves();
List<Long> ids = new ArrayList<Long>();
ids.add(d.getId().getValue());
List results = factory.getContainerService().loadContainerHierarchy(
Dataset.class.getName(), ids, param);
assertEquals(results.size(), 1);
Iterator i = results.iterator();
DatasetData dataset;
Set<ImageData> images;
Iterator<ImageData> j;
ImageData image;
while (i.hasNext()) {
dataset = new DatasetData((Dataset) i.next());
if (dataset.getId() == d.getId().getValue()) {
images = dataset.getImages();
assertEquals(images.size(), 1);
j = images.iterator();
while (j.hasNext()) {
image = j.next();
assertNotNull(image.asImage().getDetails().getUpdateEvent());
assertTrue(image.asImage().getDetails().getUpdateEvent()
.isLoaded());
assertEquals(image.getId(), img.getId().getValue());
}
}
}
}
/**
* Test to load container hierarchy with dataset specified and loads the
* images. We then make sure that the default pixels are loaded.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test(groups = { "ticket:401", "ticket:221" })
public void testLoadContainerHierarchyDatasetSpecifiedAndLeavesWithDefaultPixels()
throws Exception {
Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
Image img = (Image) iUpdate
.saveAndReturnObject(mmFactory.createImage());
// link the 2
DatasetImageLink link = new DatasetImageLinkI();
link.setParent(d);
link.setChild(img);
iUpdate.saveAndReturnObject(link);
ParametersI param = new ParametersI();
param.leaves();
List<Long> ids = new ArrayList<Long>();
ids.add(d.getId().getValue());
List results = factory.getContainerService().loadContainerHierarchy(
Dataset.class.getName(), ids, param);
assertEquals(results.size(), 1);
Iterator i = results.iterator();
DatasetData dataset;
Set<ImageData> images;
Iterator<ImageData> j;
ImageData image;
PixelsData pixelsData;
while (i.hasNext()) {
dataset = new DatasetData((Dataset) i.next());
if (dataset.getId() == d.getId().getValue()) {
images = dataset.getImages();
assertEquals(images.size(), 1);
j = images.iterator();
while (j.hasNext()) {
image = j.next();
checkPixels(image.getDefaultPixels());
}
}
}
}
/**
* Test to the collection count method.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testCollectionCountForDataset() throws Exception {
Dataset d1 = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
Dataset d2 = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
Image i = (Image) iUpdate.saveAndReturnObject(mmFactory.simpleImage());
// link the d and i
DatasetImageLink link = new DatasetImageLinkI();
link.setParent(d1);
link.setChild(i);
iUpdate.saveAndReturnObject(link);
Parameters p = new ParametersI();
List<Long> ids = new ArrayList<Long>();
ids.add(d1.getId().getValue());
ids.add(d2.getId().getValue());
Map m = factory.getContainerService().getCollectionCount(
Dataset.class.getName(),
DatasetData.IMAGE_LINKS, ids, p);
Long v = (Long) m.get(d1.getId().getValue());
assertEquals(v.longValue(), 1);
v = (Long) m.get(d2.getId().getValue());
assertEquals(v.longValue(), 0);
}
/**
* Tests the retrieval of images filtering by owners.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test(groups = "ticket:318")
public void testGetImagesByOwner() throws Exception {
Image i1 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
DatasetImageLink link = new DatasetImageLinkI();
link.setParent(d);
link.setChild(i1);
iUpdate.saveAndReturnObject(link);
ParametersI param = new ParametersI();
List<Long> ids = new ArrayList<Long>(1);
ids.add(d.getId().getValue());
List<Image> images = factory.getContainerService().getImages(Dataset.class.getName(), ids,
param);
assertTrue(images.size() > 0);
Iterator<Image> i = images.iterator();
Image img;
int count = 0;
while (i.hasNext()) {
img = i.next();
if (img.getId().getValue() == i1.getId().getValue())
count++;
}
assertEquals(count, 1);
param = new ParametersI();
param.exp(rlong(fixture.e.getId().getValue()));
images = factory.getContainerService().getImages(
Dataset.class.getName(), ids, param);
assertEquals(images.size(), 0);
}
/**
* Tests the retrieval of images filtering by owners. Those images will have
* a pixels set.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test(groups = "ticket:318")
public void testGetImagesByOwnerWithPixels() throws Exception {
Image i1 = (Image) iUpdate.saveAndReturnObject(mmFactory.createImage());
Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
DatasetImageLink link = new DatasetImageLinkI();
link.setParent(d);
link.setChild(i1);
iUpdate.saveAndReturnObject(link);
ParametersI param = new ParametersI();
List<Long> ids = new ArrayList<Long>(1);
ids.add(d.getId().getValue());
List<Image> images = factory.getContainerService().getImages(
Dataset.class.getName(), ids, param);
assertTrue(images.size() > 0);
Iterator<Image> i = images.iterator();
Image img;
int count = 0;
PixelsData pixelsData;
while (i.hasNext()) {
img = i.next();
if (img.getId().getValue() == i1.getId().getValue()) {
pixelsData = new PixelsData(img.getPixels(0));
checkPixels(pixelsData);
count++;
}
}
assertEquals(count, 1);
param = new ParametersI();
param.exp(rlong(fixture.e.getId().getValue()));
images = factory.getContainerService().getImages(Dataset.class.getName(),
ids, param);
assertEquals(images.size(), 0);
}
/**
* Links twice a dataset and an image. Only one link should be inserted.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test(groups = "ticket:318")
public void testDuplicateDatasetImageLink() throws Exception {
Image i1 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
DatasetImageLink link = new DatasetImageLinkI();
link.setParent(d);
link.setChild(i1);
iUpdate.saveAndReturnObject(link);
link = new DatasetImageLinkI();
link.setParent(d);
link.setChild(i1);
try {
iUpdate.saveAndReturnObject(link);
fail("Should not be able to insert twice.");
} catch (Exception e) {
}
String sql = "select link from DatasetImageLink as link where "
+ "link.parent.id = :parentID and link.child.id = :childID";
ParametersI param = new ParametersI();
param.map = new HashMap<String, RType>();
param.map.put("parentID", d.getId());
param.map.put("childID", i1.getId());
List l = iQuery.findAllByQuery(sql, param);
assertEquals(l.size(), 1);
}
/**
* Tests the retrieval of images filtering by groups.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test(groups = "ticket:318")
public void testGetImagesByGroup() throws Exception {
// Create 2 groups and add a user
String uuid1 = UUID.randomUUID().toString();
ExperimenterGroup g1 = new ExperimenterGroupI();
g1.setName(rstring(uuid1));
g1.setLdap(rbool(false));
g1.getDetails().setPermissions(new PermissionsI("rw----"));
String uuid2 = UUID.randomUUID().toString();
ExperimenterGroup g2 = new ExperimenterGroupI();
g2.setName(rstring(uuid2));
g2.setLdap(rbool(false));
g2.getDetails().setPermissions(new PermissionsI("rw----"));
IAdminPrx svc = root.getSession().getAdminService();
IQueryPrx query = root.getSession().getQueryService();
long id1 = svc.createGroup(g1);
long id2 = svc.createGroup(g2);
ParametersI p = new ParametersI();
p.addId(id1);
ExperimenterGroup eg1 = (ExperimenterGroup) query.findByQuery(
"select distinct g from ExperimenterGroup g where g.id = :id",
p);
p = new ParametersI();
p.addId(id2);
ExperimenterGroup eg2 = (ExperimenterGroup) query.findByQuery(
"select distinct g from ExperimenterGroup g where g.id = :id",
p);
Experimenter e = new ExperimenterI();
e.setOmeName(rstring(uuid1));
e.setFirstName(rstring("user"));
e.setLastName(rstring("user"));
e.setLdap(rbool(false));
List<ExperimenterGroup> groups = new ArrayList<ExperimenterGroup>();
// method tested elsewhere
groups.add(eg1);
groups.add(eg2);
long uid = newUserInGroupWithPassword(e, groups, uuid1);
svc.setDefaultGroup(svc.getExperimenter(uid), eg1);
omero.client client = new omero.client();
ServiceFactoryPrx f = client.createSession(uuid1, uuid1);
// add an image.
IUpdatePrx update = f.getUpdateService();
Dataset d = (Dataset) update.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
long d1 = d.getId().getValue();
Image image1 = (Image) update.saveAndReturnObject(mmFactory
.simpleImage());
// link the 2
DatasetImageLink link = new DatasetImageLinkI();
link.setParent(d);
link.setChild(image1);
update.saveAndReturnObject(link);
// Change the security context
client.getSession().setSecurityContext(
new ExperimenterGroupI(id2, false));
// add an image.
d = (Dataset) update.saveAndReturnObject(mmFactory.simpleDatasetData()
.asIObject());
long d2 = d.getId().getValue();
Image image2 = (Image) f.getUpdateService().saveAndReturnObject(
mmFactory.simpleImage());
link = new DatasetImageLinkI();
link.setParent(d);
link.setChild(image2);
f.getUpdateService().saveAndReturnObject(link);
List<Long> ids = new ArrayList<Long>();
ids.add(d1);
ids.add(d2);
List<Image> images = f.getContainerService().getImages(
Dataset.class.getName(), ids, p);
assertNotNull(images);
assertEquals(images.size(), 1);
Iterator<Image> i = images.iterator();
// Should only retrieve images from group2
while (i.hasNext()) {
assertEquals(i.next().getId().getValue(), image2.getId().getValue());
}
client.getSession().setSecurityContext(
new ExperimenterGroupI(id1, false));
images = f.getContainerService().getImages(Dataset.class.getName(),
ids, p);
assertNotNull(images);
assertEquals(images.size(), 1);
i = images.iterator();
// Should only retrieve images from group2
while (i.hasNext()) {
assertEquals(i.next().getId().getValue(), image1.getId().getValue());
}
}
/**
* Tests that the pagination works correctly for
* {@link ome.api.IContainer#getImages(Class, Set, ome.parameters.Parameters)}
* .
*
* @throws Exception
* unexpected
*/
@Test(groups = "ticket:9934")
public void testGetImagesPaged() throws Exception {
final int totalNumberOfImages = 12;
/* create a new dataset containing new images */
final long datasetId = iUpdate
.saveAndReturnObject(mmFactory.simpleDatasetData().asIObject())
.getId().getValue();
final List<Long> datasetIdList = Collections
.<Long> singletonList(datasetId);
final Set<Long> imageIds = new HashSet<Long>(totalNumberOfImages);
for (int i = 0; i < totalNumberOfImages; i++) {
final Image image = (Image) iUpdate.saveAndReturnObject(mmFactory
.createImage());
imageIds.add(image.getId().getValue());
final DatasetImageLink dil = new DatasetImageLinkI();
dil.setParent((Dataset) iQuery.find(Dataset.class.getName(),
datasetId));
dil.setChild(image);
iUpdate.saveObject(dil);
}
/* check that the resulting image IDs are unique */
Assert.assertEquals(imageIds.size(), totalNumberOfImages,
"image IDs should be unique");
/*
* try various page sizes, make sure the total results set is as
* expected
*/
for (int pageSize = 1; pageSize < totalNumberOfImages + 2; pageSize++) {
/* note the IDs found by this set of pages */
final Set<Long> imageIdsPaged = new HashSet<Long>(
totalNumberOfImages);
boolean nextIsEmpty = false;
int startImageIndex = 0;
while (true) {
/* per page */
final ParametersI parameters = new ParametersI().page(
startImageIndex, pageSize);
final List<Image> pageOfImages = factory.getContainerService().getImages(
Dataset.class.getName(), datasetIdList, parameters);
if (nextIsEmpty) {
Assert.assertTrue(pageOfImages.isEmpty(),
"expected empty pages after an undersized page");
} else {
nextIsEmpty = pageOfImages.size() < pageSize;
}
if (pageOfImages.isEmpty()) {
break;
}
for (final Image image : pageOfImages) {
Assert.assertTrue(
imageIdsPaged.add(image.getId().getValue()),
"paged query should not return duplicates");
assertTrue(image.getFormat().isLoaded());
}
startImageIndex += pageSize;
}
/* ensure that exactly the expected image IDs are returned */
Assert.assertEquals(imageIdsPaged, imageIds,
"paged query should cumulatively return same results as when unpaged");
}
}
/**
* Tests the finding of projects filtering by owners.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testFindContainerHierarchiesProjectAsRootFilterByOwner()
throws Exception {
long id = fixture.e.getId().getValue();
ParametersI param = new ParametersI();
param.leaves();
param.exp(rlong(id));
Image i = (Image) iUpdate.saveAndReturnObject(mmFactory.simpleImage());
Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
Project p = (Project) iUpdate.saveAndReturnObject(mmFactory
.simpleProjectData().asIObject());
// link dataset and image
DatasetImageLink link = new DatasetImageLinkI();
link.setParent(d);
link.setChild(i);
iUpdate.saveAndReturnObject(link);
// link project and dataset
ProjectDatasetLink l = new ProjectDatasetLinkI();
l.setParent(p);
l.setChild(d);
iUpdate.saveAndReturnObject(l);
List<Long> ids = new ArrayList<Long>(1);
ids.add(i.getId().getValue());
// Should have one project.
List results = factory.getContainerService().findContainerHierarchies(
Project.class.getName(), ids, param);
assertEquals(results.size(), 1);
Image pp = (Image) results.get(0);
assertEquals(pp.getId().getValue(), i.getId().getValue());
}
/**
* Tests the retrieval of a projects filtering by owners.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test(groups = "ticket:318")
public void testLoadContainerHierarchyFilterByOwner() throws Exception {
long id = fixture.e.getId().getValue();
Project p = (Project) iUpdate.saveAndReturnObject(mmFactory
.simpleProjectData().asIObject());
ParametersI param = new ParametersI();
param.exp(rlong(id));
List<Long> ids = fixture.getProjectIds();
List results = factory.getContainerService().loadContainerHierarchy(
Project.class.getName(), new ArrayList<Long>(), param);
Iterator i = results.iterator();
IObject object;
int value = 0;
while (i.hasNext()) {
object = (IObject) i.next();
if (p.getId().getValue() == object.getId().getValue())
value++;
}
assertEquals(value, 0);
}
/**
* Tests the retrieval of a projects filtering by groups.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test(groups = "ticket:318")
public void testLoadContainerHierarchyFilterByGroup() throws Exception {
long id = fixture.g.getId().getValue();
Project p = (Project) iUpdate.saveAndReturnObject(mmFactory
.simpleProjectData().asIObject());
ParametersI param = new ParametersI();
param.grp(rlong(id));
List<Long> ids = fixture.getProjectIds();
List results = factory.getContainerService().loadContainerHierarchy(
Project.class.getName(), new ArrayList<Long>(), param);
Iterator i = results.iterator();
IObject object;
int value = 0;
while (i.hasNext()) {
object = (IObject) i.next();
if (p.getId().getValue() == object.getId().getValue())
value++;
}
assertEquals(value, 0);
}
/**
* Tests the retrieval of images created during a given period.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test(groups = "ticket:318")
public void testGetImagesByOptions() throws Exception {
GregorianCalendar gc = new GregorianCalendar();
gc = new GregorianCalendar(gc.get(Calendar.YEAR),
gc.get(Calendar.MONTH), gc.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
long startTime = gc.getTime().getTime();
ParametersI po = new ParametersI();
po.leaves();
po.startTime(rtime(startTime - 1));
Image i = mmFactory.simpleImage();
i.setAcquisitionDate(rtime(startTime));
i = (Image) iUpdate.saveAndReturnObject(i);
List result = factory.getContainerService().getImagesByOptions(po);
assertTrue(result.size() > 0);
Iterator j = result.iterator();
int count = 0;
IObject object;
Image img;
int value = 0;
while (j.hasNext()) {
object = (IObject) j.next();
if (object instanceof Image) {
img = (Image) object;
if (img.getId().getValue() == i.getId().getValue())
value++;
assertTrue(img.getFormat().isLoaded());
count++;
}
}
assertEquals(result.size(), count);
assertEquals(value, 1);
//
gc = new GregorianCalendar(gc.get(Calendar.YEAR),
gc.get(Calendar.MONTH), gc.get(Calendar.DAY_OF_MONTH), 23, 59,
59);
startTime = gc.getTime().getTime();
po = new ParametersI();
po.leaves();
po.startTime(rtime(startTime));
result = factory.getContainerService().getImagesByOptions(po);
assertEquals(result.size(), 0);
}
/**
* Test to load container hierarchy with dataset as root and no leaves flag
* turned on.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test(groups = "ticket:907")
public void testLoadContainerHierarchyDatasetLeavesNotLoaded()
throws Exception {
Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
Image img = (Image) iUpdate.saveAndReturnObject(mmFactory
.simpleImage());
// link the 2
DatasetImageLink link = new DatasetImageLinkI();
link.setParent(d);
link.setChild(img);
iUpdate.saveAndReturnObject(link);
ParametersI param = new ParametersI();
param.noLeaves();
List<Long> ids = new ArrayList<Long>();
List results = factory.getContainerService().loadContainerHierarchy(
Dataset.class.getName(), ids, param);
assertTrue(results.size() > 0);
Iterator i = results.iterator();
DatasetData dataset;
Set<ImageData> images;
Iterator<ImageData> j;
ImageData image;
while (i.hasNext()) {
dataset = new DatasetData((Dataset) i.next());
if (dataset.getId() == d.getId().getValue()) {
images = dataset.getImages();
assertNull(images);
}
}
// now check if the image is correctly loaded
param = new ParametersI();
param.leaves();
results = factory.getContainerService().loadContainerHierarchy(
Dataset.class.getName(),
ids, param);
assertTrue(results.size() > 0);
i = results.iterator();
while (i.hasNext()) {
dataset = new DatasetData((Dataset) i.next());
if (dataset.getId() == d.getId().getValue()) {
images = dataset.getImages();
assertTrue(images.size() > 0);
}
}
}
/**
* Test to load an image with its acquisition data. This method invoked the
* <code>getImages</code>.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadImageWithAcquisitionData() throws Exception {
// First create an image
Image image = mmFactory.createImage();
image = (Image) iUpdate.saveAndReturnObject(image);
// create an instrument
Instrument instrument = (Instrument) iUpdate
.saveAndReturnObject(mmFactory
.createInstrument(ModelMockFactory.LASER));
ParametersI param = new ParametersI();
param.addLong("iid", instrument.getId().getValue());
String sql = "select d from Objective as d where d.instrument.id = :iid";
Objective objective = (Objective) iQuery.findByQuery(sql, param);
// create so settings.
ObjectiveSettings settings = (ObjectiveSettings) iUpdate
.saveAndReturnObject(mmFactory
.createObjectiveSettings(objective));
assertNotNull(settings);
image.setObjectiveSettings(settings);
StageLabel label = (StageLabel) iUpdate.saveAndReturnObject(mmFactory
.createStageLabel());
image.setStageLabel(label);
ImagingEnvironment env = (ImagingEnvironment) iUpdate
.saveAndReturnObject(mmFactory.createImageEnvironment());
image.setImagingEnvironment(env);
iUpdate.saveAndReturnObject(image);
ParametersI po = new ParametersI();
po.acquisitionData();
List<Long> ids = new ArrayList<Long>(1);
ids.add(image.getId().getValue());
List results = factory.getContainerService().getImages(Image.class.getName(), ids, param);
assertNotNull(results);
assertTrue(results.size() == 1);
// Check if acquisition data are loaded.
Image test = (Image) results.get(0);
assertNotNull(test);
assertEquals(test.getId().getValue(), image.getId().getValue());
assertNotNull(test.getObjectiveSettings());
assertNotNull(test.getImagingEnvironment());
assertNotNull(test.getStageLabel());
assertEquals(test.getObjectiveSettings().getId().getValue(), settings
.getId().getValue());
assertEquals(test.getImagingEnvironment().getId().getValue(), env
.getId().getValue());
assertEquals(test.getStageLabel().getId().getValue(), label.getId()
.getValue());
}
/**
* Test to load container hierarchy and make sure the annotations are
* counted.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadContainerHierarchyProjectDatasetWithAnnotations()
throws Exception {
// first create a project
Project p = (Project) iUpdate.saveAndReturnObject(mmFactory
.simpleProjectData().asIObject());
Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
CommentAnnotation comment = new CommentAnnotationI();
comment.setTextValue(rstring("comment Project"));
comment = (CommentAnnotation) iUpdate.saveAndReturnObject(comment);
// attach comment to Project
ProjectAnnotationLinkI pal = new ProjectAnnotationLinkI();
pal.setParent((Project) p.proxy());
pal.setChild(comment);
iUpdate.saveAndReturnObject(pal);
comment = new CommentAnnotationI();
comment.setTextValue(rstring("comment Dataset"));
comment = (CommentAnnotation) iUpdate.saveAndReturnObject(comment);
// attach comment to Project
DatasetAnnotationLinkI dal = new DatasetAnnotationLinkI();
dal.setParent((Dataset) d.proxy());
dal.setChild(comment);
iUpdate.saveAndReturnObject(dal);
// link the 2
ProjectDatasetLink link = new ProjectDatasetLinkI();
link.setParent((Project) p.proxy());
link.setChild((Dataset) d.proxy());
iUpdate.saveAndReturnObject(link);
Parameters param = new ParametersI();
List<Long> ids = new ArrayList<Long>();
ids.add(p.getId().getValue());
List results = factory.getContainerService().loadContainerHierarchy(
Project.class.getName(), ids, param);
assertEquals(results.size(), 1);
Iterator i = results.iterator();
ProjectData project;
Set<DatasetData> datasets;
Iterator<DatasetData> j;
DatasetData dataset;
Map<Long, Long> count;
Entry entry;
Iterator k;
while (i.hasNext()) {
// use omero.gateway.model
project = new ProjectData((Project) i.next());
count = project.getAnnotationsCounts();
assertEquals(1, count.size());
datasets = project.getDatasets();
k = count.entrySet().iterator();
while (k.hasNext()) {
entry = (Entry) k.next();
assertEquals(((Long) entry.getValue()).longValue(), 1);
}
// assertTrue(count.containsKey(ctx.userId));
// one annotation to project.
// assertEquals(((Long) count.get(ctx.userId)).longValue(), 1);
j = datasets.iterator();
while (j.hasNext()) {
dataset = j.next();
count = dataset.getAnnotationsCounts();
assertEquals(1, count.size());
k = count.entrySet().iterator();
while (k.hasNext()) {
entry = (Entry) k.next();
assertEquals(((Long) entry.getValue()).longValue(), 1);
}
}
}
}
/**
* Test to load container hierarchy and make sure the annotations are
* counted.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadContainerHierarchyScreenPlatePlateAcquisitionWithAnnotations()
throws Exception {
// first create a Screen/Plate/PlateAcquisition
Screen s = (Screen) iUpdate.saveAndReturnObject(mmFactory
.simpleScreenData().asIObject());
Plate p = (Plate) iUpdate.saveAndReturnObject(mmFactory
.simplePlateData().asIObject());
PlateAcquisition a = (PlateAcquisition) mmFactory
.simplePlateAcquisitionData().asIObject();
a.setPlate(p);
a = (PlateAcquisition) iUpdate.saveAndReturnObject(a);
// Now create and attach comments to each
CommentAnnotation comment = new CommentAnnotationI();
comment.setTextValue(rstring("comment Screen"));
comment = (CommentAnnotation) iUpdate.saveAndReturnObject(comment);
// attach comment to Screen
ScreenAnnotationLinkI sal = new ScreenAnnotationLinkI();
sal.setParent((Screen) s.proxy());
sal.setChild(comment);
iUpdate.saveAndReturnObject(sal);
comment = new CommentAnnotationI();
comment.setTextValue(rstring("comment Plate"));
comment = (CommentAnnotation) iUpdate.saveAndReturnObject(comment);
// attach comment to Plate
PlateAnnotationLinkI pal = new PlateAnnotationLinkI();
pal.setParent((Plate) p.proxy());
pal.setChild(comment);
iUpdate.saveAndReturnObject(pal);
comment = new CommentAnnotationI();
comment.setTextValue(rstring("comment PlateAcquisition"));
comment = (CommentAnnotation) iUpdate.saveAndReturnObject(comment);
// attach comment to Plate
PlateAcquisitionAnnotationLinkI aal = new PlateAcquisitionAnnotationLinkI();
aal.setParent((PlateAcquisition) a.proxy());
aal.setChild(comment);
iUpdate.saveAndReturnObject(aal);
// link the Screen and Plate
ScreenPlateLink splink = new ScreenPlateLinkI();
splink.setParent((Screen) s.proxy());
splink.setChild((Plate) p.proxy());
iUpdate.saveAndReturnObject(splink);
Parameters param = new ParametersI();
List<Long> ids = new ArrayList<Long>();
ids.add(s.getId().getValue());
List results = factory.getContainerService().loadContainerHierarchy(
Screen.class.getName(), ids, param);
assertEquals(results.size(), 1);
Iterator i = results.iterator();
ScreenData screen;
Set<PlateData> plates;
Set<PlateAcquisitionData> plateAcquisitions;
Iterator<PlateData> j;
Iterator<PlateAcquisitionData> l;
PlateData plate;
PlateAcquisitionData plateAcquisition;
Map<Long, Long> count;
Entry entry;
Iterator k;
while (i.hasNext()) {
// use omero.gateway.model
screen = new ScreenData((Screen) i.next());
count = screen.getAnnotationsCounts();
assertEquals(1, count.size());
k = count.entrySet().iterator();
while (k.hasNext()) {
entry = (Entry) k.next();
assertEquals(((Long) entry.getValue()).longValue(), 1);
}
plates = screen.getPlates();
j = plates.iterator();
while (j.hasNext()) {
plate = j.next();
count = plate.getAnnotationsCounts();
assertEquals(1, count.size());
k = count.entrySet().iterator();
while (k.hasNext()) {
entry = (Entry) k.next();
assertEquals(((Long) entry.getValue()).longValue(), 1);
}
plateAcquisitions = plate.getPlateAcquisitions();
l = plateAcquisitions.iterator();
while (l.hasNext()) {
plateAcquisition = l.next();
count = plateAcquisition.getAnnotationsCounts();
assertEquals(1, count.size());
k = count.entrySet().iterator();
while (k.hasNext()) {
entry = (Entry) k.next();
assertEquals(((Long) entry.getValue()).longValue(), 1);
}
}
}
}
}
/**
* Test to find the P/D the specified images are in.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testFindContainerHierarchyFromProject() throws Exception {
Project p = (Project) iUpdate.saveAndReturnObject(mmFactory
.simpleProjectData().asIObject());
Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
Image i = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
// link the project and the dataset
ProjectDatasetLink l = new ProjectDatasetLinkI();
l.setParent((Project) p.proxy());
l.setChild((Dataset) d.proxy());
iUpdate.saveAndReturnObject(l);
DatasetImageLink link = new DatasetImageLinkI();
link.setParent((Dataset) d.proxy());
link.setChild((Image) i.proxy());
iUpdate.saveAndReturnObject(link);
ParametersI param = new ParametersI();
List<Long> ids = new ArrayList<Long>();
ids.add(i.getId().getValue());
List results = factory.getContainerService().findContainerHierarchies(
Project.class.getName(), ids, param);
assertEquals(results.size(), 1);
Project found = (Project) results.get(0);
assertEquals(found.getId().getValue(), p.getId().getValue());
ProjectData project = new ProjectData(found);
Set<DatasetData> datasets = project.getDatasets();
assertEquals(datasets.size(), 1);
Iterator<DatasetData> j = datasets.iterator();
DatasetData dataset;
Set<ImageData> images;
Iterator<ImageData> k;
while (j.hasNext()) {
dataset = j.next();
assertEquals(dataset.getId(), d.getId().getValue());
images = dataset.getImages();
k = images.iterator();
while (k.hasNext()) {
assertEquals(k.next().getId(), i.getId().getValue());
}
}
}
/**
* Test to find the P/D the specified images are in.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testFindContainerHierarchyFromDataset() throws Exception {
Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
Image i = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
// link the project and the dataset
DatasetImageLink link = new DatasetImageLinkI();
link.setParent((Dataset) d.proxy());
link.setChild((Image) i.proxy());
iUpdate.saveAndReturnObject(link);
ParametersI param = new ParametersI();
List<Long> ids = new ArrayList<Long>();
ids.add(i.getId().getValue());
List results = factory.getContainerService().findContainerHierarchies(
Project.class.getName(), ids, param);
assertEquals(results.size(), 1);
Dataset found = (Dataset) results.get(0);
assertEquals(found.getId().getValue(), d.getId().getValue());
DatasetData dataset = new DatasetData(found);
Set<ImageData> images = dataset.getImages();
Iterator<ImageData> k = images.iterator();
while (k.hasNext()) {
assertEquals(k.next().getId(), i.getId().getValue());
}
}
/**
* Test to find the P/D the specified images are in.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testFindContainerHierarchyFromImage() throws Exception {
Image i = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
ParametersI param = new ParametersI();
List<Long> ids = new ArrayList<Long>();
ids.add(i.getId().getValue());
List results = factory.getContainerService().findContainerHierarchies(
Project.class.getName(), ids, param);
assertEquals(results.size(), 1);
Image found = (Image) results.get(0);
assertEquals(found.getId().getValue(), i.getId().getValue());
}
/**
* Test to find the P/D the specified images are in.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testFindContainerHierarchyWrongType() throws Exception {
Image i = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
ParametersI param = new ParametersI();
List<Long> ids = new ArrayList<Long>();
ids.add(i.getId().getValue());
try {
factory.getContainerService().findContainerHierarchies(Dataset.class.getName(), ids,
param);
fail("Only Project type is supported.");
} catch (Exception e) {
}
}
/**
* Test to load container hierarchy with no plate specified loaded
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadContainerHierarchyNoPlateSpecified() throws Exception {
// first create a screen
long self = factory.getAdminService().getEventContext().userId;
Plate p = (Plate) iUpdate.saveAndReturnObject(mmFactory
.simplePlateData().asIObject());
Plate p2 = (Plate) iUpdate.saveAndReturnObject(mmFactory
.simplePlateData().asIObject());
ParametersI param = new ParametersI();
param.exp(rlong(self));
List results = factory.getContainerService().loadContainerHierarchy(
Plate.class.getName(), new ArrayList(), param);
assertTrue(results.size() > 0);
Iterator i = results.iterator();
int count = 0;
IObject object;
while (i.hasNext()) {
object = (IObject) i.next();
if (!(object instanceof Plate)) {
count++;
}
}
assertEquals(count, 0);
}
/**
* Test to load container hierarchy with plate specified.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadContainerHierarchyPlateSpecified() throws Exception {
// first create a project
Plate p = (Plate) iUpdate.saveAndReturnObject(mmFactory
.simplePlateData().asIObject());
Parameters param = new ParametersI();
List<Long> ids = new ArrayList<Long>();
ids.add(p.getId().getValue());
List results = factory.getContainerService().loadContainerHierarchy(Plate.class.getName(),
ids, param);
assertEquals(results.size(), 1);
Iterator i = results.iterator();
PlateData plate;
while (i.hasNext()) {
plate = new PlateData((Plate) i.next());
assertEquals(plate.getId(), p.getId().getValue());
}
}
/**
* Test the <code>getImagesBySplitFilesets</code> Image as root.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testGetImagesBySplitFilesetsImageAsRoot() throws Exception {
// first create a project
Image i1 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Image i2 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Fileset fileset = newFileset();
fileset.addImage(i1);
fileset.addImage(i2);
fileset = (Fileset) iUpdate.saveAndReturnObject(fileset);
// Check that 2 images are linked
assertEquals(fileset.copyImages().size(), 2);
Parameters param = new ParametersI();
Map<String, List<Long>> map = new HashMap<String, List<Long>>(1);
map.put(Image.class.getName(), Arrays.asList(i1.getId().getValue()));
Map<Long, Map<Boolean, List<Long>>> results = factory.getContainerService()
.getImagesBySplitFilesets(map, param);
assertEquals(results.size(), 1);
Entry<Long, Map<Boolean, List<Long>>> e;
Entry<Boolean, List<Long>> entry;
Iterator<Entry<Boolean, List<Long>>> j;
Iterator<Entry<Long, Map<Boolean, List<Long>>>> i = results.entrySet()
.iterator();
while (i.hasNext()) {
e = i.next();
assertEquals(e.getKey().longValue(), fileset.getId().getValue());
j = e.getValue().entrySet().iterator();
while (i.hasNext()) {
entry = j.next();
assertEquals(entry.getValue().size(), 1);
if (entry.getKey().booleanValue()) {
assertTrue(entry.getValue().contains(i1.getId().getValue()));
} else
assertTrue(entry.getValue().contains(i2.getId().getValue()));
}
}
}
/**
* Test the <code>getImagesBySplitFilesets</code> Image as root.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testGetImagesBySplitFilesetsImageAsRootAll() throws Exception {
// first create a project
Image i1 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Image i2 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Fileset fileset = newFileset();
fileset.addImage(i1);
fileset.addImage(i2);
fileset = (Fileset) iUpdate.saveAndReturnObject(fileset);
// Check that 2 images are linked
assertEquals(fileset.copyImages().size(), 2);
Parameters param = new ParametersI();
List<Long> ids = new ArrayList<Long>();
ids.add(i1.getId().getValue());
ids.add(i2.getId().getValue());
Map<String, List<Long>> map = new HashMap<String, List<Long>>(1);
map.put(Image.class.getName(), ids);
Map<Long, Map<Boolean, List<Long>>> results = factory.getContainerService()
.getImagesBySplitFilesets(map, param);
assertEquals(results.size(), 0);
}
/**
* Test the <code>getImagesBySplitFilesets</code> Dataset as root.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testGetImagesBySplitFilesetsDatasetAsRoot() throws Exception {
// first create a project
Image i1 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Image i2 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Fileset fileset = newFileset();
fileset.addImage(i1);
fileset.addImage(i2);
fileset = (Fileset) iUpdate.saveAndReturnObject(fileset);
assertEquals(fileset.copyImages().size(), 2);
Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
// link the 2
DatasetImageLink link = new DatasetImageLinkI();
link.setParent(d);
link.setChild((Image) i1.proxy());
iUpdate.saveAndReturnObject(link);
Parameters param = new ParametersI();
Map<String, List<Long>> map = new HashMap<String, List<Long>>(1);
map.put(Dataset.class.getName(), Arrays.asList(d.getId().getValue()));
Map<Long, Map<Boolean, List<Long>>> results = factory.getContainerService()
.getImagesBySplitFilesets(map, param);
assertEquals(results.size(), 1);
Entry<Long, Map<Boolean, List<Long>>> e;
Entry<Boolean, List<Long>> entry;
Iterator<Entry<Boolean, List<Long>>> j;
Iterator<Entry<Long, Map<Boolean, List<Long>>>> i = results.entrySet()
.iterator();
while (i.hasNext()) {
e = i.next();
assertEquals(e.getKey().longValue(), fileset.getId().getValue());
j = e.getValue().entrySet().iterator();
while (i.hasNext()) {
entry = j.next();
assertEquals(entry.getValue().size(), 1);
if (entry.getKey().booleanValue()) {
assertTrue(entry.getValue().contains(i1.getId().getValue()));
} else
assertTrue(entry.getValue().contains(i2.getId().getValue()));
}
}
}
/**
* Test the <code>getImagesBySplitFilesets</code> Project as root.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testGetImagesBySplitFilesetsProjectAsRoot() throws Exception {
// first create a project
Image i1 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Image i2 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Fileset fileset = newFileset();
fileset.addImage(i1);
fileset.addImage(i2);
fileset = (Fileset) iUpdate.saveAndReturnObject(fileset);
assertEquals(fileset.copyImages().size(), 2);
Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
// link the 2
DatasetImageLink link = new DatasetImageLinkI();
link.setParent(d);
link.setChild((Image) i1.proxy());
iUpdate.saveAndReturnObject(link);
Project p = (Project) iUpdate.saveAndReturnObject(mmFactory
.simpleProjectData().asIObject());
ProjectDatasetLink lp = new ProjectDatasetLinkI();
lp.setParent(p);
lp.setChild((Dataset) d.proxy());
iUpdate.saveAndReturnObject(lp);
Parameters param = new ParametersI();
Map<String, List<Long>> map = new HashMap<String, List<Long>>(1);
map.put(Project.class.getName(), Arrays.asList(p.getId().getValue()));
Map<Long, Map<Boolean, List<Long>>> results = factory.getContainerService()
.getImagesBySplitFilesets(map, param);
assertEquals(results.size(), 1);
Entry<Long, Map<Boolean, List<Long>>> e;
Entry<Boolean, List<Long>> entry;
Iterator<Entry<Boolean, List<Long>>> j;
Iterator<Entry<Long, Map<Boolean, List<Long>>>> i = results.entrySet()
.iterator();
while (i.hasNext()) {
e = i.next();
assertEquals(e.getKey().longValue(), fileset.getId().getValue());
j = e.getValue().entrySet().iterator();
while (i.hasNext()) {
entry = j.next();
assertEquals(entry.getValue().size(), 1);
if (entry.getKey().booleanValue()) {
assertTrue(entry.getValue().contains(i1.getId().getValue()));
} else
assertTrue(entry.getValue().contains(i2.getId().getValue()));
}
}
}
/**
* Test the <code>getImagesBySplitFilesets</code> Dataset as root. The
* fileset is split between 2 datasets. Both datasets are specified.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testGetImagesBySplitFilesetsMixedDatasetAsRoot()
throws Exception {
// first create a project
Image i1 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Image i2 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Fileset fileset = newFileset();
fileset.addImage(i1);
fileset.addImage(i2);
fileset = (Fileset) iUpdate.saveAndReturnObject(fileset);
assertEquals(fileset.copyImages().size(), 2);
Dataset d1 = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
// link the 2
DatasetImageLink link = new DatasetImageLinkI();
link.setParent(d1);
link.setChild((Image) i1.proxy());
iUpdate.saveAndReturnObject(link);
Dataset d2 = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
// link the 2
link = new DatasetImageLinkI();
link.setParent(d2);
link.setChild((Image) i2.proxy());
iUpdate.saveAndReturnObject(link);
Parameters param = new ParametersI();
List<Long> ids = new ArrayList<Long>();
ids.add(d1.getId().getValue());
ids.add(d2.getId().getValue());
Map<String, List<Long>> map = new HashMap<String, List<Long>>(1);
map.put(Dataset.class.getName(), ids);
Map<Long, Map<Boolean, List<Long>>> results = factory.getContainerService()
.getImagesBySplitFilesets(map, param);
assertEquals(results.size(), 0);
}
/**
* Test the <code>getImagesBySplitFilesets</code> Project as root. The
* fileset is split between 2 datasets contained into 2 projects. Both
* projects are specified.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testGetImagesBySplitFilesetsMixedProjectAsRoot()
throws Exception {
// first create a project
Image i1 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Image i2 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Fileset fileset = newFileset();
fileset.addImage(i1);
fileset.addImage(i2);
fileset = (Fileset) iUpdate.saveAndReturnObject(fileset);
assertEquals(fileset.copyImages().size(), 2);
Dataset d1 = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
Dataset d2 = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
// link the 2
DatasetImageLink link = new DatasetImageLinkI();
link.setParent(d1);
link.setChild((Image) i1.proxy());
iUpdate.saveAndReturnObject(link);
link = new DatasetImageLinkI();
link.setParent(d2);
link.setChild((Image) i2.proxy());
iUpdate.saveAndReturnObject(link);
Project p1 = (Project) iUpdate.saveAndReturnObject(mmFactory
.simpleProjectData().asIObject());
ProjectDatasetLink lp = new ProjectDatasetLinkI();
lp.setParent(p1);
lp.setChild((Dataset) d1.proxy());
iUpdate.saveAndReturnObject(lp);
Project p2 = (Project) iUpdate.saveAndReturnObject(mmFactory
.simpleProjectData().asIObject());
lp = new ProjectDatasetLinkI();
lp.setParent(p2);
lp.setChild((Dataset) d2.proxy());
iUpdate.saveAndReturnObject(lp);
Parameters param = new ParametersI();
List<Long> ids = new ArrayList<Long>();
ids.add(p1.getId().getValue());
ids.add(p2.getId().getValue());
Map<String, List<Long>> map = new HashMap<String, List<Long>>(1);
map.put(Project.class.getName(), ids);
Map<Long, Map<Boolean, List<Long>>> results = factory.getContainerService()
.getImagesBySplitFilesets(map, param);
assertEquals(results.size(), 0);
}
/**
* Test the <code>getImagesBySplitFilesets</code> with image/dataset and
* project as root.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testGetImagesBySplitFilesetsMixedRoot() throws Exception {
// first create a project
Image i1 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Image i2 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Image i3 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Fileset fileset = newFileset();
fileset.addImage(i1);
fileset.addImage(i2);
fileset.addImage(i3);
fileset = (Fileset) iUpdate.saveAndReturnObject(fileset);
assertEquals(fileset.copyImages().size(), 3);
Dataset d1 = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
Dataset d2 = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
// link the 2
DatasetImageLink link = new DatasetImageLinkI();
link.setParent(d1);
link.setChild((Image) i1.proxy());
iUpdate.saveAndReturnObject(link);
link = new DatasetImageLinkI();
link.setParent(d2);
link.setChild((Image) i2.proxy());
iUpdate.saveAndReturnObject(link);
Project p1 = (Project) iUpdate.saveAndReturnObject(mmFactory
.simpleProjectData().asIObject());
ProjectDatasetLink lp = new ProjectDatasetLinkI();
lp.setParent(p1);
lp.setChild((Dataset) d1.proxy());
iUpdate.saveAndReturnObject(lp);
Parameters param = new ParametersI();
Map<String, List<Long>> map = new HashMap<String, List<Long>>();
map.put(Project.class.getName(), Arrays.asList(p1.getId().getValue()));
map.put(Dataset.class.getName(), Arrays.asList(d2.getId().getValue()));
map.put(Image.class.getName(), Arrays.asList(i3.getId().getValue()));
Map<Long, Map<Boolean, List<Long>>> results = factory.getContainerService()
.getImagesBySplitFilesets(map, param);
assertEquals(results.size(), 0);
}
/**
* Test the <code>getImagesBySplitFilesets</code> with dataset and project
* as root. One image missing.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testGetImagesBySplitFilesetsMixedRootMissingImage()
throws Exception {
// first create a project
Image i1 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Image i2 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Image i3 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Fileset fileset = newFileset();
fileset.addImage(i1);
fileset.addImage(i2);
fileset.addImage(i3);
fileset = (Fileset) iUpdate.saveAndReturnObject(fileset);
assertEquals(fileset.copyImages().size(), 3);
Dataset d1 = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
Dataset d2 = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
// link the 2
DatasetImageLink link = new DatasetImageLinkI();
link.setParent(d1);
link.setChild((Image) i1.proxy());
iUpdate.saveAndReturnObject(link);
link = new DatasetImageLinkI();
link.setParent(d2);
link.setChild((Image) i2.proxy());
iUpdate.saveAndReturnObject(link);
Project p1 = (Project) iUpdate.saveAndReturnObject(mmFactory
.simpleProjectData().asIObject());
ProjectDatasetLink lp = new ProjectDatasetLinkI();
lp.setParent(p1);
lp.setChild((Dataset) d1.proxy());
iUpdate.saveAndReturnObject(lp);
Parameters param = new ParametersI();
Map<String, List<Long>> map = new HashMap<String, List<Long>>();
map.put(Project.class.getName(), Arrays.asList(p1.getId().getValue()));
map.put(Dataset.class.getName(), Arrays.asList(d2.getId().getValue()));
Map<Long, Map<Boolean, List<Long>>> results = factory.getContainerService()
.getImagesBySplitFilesets(map, param);
assertEquals(results.size(), 1);
Entry<Long, Map<Boolean, List<Long>>> e;
Entry<Boolean, List<Long>> entry;
Iterator<Entry<Boolean, List<Long>>> j;
Iterator<Entry<Long, Map<Boolean, List<Long>>>> i = results.entrySet()
.iterator();
while (i.hasNext()) {
e = i.next();
assertEquals(e.getKey().longValue(), fileset.getId().getValue());
j = e.getValue().entrySet().iterator();
List<Long> l;
while (i.hasNext()) {
entry = j.next();
assertEquals(entry.getValue().size(), 1);
l = entry.getValue();
if (entry.getKey().booleanValue()) {
assertEquals(l.size(), 2);
assertTrue(l.contains(i1.getId().getValue()));
assertTrue(l.contains(i2.getId().getValue()));
} else {
assertEquals(l.size(), 1);
assertTrue(l.contains(i3.getId().getValue()));
}
}
}
}
/**
* Test the <code>getImagesBySplitFilesets</code> Dataset as root. One image
* is not part of a file set.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testGetImagesBySplitFilesetsDatasetAsRootWithNonFSdata()
throws Exception {
// first create a project
Image i1 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Image i2 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Image i3 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Fileset fileset = newFileset();
fileset.addImage(i1);
fileset.addImage(i2);
fileset = (Fileset) iUpdate.saveAndReturnObject(fileset);
assertEquals(fileset.copyImages().size(), 2);
Dataset d1 = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
// link the 2
DatasetImageLink link = new DatasetImageLinkI();
link.setParent(d1);
link.setChild((Image) i1.proxy());
iUpdate.saveAndReturnObject(link);
link = new DatasetImageLinkI();
link.setParent((Dataset) d1.proxy());
link.setChild((Image) i2.proxy());
iUpdate.saveAndReturnObject(link);
link = new DatasetImageLinkI();
link.setParent((Dataset) d1.proxy());
link.setChild((Image) i3.proxy());
iUpdate.saveAndReturnObject(link);
Parameters param = new ParametersI();
List<Long> ids = new ArrayList<Long>();
ids.add(d1.getId().getValue());
Map<String, List<Long>> map = new HashMap<String, List<Long>>(1);
map.put(Dataset.class.getName(), ids);
Map<Long, Map<Boolean, List<Long>>> results = factory.getContainerService()
.getImagesBySplitFilesets(map, param);
assertEquals(results.size(), 0);
}
/**
* Test the <code>getImagesBySplitFilesets</code> Dataset as root. One image
* is not part of a file set.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testGetImagesBySplitFilesetsImageAsRootWithNonFSdata()
throws Exception {
// first create a project
Image i1 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Image i2 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Image i3 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Fileset fileset = newFileset();
fileset.addImage(i1);
fileset.addImage(i2);
fileset = (Fileset) iUpdate.saveAndReturnObject(fileset);
assertEquals(fileset.copyImages().size(), 2);
Parameters param = new ParametersI();
Map<String, List<Long>> map = new HashMap<String, List<Long>>(1);
map.put(Image.class.getName(), Arrays.asList(i3.getId().getValue()));
Map<Long, Map<Boolean, List<Long>>> results = factory.getContainerService()
.getImagesBySplitFilesets(map, param);
assertEquals(results.size(), 0);
}
/**
* Test the <code>getImagesBySplitFilesets</code> Image as root. One image
* is not part of a file set.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testGetImagesBySplitFilesetsImageAsRootMixFSNonFSdata()
throws Exception {
// first create a project
Image i1 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Image i2 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Image i3 = (Image) iUpdate
.saveAndReturnObject(mmFactory.simpleImage());
Fileset fileset = newFileset();
fileset.addImage(i1);
fileset.addImage(i2);
fileset = (Fileset) iUpdate.saveAndReturnObject(fileset);
assertEquals(fileset.copyImages().size(), 2);
Parameters param = new ParametersI();
Map<String, List<Long>> map = new HashMap<String, List<Long>>(1);
List<Long> ids = new ArrayList<Long>();
ids.add(i1.getId().getValue());
ids.add(i3.getId().getValue());
map.put(Image.class.getName(), ids);
Map<Long, Map<Boolean, List<Long>>> results = factory.getContainerService()
.getImagesBySplitFilesets(map, param);
assertEquals(results.size(), 1);
Entry<Long, Map<Boolean, List<Long>>> e;
Entry<Boolean, List<Long>> entry;
Iterator<Entry<Boolean, List<Long>>> j;
Iterator<Entry<Long, Map<Boolean, List<Long>>>> i = results.entrySet()
.iterator();
while (i.hasNext()) {
e = i.next();
assertEquals(e.getKey().longValue(), fileset.getId().getValue());
j = e.getValue().entrySet().iterator();
List<Long> l;
while (i.hasNext()) {
entry = j.next();
assertEquals(entry.getValue().size(), 1);
l = entry.getValue();
assertEquals(l.size(), 1);
if (entry.getKey().booleanValue()) {
assertTrue(l.contains(i1.getId().getValue()));
} else {
assertTrue(l.contains(i2.getId().getValue()));
}
}
}
}
/**
* Checks if the creation date is loaded for all container {@link IObject}s
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testContainerCreationDateLoaded() throws Exception {
Project p = (Project) iUpdate.saveAndReturnObject(mmFactory
.simpleProjectData().asIObject());
List<Long> ids = new ArrayList<Long>();
ids.add(p.getId().getValue());
p = (Project) factory.getContainerService()
.loadContainerHierarchy(Project.class.getName(), ids, null)
.iterator().next();
assertTrue(p.getDetails().getCreationEvent().isLoaded());
Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
ids = new ArrayList<Long>();
ids.add(d.getId().getValue());
d = (Dataset) factory.getContainerService()
.loadContainerHierarchy(Dataset.class.getName(), ids, null)
.iterator().next();
assertTrue(d.getDetails().getCreationEvent().isLoaded());
Screen s = (Screen) iUpdate.saveAndReturnObject(mmFactory
.simpleScreenData().asIObject());
ids = new ArrayList<Long>();
ids.add(s.getId().getValue());
s = (Screen) factory.getContainerService()
.loadContainerHierarchy(Screen.class.getName(), ids, null)
.iterator().next();
assertTrue(s.getDetails().getCreationEvent().isLoaded());
Plate pl = (Plate) iUpdate.saveAndReturnObject(mmFactory
.simplePlateData().asIObject());
ids = new ArrayList<Long>();
ids.add(pl.getId().getValue());
pl = (Plate) factory.getContainerService()
.loadContainerHierarchy(Plate.class.getName(), ids, null)
.iterator().next();
assertTrue(pl.getDetails().getCreationEvent().isLoaded());
}
/**
* Test to load container hierarchy with project containing an dataset
* owned by another member of the group.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadContainerHierarchyProjectWithOtherMembersDataset()
throws Exception {
// first create a project
String perms = "rwrw--";
EventContext ctx = newUserAndGroup(perms, true);
Project p = (Project) iUpdate.saveAndReturnObject(mmFactory
.simpleProjectData().asIObject());
EventContext dataOwner = newUserInGroup();
Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
Dataset dNotOrphaned = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
assertEquals(dataOwner.userId,
dNotOrphaned.getDetails().getOwner().getId().getValue());
//link the dataset to another user's project.
ProjectDatasetLink link = new ProjectDatasetLinkI();
link.setParent(p);
link.setChild(dNotOrphaned);
iUpdate.saveAndReturnObject(link);
//create a project
Project p1 = (Project) iUpdate.saveAndReturnObject(mmFactory
.simpleProjectData().asIObject());
ParametersI param = new ParametersI();
param.exp(rlong(dataOwner.userId));
param.orphan();
List results = factory.getContainerService().loadContainerHierarchy(
Project.class.getName(), new ArrayList(), param);
Assert.assertEquals(results.size(), 2);
Iterator i = results.iterator();
IObject object;
int value = 0;
boolean orphaned = false;
while (i.hasNext()) {
object = (IObject) i.next();
if (object instanceof Dataset) {
if (object.getId().getValue() == d.getId().getValue()) {
value++;
} else if (object.getId().getValue() == dNotOrphaned.getId().getValue()) {
orphaned = true;
}
} else if (object instanceof Project) {
if (object.getId().getValue() == p1.getId().getValue()) {
value++;
}
}
}
Assert.assertEquals(value, 2);
Assert.assertEquals(orphaned, false);
}
/**
* Test to load container hierarchy with screen containing a plate
* owned by another member of the group.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadContainerHierarchyScreenWithOtherMembersPlate()
throws Exception {
// first create a Screen
String perms = "rwrw--";
EventContext ctx = newUserAndGroup(perms, true);
Screen p = (Screen) iUpdate.saveAndReturnObject(mmFactory
.simpleScreenData().asIObject());
EventContext dataOwner = newUserInGroup();
Plate d = (Plate) iUpdate.saveAndReturnObject(mmFactory
.simplePlateData().asIObject());
Plate dNotOrphaned = (Plate) iUpdate.saveAndReturnObject(mmFactory
.simplePlateData().asIObject());
assertEquals(dataOwner.userId,
dNotOrphaned.getDetails().getOwner().getId().getValue());
ScreenPlateLink link = new ScreenPlateLinkI();
link.setParent(p);
link.setChild(dNotOrphaned);
iUpdate.saveAndReturnObject(link);
//link the plate to another user's screen.
Screen p1 = (Screen) iUpdate.saveAndReturnObject(mmFactory
.simpleScreenData().asIObject());
ParametersI param = new ParametersI();
param.exp(rlong(dataOwner.userId));
param.orphan();
List results = factory.getContainerService().loadContainerHierarchy(
Screen.class.getName(), new ArrayList(), param);
Assert.assertEquals(results.size(), 2);
Iterator i = results.iterator();
IObject object;
int value = 0;
boolean orphaned = false;
while (i.hasNext()) {
object = (IObject) i.next();
if (object instanceof Plate) {
if (object.getId().getValue() == d.getId().getValue()) {
value++;
} else if (object.getId().getValue() == dNotOrphaned.getId().getValue()) {
orphaned = true;
}
} else if (object instanceof Screen) {
if (object.getId().getValue() == p1.getId().getValue()) {
value++;
}
}
}
Assert.assertEquals(value, 2);
Assert.assertEquals(orphaned, false);
}
}