/*
* $Id$
*
* Copyright 2006-2014 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.rdouble;
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.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import ome.api.JobHandle;
import ome.system.Login;
import omero.ApiUsageException;
import omero.ServerError;
import omero.api.IAdminPrx;
import omero.api.IMetadataPrx;
import omero.api.IUpdatePrx;
import omero.api.ServiceFactoryPrx;
import omero.model.AcquisitionMode;
import omero.model.Annotation;
import omero.model.AnnotationAnnotationLinkI;
import omero.model.Arc;
import omero.model.BooleanAnnotation;
import omero.model.BooleanAnnotationI;
import omero.model.Channel;
import omero.model.CommentAnnotation;
import omero.model.CommentAnnotationI;
import omero.model.ContrastMethod;
import omero.model.Dataset;
import omero.model.DatasetAnnotationLink;
import omero.model.DatasetAnnotationLinkI;
import omero.model.DatasetI;
import omero.model.Detector;
import omero.model.Dichroic;
import omero.model.DoubleAnnotation;
import omero.model.DoubleAnnotationI;
import omero.model.Experimenter;
import omero.model.ExperimenterGroup;
import omero.model.ExperimenterGroupI;
import omero.model.ExperimenterI;
import omero.model.Filament;
import omero.model.FileAnnotation;
import omero.model.FileAnnotationI;
import omero.model.Fileset;
import omero.model.Filter;
import omero.model.FilterSet;
import omero.model.IObject;
import omero.model.Illumination;
import omero.model.Image;
import omero.model.ImageAnnotationLink;
import omero.model.ImageAnnotationLinkI;
import omero.model.ImageI;
import omero.model.Instrument;
import omero.model.Job;
import omero.model.JobOriginalFileLink;
import omero.model.JobOriginalFileLinkI;
import omero.model.JobStatus;
import omero.model.Laser;
import omero.model.LightSource;
import omero.model.LogicalChannel;
import omero.model.LongAnnotation;
import omero.model.LongAnnotationI;
import omero.model.MapAnnotation;
import omero.model.MapAnnotationI;
import omero.model.NamedValue;
import omero.model.OTF;
import omero.model.Objective;
import omero.model.OriginalFile;
import omero.model.OriginalFileI;
import omero.model.PermissionsI;
import omero.model.Pixels;
import omero.model.Plate;
import omero.model.PlateAcquisition;
import omero.model.PlateAcquisitionAnnotationLink;
import omero.model.PlateAcquisitionAnnotationLinkI;
import omero.model.PlateAcquisitionI;
import omero.model.PlateAnnotationLink;
import omero.model.PlateAnnotationLinkI;
import omero.model.PlateI;
import omero.model.Project;
import omero.model.ProjectAnnotationLink;
import omero.model.ProjectAnnotationLinkI;
import omero.model.ProjectI;
import omero.model.Screen;
import omero.model.ScreenAnnotationLink;
import omero.model.ScreenAnnotationLinkI;
import omero.model.ScreenI;
import omero.model.TagAnnotation;
import omero.model.TagAnnotationI;
import omero.model.TermAnnotation;
import omero.model.TermAnnotationI;
import omero.model.UploadJob;
import omero.model.UploadJobI;
import omero.model.Well;
import omero.model.WellAnnotationLink;
import omero.model.WellAnnotationLinkI;
import omero.model.WellSample;
import omero.model.XmlAnnotation;
import omero.model.XmlAnnotationI;
import omero.sys.Parameters;
import omero.sys.ParametersI;
import omero.sys.Roles;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import omero.gateway.model.BooleanAnnotationData;
import omero.gateway.model.ChannelAcquisitionData;
import omero.gateway.model.DoubleAnnotationData;
import omero.gateway.model.FileAnnotationData;
import omero.gateway.model.InstrumentData;
import omero.gateway.model.LightSourceData;
import omero.gateway.model.LongAnnotationData;
import omero.gateway.model.MapAnnotationData;
import omero.gateway.model.TagAnnotationData;
import omero.gateway.model.TextualAnnotationData;
import omero.gateway.model.XMLAnnotationData;
import Glacier2.CannotCreateSessionException;
import Glacier2.PermissionDeniedException;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
/**
* Collections of tests for the <code>IMetadata</code> service.
*
* @author Jean-Marie Burel <a
* href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a>
* @author Donald MacDonald <a
* href="mailto:donald@lifesci.dundee.ac.uk"
* >donald@lifesci.dundee.ac.uk</a>
* @version 3.0 <small> (<b>Internal version:</b> $Revision: $Date: $) </small>
* @since 3.0-Beta4
*/
public class MetadataServiceTest extends AbstractServerTest {
/** Identifies the file annotation. */
private static final String FILE_ANNOTATION = "ome.model.annotations.FileAnnotation";
/** Identifies the file annotation. */
private static final String MAP_ANNOTATION = "ome.model.annotations.MapAnnotation";
/** Helper reference to the <code>IAdmin</code> service. */
private IMetadataPrx iMetadata;
/**
* Initializes the various services.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Override
@BeforeClass
protected void setUp() throws Exception {
super.setUp();
iMetadata = factory.getMetadataService();
}
/**
* Tests the creation of file annotation with an original file and load it.
* Loads the annotation using the <code>loadAnnotation</code> method.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test(groups = "ticket:1155")
public void testLoadFileAnnotation() throws Exception {
OriginalFile of = (OriginalFile) iUpdate.saveAndReturnObject(mmFactory
.createOriginalFile());
assertNotNull(of);
FileAnnotationI fa = new FileAnnotationI();
fa.setFile(of);
FileAnnotation data = (FileAnnotation) iUpdate.saveAndReturnObject(fa);
assertNotNull(data);
List<Long> ids = new ArrayList<Long>();
ids.add(data.getId().getValue());
List<Annotation> annotations = iMetadata.loadAnnotation(ids);
assertNotNull(annotations);
Iterator<Annotation> i = annotations.iterator();
Annotation annotation;
FileAnnotationData faData;
while (i.hasNext()) {
annotation = i.next();
if (annotation instanceof FileAnnotation) { // test creation of
// omero.gateway.model
faData = new FileAnnotationData((FileAnnotation) annotation);
assertNotNull(faData);
assertEquals(faData.getFileID(), of.getId().getValue());
}
}
}
/**
* Tests the creation of map annotation and load it. Loads the annotation
* using the <code>loadAnnotation</code> method.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test(groups = "ticket:1155")
public void testLoadMapAnnotation() throws Exception {
MapAnnotation ma = new MapAnnotationI();
List<NamedValue> values = new ArrayList<NamedValue>();
for (int i = 0; i < 3; i++)
values.add(new NamedValue("name " + i, "value " + i));
ma.setMapValue(values);
MapAnnotation data = (MapAnnotation) iUpdate.saveAndReturnObject(ma);
assertNotNull(data);
List<Long> ids = new ArrayList<Long>();
ids.add(data.getId().getValue());
List<Annotation> annotations = iMetadata.loadAnnotation(ids);
assertNotNull(annotations);
Iterator<Annotation> i = annotations.iterator();
Annotation annotation;
MapAnnotationData maData;
while (i.hasNext()) {
annotation = i.next();
if (annotation instanceof MapAnnotation) { // test creation of
// omero.gateway.model
maData = new MapAnnotationData((MapAnnotation) annotation);
assertNotNull(maData);
@SuppressWarnings("unchecked")
List<NamedValue> list = (List<NamedValue>) maData.getContent();
assertNotNull(list);
assertEquals(3, list.size());
for (int j = 0; j < 3; j++) {
NamedValue v1 = values.get(j);
NamedValue v2 = list.get(j);
assertEquals(v1.name, v2.name);
assertEquals(v1.value, v2.value);
}
}
}
}
/**
* Tests the creation of file annotation with an original file and load it.
* Loads the annotation using the <code>loadAnnotations</code> method.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test(groups = "ticket:1155")
public void testLoadAnnotationsFileAnnotation() throws Exception {
OriginalFile of = (OriginalFile) iUpdate.saveAndReturnObject(mmFactory
.createOriginalFile());
assertNotNull(of);
FileAnnotationI fa = new FileAnnotationI();
fa.setFile(of);
FileAnnotation data = (FileAnnotation) iUpdate.saveAndReturnObject(fa);
assertNotNull(data);
// link the image
// create an image and link the annotation
Image image = (Image) iUpdate.saveAndReturnObject(mmFactory
.simpleImage());
ImageAnnotationLinkI link = new ImageAnnotationLinkI();
link.setParent(image);
link.setChild(data);
iUpdate.saveAndReturnObject(link);
List<Long> ids = new ArrayList<Long>();
Parameters param = new Parameters();
List<Long> nodes = new ArrayList<Long>();
nodes.add(image.getId().getValue());
Map<Long, List<IObject>> result = iMetadata.loadAnnotations(
Image.class.getName(), nodes, Arrays.asList(FILE_ANNOTATION),
ids, param);
assertNotNull(result);
List<IObject> l = result.get(image.getId().getValue());
assertNotNull(l);
Iterator<IObject> i = l.iterator();
IObject o;
FileAnnotationData faData;
while (i.hasNext()) {
o = i.next();
if (o instanceof FileAnnotation) {
faData = new FileAnnotationData((FileAnnotation) o);
assertNotNull(faData);
assertEquals(faData.getFileID(), of.getId().getValue());
}
}
}
/**
* Tests the creation of map annotation and load it.
* Loads the annotation using the <code>loadAnnotations</code> method.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test(groups = "ticket:1155")
public void testLoadAnnotationsMapAnnotation() throws Exception {
MapAnnotation ma = new MapAnnotationI();
List<NamedValue> values = new ArrayList<NamedValue>();
for (int i = 0; i < 3; i++)
values.add(new NamedValue("name " + i, "value " + i));
ma.setMapValue(values);
MapAnnotation data = (MapAnnotation) iUpdate.saveAndReturnObject(ma);
assertNotNull(data);
// link the image
// create an image and link the annotation
Image image = (Image) iUpdate.saveAndReturnObject(mmFactory
.simpleImage());
ImageAnnotationLinkI link = new ImageAnnotationLinkI();
link.setParent(image);
link.setChild(data);
iUpdate.saveAndReturnObject(link);
List<Long> ids = new ArrayList<Long>();
Parameters param = new Parameters();
List<Long> nodes = new ArrayList<Long>();
nodes.add(image.getId().getValue());
Map<Long, List<IObject>> result = iMetadata.loadAnnotations(
Image.class.getName(), nodes, Arrays.asList(MAP_ANNOTATION),
ids, param);
assertNotNull(result);
List<IObject> l = result.get(image.getId().getValue());
assertNotNull(l);
Iterator<IObject> i = l.iterator();
IObject o;
MapAnnotationData maData;
while (i.hasNext()) {
o = i.next();
if (o instanceof MapAnnotation) {
maData = new MapAnnotationData((MapAnnotation) o);
assertNotNull(maData);
@SuppressWarnings("unchecked")
List<NamedValue> list = (List<NamedValue>) maData.getContent();
assertNotNull(list);
assertEquals(3, list.size());
for (int j = 0; j < 3; j++) {
NamedValue v1 = values.get(j);
NamedValue v2 = list.get(j);
assertEquals(v1.name, v2.name);
assertEquals(v1.value, v2.value);
}
}
}
}
/**
* Tests the creation of file annotation with an original file and load it.
* Loads the annotation using the <code>loadSpecifiedAnnotations</code>
* method.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test(groups = "ticket:1155")
public void testLoadSpecifiedAnnotationsFileAnnotation() throws Exception {
OriginalFile of = (OriginalFile) iUpdate.saveAndReturnObject(mmFactory
.createOriginalFile());
assertNotNull(of);
FileAnnotationI fa = new FileAnnotationI();
fa.setFile(of);
FileAnnotation data = (FileAnnotation) iUpdate.saveAndReturnObject(fa);
assertNotNull(data);
Parameters param = new Parameters();
List<String> include = new ArrayList<String>();
List<String> exclude = new ArrayList<String>();
List<Annotation> result = iMetadata.loadSpecifiedAnnotations(
FileAnnotation.class.getName(), include, exclude, param);
assertNotNull(result);
Iterator<Annotation> i = result.iterator();
Annotation o;
FileAnnotation r;
int count = 0;
while (i.hasNext()) {
o = i.next();
if (o instanceof FileAnnotation) {
r = (FileAnnotation) o;
count++;
if (r.getId().getValue() == data.getId().getValue()) {
assertEquals(r.getFile().getId().getValue(), of.getId()
.getValue());
assertEquals(r.getFile().getName().getValue(), of.getName()
.getValue());
assertEquals(r.getFile().getPath().getValue(), of.getPath()
.getValue());
}
}
}
assertTrue(count > 0);
assertEquals(count, result.size());
// Same thing but this time passing ome.model.annotations.FileAnnotation
result = iMetadata.loadSpecifiedAnnotations(FILE_ANNOTATION, include,
exclude, param);
assertNotNull(result);
i = result.iterator();
count = 0;
while (i.hasNext()) {
o = i.next();
if (o != null && o instanceof FileAnnotation) {
r = (FileAnnotation) o;
count++;
if (r.getId().getValue() == data.getId().getValue()) {
assertEquals(r.getFile().getId().getValue(), of.getId()
.getValue());
assertEquals(r.getFile().getName().getValue(), of.getName()
.getValue());
assertEquals(r.getFile().getPath().getValue(), of.getPath()
.getValue());
}
}
}
assertTrue(count > 0);
assertEquals(count, result.size());
}
/**
* Tests the retrieval of annotations using name space constraints.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadSpecifiedAnnotationsFileAnnotationNsConditions()
throws Exception {
OriginalFile of = (OriginalFile) iUpdate.saveAndReturnObject(mmFactory
.createOriginalFile());
assertNotNull(of);
String ns = "include";
FileAnnotationI fa = new FileAnnotationI();
fa.setFile(of);
fa.setNs(rstring(ns));
FileAnnotation data = (FileAnnotation) iUpdate.saveAndReturnObject(fa);
assertNotNull(data);
Parameters param = new Parameters();
List<String> include = new ArrayList<String>();
include.add(ns);
List<String> exclude = new ArrayList<String>();
// First test the include condition
List<Annotation> result = iMetadata.loadSpecifiedAnnotations(
FileAnnotation.class.getName(), include, exclude, param);
assertNotNull(result);
Iterator<Annotation> i = result.iterator();
Annotation o;
FileAnnotation r;
while (i.hasNext()) {
o = i.next();
if (o instanceof FileAnnotation) {
r = (FileAnnotation) o;
assertNotNull(r.getNs());
assertEquals(ns, r.getNs().getValue());
}
}
// now test the exclude condition
include.clear();
// List of name
exclude.add(ns);
result = iMetadata.loadSpecifiedAnnotations(
FileAnnotation.class.getName(), include, exclude, param);
assertNotNull(result);
i = result.iterator();
int count = 0;
while (i.hasNext()) {
o = i.next();
if (o instanceof FileAnnotation) {
r = (FileAnnotation) o;
if (r.getNs() != null) {
if (ns.equals(r.getNs().getValue()))
count++;
}
}
}
assertEquals(count, 0);
}
/**
* Tests the retrieval of annotations of different types i.e. tag, comment,
* boolean, long and the conversion into the corresponding
* <code>omero.gateway.model</code> object.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadSpecifiedAnnotationsVariousTypes() throws Exception {
TagAnnotation tag = new TagAnnotationI();
tag.setTextValue(rstring("tag"));
TagAnnotation tagReturned = (TagAnnotation) iUpdate
.saveAndReturnObject(tag);
Parameters param = new Parameters();
List<String> include = new ArrayList<String>();
List<String> exclude = new ArrayList<String>();
// First test the include condition
List<Annotation> result = iMetadata.loadSpecifiedAnnotations(
TagAnnotation.class.getName(), include, exclude, param);
assertNotNull(result);
Iterator<Annotation> i = result.iterator();
int count = 0;
TagAnnotationData tagData = null;
Annotation annotation;
while (i.hasNext()) {
annotation = i.next();
if (annotation instanceof TagAnnotation)
count++;
if (annotation.getId().getValue() == tagReturned.getId().getValue())
tagData = new TagAnnotationData(tagReturned);
}
assertEquals(result.size(), count);
assertNotNull(tagData);
// comment
CommentAnnotation comment = new CommentAnnotationI();
comment.setTextValue(rstring("comment"));
CommentAnnotation commentReturned = (CommentAnnotation) iUpdate
.saveAndReturnObject(comment);
result = iMetadata.loadSpecifiedAnnotations(
CommentAnnotation.class.getName(), include, exclude, param);
assertNotNull(result);
count = 0;
TextualAnnotationData commentData = null;
i = result.iterator();
while (i.hasNext()) {
annotation = i.next();
if (annotation instanceof CommentAnnotation)
count++;
if (annotation.getId().getValue() == commentReturned.getId()
.getValue())
commentData = new TextualAnnotationData(commentReturned);
}
assertEquals(result.size(), count);
assertNotNull(commentData);
// boolean
BooleanAnnotation bool = new BooleanAnnotationI();
bool.setBoolValue(rbool(true));
BooleanAnnotation boolReturned = (BooleanAnnotation) iUpdate
.saveAndReturnObject(bool);
result = iMetadata.loadSpecifiedAnnotations(
BooleanAnnotation.class.getName(), include, exclude, param);
assertNotNull(result);
count = 0;
BooleanAnnotationData boolData = null;
i = result.iterator();
while (i.hasNext()) {
annotation = i.next();
if (annotation instanceof BooleanAnnotation)
count++;
if (annotation.getId().getValue() == boolReturned.getId()
.getValue())
boolData = new BooleanAnnotationData(boolReturned);
}
assertEquals(result.size(), count);
assertNotNull(boolData);
// long
LongAnnotation l = new LongAnnotationI();
l.setLongValue(rlong(1));
LongAnnotation lReturned = (LongAnnotation) iUpdate
.saveAndReturnObject(l);
result = iMetadata.loadSpecifiedAnnotations(
LongAnnotation.class.getName(), include, exclude, param);
assertNotNull(result);
count = 0;
LongAnnotationData lData = null;
i = result.iterator();
while (i.hasNext()) {
annotation = i.next();
if (annotation instanceof LongAnnotation)
count++;
if (annotation.getId().getValue() == lReturned.getId().getValue())
lData = new LongAnnotationData(lReturned);
}
assertEquals(result.size(), count);
assertNotNull(lData);
// double
DoubleAnnotation d = new DoubleAnnotationI();
d.setDoubleValue(rdouble(1));
DoubleAnnotation dReturned = (DoubleAnnotation) iUpdate
.saveAndReturnObject(d);
result = iMetadata.loadSpecifiedAnnotations(
DoubleAnnotation.class.getName(), include, exclude, param);
assertNotNull(result);
count = 0;
DoubleAnnotationData dData = null;
i = result.iterator();
while (i.hasNext()) {
annotation = i.next();
if (annotation instanceof DoubleAnnotation)
count++;
if (annotation.getId().getValue() == dReturned.getId().getValue())
dData = new DoubleAnnotationData(dReturned);
}
assertEquals(result.size(), count);
assertNotNull(dData);
}
/**
* Tests the retrieval of tag sets
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadTagSetsNoOrphan() throws Exception {
long self = iAdmin.getEventContext().userId;
// Create a tag set.
TagAnnotation tagSet = new TagAnnotationI();
tagSet.setTextValue(rstring("tagSet"));
tagSet.setNs(rstring(TagAnnotationData.INSIGHT_TAGSET_NS));
TagAnnotation tagSetReturned = (TagAnnotation) iUpdate
.saveAndReturnObject(tagSet);
// create a tag and link it to the tag set
TagAnnotation tag = new TagAnnotationI();
tag.setTextValue(rstring("tag"));
TagAnnotation tagReturned = (TagAnnotation) iUpdate
.saveAndReturnObject(tag);
AnnotationAnnotationLinkI link = new AnnotationAnnotationLinkI();
link.setChild(tagReturned);
link.setParent(tagSetReturned);
// save the link.
iUpdate.saveAndReturnObject(link);
ParametersI param = new ParametersI();
param.exp(rlong(self));
param.noOrphan(); // no tag loaded
List<IObject> result = iMetadata.loadTagSets(param);
assertNotNull(result);
Iterator<IObject> i = result.iterator();
TagAnnotationData data;
int count = 0;
String ns;
while (i.hasNext()) {
data = new TagAnnotationData((TagAnnotation) i.next());
ns = data.getNameSpace();
if (ns != null && TagAnnotationData.INSIGHT_TAGSET_NS.equals(ns)) {
count++;
}
}
assertEquals(result.size(), count);
}
/**
* Tests the retrieval of tag sets
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadTagSetsAndOrphan() throws Exception {
long self = iAdmin.getEventContext().userId;
// Create a tag set.
TagAnnotation tagSet = new TagAnnotationI();
tagSet.setTextValue(rstring("tagSet"));
tagSet.setNs(rstring(TagAnnotationData.INSIGHT_TAGSET_NS));
TagAnnotation tagSetReturned = (TagAnnotation) iUpdate
.saveAndReturnObject(tagSet);
// create a tag and link it to the tag set
TagAnnotation tag = new TagAnnotationI();
tag.setTextValue(rstring("tag"));
TagAnnotation tagReturned = (TagAnnotation) iUpdate
.saveAndReturnObject(tag);
AnnotationAnnotationLinkI link = new AnnotationAnnotationLinkI();
link.setChild(tagReturned);
link.setParent(tagSetReturned);
tag = new TagAnnotationI();
tag.setTextValue(rstring("tag2"));
TagAnnotation orphaned = (TagAnnotation) iUpdate
.saveAndReturnObject(tag);
// save the link.
iUpdate.saveAndReturnObject(link);
List<Long> tagsIds = new ArrayList<Long>();
tagsIds.add(orphaned.getId().getValue());
ParametersI param = new ParametersI();
param.exp(rlong(self));
param.orphan(); // no tag loaded
List<IObject> result = iMetadata.loadTagSets(param);
assertNotNull(result);
Iterator<IObject> i = result.iterator();
TagAnnotationData data;
int count = 0;
int orphan = 0;
String ns;
while (i.hasNext()) {
data = new TagAnnotationData((TagAnnotation) i.next());
ns = data.getNameSpace();
if (ns != null && TagAnnotationData.INSIGHT_TAGSET_NS.equals(ns)) {
count++;
} else {
if (tagsIds.contains(data.getId()))
orphan++;
}
}
assertEquals(orphan, tagsIds.size());
assertTrue(count > 0);
}
/**
* Tests the retrieval of tag sets. The tag set has a tag and a comment.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadTagSets() throws Exception {
long self = iAdmin.getEventContext().userId;
// Create a tag set.
TagAnnotation tagSet = new TagAnnotationI();
tagSet.setTextValue(rstring("tagSet"));
tagSet.setNs(rstring(TagAnnotationData.INSIGHT_TAGSET_NS));
TagAnnotation tagSetReturned = (TagAnnotation) iUpdate
.saveAndReturnObject(tagSet);
// create a tag and link it to the tag set
TagAnnotation tag = new TagAnnotationI();
tag.setTextValue(rstring("tag"));
TagAnnotation tagReturned = (TagAnnotation) iUpdate
.saveAndReturnObject(tag);
AnnotationAnnotationLinkI link = new AnnotationAnnotationLinkI();
link.setChild(tagReturned);
link.setParent(tagSetReturned);
// save the link.
iUpdate.saveAndReturnObject(link);
CommentAnnotation comment = new CommentAnnotationI();
comment.setTextValue(rstring("comment"));
comment = (CommentAnnotation) iUpdate.saveAndReturnObject(comment);
link = new AnnotationAnnotationLinkI();
link.setChild(comment);
link.setParent(tagSetReturned);
iUpdate.saveAndReturnObject(link);
ParametersI param = new ParametersI();
param.exp(rlong(self));
param.orphan(); // no tag loaded
List<IObject> result = iMetadata.loadTagSets(param);
assertNotNull(result);
Iterator<IObject> i = result.iterator();
TagAnnotationData data;
int count = 0;
int orphan = 0;
String ns;
while (i.hasNext()) {
tag = (TagAnnotation) i.next();
data = new TagAnnotationData(tag);
ns = data.getNameSpace();
if (ns != null && TagAnnotationData.INSIGHT_TAGSET_NS.equals(ns)) {
if (data.getId() == tagSetReturned.getId().getValue()) {
assertEquals(tag.sizeOfAnnotationLinks(), 1);
assertEquals(data.getTags().size(), 1);
List l = tag.linkedAnnotationList();
assertEquals(l.size(), 1);
TagAnnotationData child = (TagAnnotationData) l.get(0);
assertEquals(child.getId(), tagReturned.getId().getValue());
}
}
}
}
/**
* Tests the retrieval of annotations used but not owned.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadAnnotationsUsedNotOwned() throws Exception {
//
IAdminPrx svc = root.getSession().getAdminService();
String uuid = UUID.randomUUID().toString();
String uuid2 = UUID.randomUUID().toString();
Experimenter e1 = new ExperimenterI();
e1.setOmeName(rstring(uuid));
e1.setFirstName(rstring("integration"));
e1.setLastName(rstring("tester"));
e1.setLdap(rbool(false));
Experimenter e2 = new ExperimenterI();
e2.setOmeName(rstring(uuid2));
e2.setFirstName(rstring("integration"));
e2.setLastName(rstring("tester"));
e2.setLdap(rbool(false));
ExperimenterGroup g = new ExperimenterGroupI();
g.setName(rstring(uuid));
g.setLdap(rbool(false));
g.getDetails().setPermissions(new PermissionsI("rwrw--"));
g = svc.getGroup(svc.createGroup(g));
long id1 = newUserInGroupWithPassword(e1, g, uuid);
long id2 = newUserInGroupWithPassword(e2, g, uuid2);
svc.setDefaultGroup(svc.getExperimenter(id1), g);
svc.setDefaultGroup(svc.getExperimenter(id2), g);
client = new omero.client();
ServiceFactoryPrx f = client.createSession(uuid2, uuid2);
// Create a tag annotation as another user.
TagAnnotation tag = new TagAnnotationI();
tag.setTextValue(rstring("tag1"));
IObject tagData = f.getUpdateService().saveAndReturnObject(tag);
assertNotNull(tagData);
// make sure we are not the owner of the tag.
assertEquals(tagData.getDetails().getOwner().getId().getValue(), id2);
client.closeSession();
f = client.createSession(uuid, uuid);
// Create an image.
Image img = (Image) f.getUpdateService().saveAndReturnObject(
mmFactory.simpleImage());
// Link the tag and the image.
ImageAnnotationLinkI link = new ImageAnnotationLinkI();
link.setChild((Annotation) tagData);
link.setParent(img);
// Save the link
f.getUpdateService().saveAndReturnObject(link);
List<IObject> result = f
.getMetadataService()
.loadAnnotationsUsedNotOwned(TagAnnotation.class.getName(), id1);
assertTrue(result.size() > 0);
Iterator<IObject> i = result.iterator();
IObject o;
int count = 0;
boolean found = false;
while (i.hasNext()) {
o = i.next();
if (o instanceof Annotation) { // make sure only retrieve
// annotations
count++;
if (o.getId().getValue() == tagData.getId().getValue())
found = true;
}
}
assertTrue(found);
assertEquals(result.size(), count);
client.closeSession();
}
/**
* Tests the retrieval of object linked to a given tag.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadTagContent() throws Exception {
TagAnnotation tag = new TagAnnotationI();
tag.setTextValue(rstring("tag1"));
Annotation tagData = (Annotation) iUpdate.saveAndReturnObject(tag);
Image img = (Image) iUpdate.saveAndReturnObject(mmFactory
.simpleImage());
// Link the tag and the image.
ImageAnnotationLinkI link = new ImageAnnotationLinkI();
link.setChild((Annotation) tagData.proxy());
link.setParent(img);
iUpdate.saveAndReturnObject(link);
Project pData = (Project) iUpdate.saveAndReturnObject(mmFactory
.simpleProjectData().asIObject());
ProjectAnnotationLinkI lp = new ProjectAnnotationLinkI();
lp.setChild((Annotation) tagData.proxy());
lp.setParent(pData);
iUpdate.saveAndReturnObject(lp);
Dataset dData = (Dataset) iUpdate.saveAndReturnObject(mmFactory
.simpleDatasetData().asIObject());
DatasetAnnotationLinkI dp = new DatasetAnnotationLinkI();
dp.setChild((Annotation) tagData.proxy());
dp.setParent(dData);
iUpdate.saveAndReturnObject(dp);
long self = iAdmin.getEventContext().userId;
ParametersI param = new ParametersI();
param.exp(rlong(self));
Map result = iMetadata.loadTagContent(
Arrays.asList(tagData.getId().getValue()), param);
assertNotNull(result);
List nodes = (List) result.get(tagData.getId().getValue());
assertNotNull(nodes);
Iterator<IObject> i = nodes.iterator();
IObject o;
int count = 0;
while (i.hasNext()) {
o = i.next();
if (o instanceof Image) {
if (o.getId().getValue() == img.getId().getValue())
count++;
} else if (o instanceof Dataset) {
if (o.getId().getValue() == dData.getId().getValue())
count++;
} else if (o instanceof Project) {
if (o.getId().getValue() == pData.getId().getValue())
count++;
}
}
assertEquals(nodes.size(), count);
}
/**
* Tests the retrieval of an instrument light sources of different types.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadInstrument() throws Exception {
Instrument instrument;
List<Detector> detectors;
List<Filter> filters;
List<FilterSet> filterSets;
List<Objective> objectives;
List<LightSource> lights;
List<OTF> otfs;
Detector detector;
Filter filter;
FilterSet fs;
Objective objective;
OTF otf;
LightSource light;
Laser laser;
Iterator j;
InstrumentData data;
for (int i = 0; i < ModelMockFactory.LIGHT_SOURCES.length; i++) {
instrument = mmFactory
.createInstrument(ModelMockFactory.LIGHT_SOURCES[i]);
instrument = (Instrument) iUpdate.saveAndReturnObject(instrument);
data = new InstrumentData(instrument);
instrument = iMetadata
.loadInstrument(instrument.getId().getValue());
data = new InstrumentData(instrument);
assertTrue(instrument.sizeOfDetector() > 0);
assertTrue(instrument.sizeOfDichroic() > 0);
assertTrue(instrument.sizeOfFilter() > 0);
assertTrue(instrument.sizeOfFilterSet() > 0);
assertEquals(instrument.sizeOfLightSource(), 1);
assertTrue(instrument.sizeOfObjective() > 0);
assertTrue(instrument.sizeOfOtf() > 0);
assertEquals(instrument.sizeOfDetector(), data.getDetectors()
.size());
assertEquals(instrument.sizeOfDichroic(), data.getDichroics()
.size());
assertEquals(instrument.sizeOfFilter(), data.getFilters().size());
assertEquals(instrument.sizeOfFilterSet(), data.getFilterSets()
.size());
assertEquals(instrument.sizeOfLightSource(), data.getLightSources()
.size());
assertEquals(instrument.sizeOfObjective(), data.getObjectives()
.size());
assertEquals(instrument.sizeOfOtf(), data.getOTF().size());
detectors = instrument.copyDetector();
j = detectors.iterator();
while (j.hasNext()) {
detector = (Detector) j.next();
assertNotNull(detector.getType());
}
filters = instrument.copyFilter();
j = filters.iterator();
while (j.hasNext()) {
filter = (Filter) j.next();
assertNotNull(filter.getType());
assertNotNull(filter.getTransmittanceRange());
}
filterSets = instrument.copyFilterSet();
j = filterSets.iterator();
while (j.hasNext()) {
fs = (FilterSet) j.next();
// assertNotNull(fs.getDichroic());
}
objectives = instrument.copyObjective();
j = objectives.iterator();
while (j.hasNext()) {
objective = (Objective) j.next();
assertNotNull(objective.getCorrection());
assertNotNull(objective.getImmersion());
}
otfs = instrument.copyOtf();
j = otfs.iterator();
while (j.hasNext()) {
otf = (OTF) j.next();
objective = otf.getObjective();
assertNotNull(otf.getPixelsType());
assertNotNull(otf.getFilterSet());
assertNotNull(objective);
assertNotNull(objective.getCorrection());
assertNotNull(objective.getImmersion());
}
lights = instrument.copyLightSource();
j = lights.iterator();
while (j.hasNext()) {
light = (LightSource) j.next();
if (light instanceof Laser) {
laser = (Laser) light;
assertNotNull(laser.getType());
assertNotNull(laser.getLaserMedium());
assertNotNull(laser.getPulse());
} else if (light instanceof Filament) {
assertNotNull(((Filament) light).getType());
} else if (light instanceof Arc) {
assertNotNull(((Arc) light).getType());
}
}
}
}
/**
* Tests the retrieval of an instrument light sources of different types.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadInstrumentWithMultipleLightSources() throws Exception {
Instrument instrument = mmFactory
.createInstrument(ModelMockFactory.LASER);
instrument.addLightSource(mmFactory.createFilament());
instrument.addLightSource(mmFactory.createArc());
instrument = (Instrument) iUpdate.saveAndReturnObject(instrument);
instrument = iMetadata.loadInstrument(instrument.getId().getValue());
assertNotNull(instrument);
List<LightSource> lights = instrument.copyLightSource();
assertEquals(3, lights.size());
Iterator<LightSource> i = lights.iterator();
LightSource src;
Laser laser;
while (i.hasNext()) {
src = i.next();
if (src instanceof Laser) {
laser = (Laser) src;
assertNotNull(laser.getType());
assertNotNull(laser.getLaserMedium());
assertNotNull(laser.getPulse());
} else if (src instanceof Filament) {
assertNotNull(((Filament) src).getType());
} else if (src instanceof Arc) {
assertNotNull(((Arc) src).getType());
}
}
}
/**
* Tests the retrieval of channel acquisition data. One using an instrument
* with one laser, the second time with a laser with a pump
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test(groups = "broken")
public void testLoadChannelAcquisitionData() throws Exception {
// create an instrument.
Boolean[] values = new Boolean[2];
values[0] = Boolean.valueOf(false);
values[1] = Boolean.valueOf(true);
for (int k = 0; k < values.length; k++) {
Image img = mmFactory.createImage();
img = (Image) iUpdate.saveAndReturnObject(img);
Pixels pixels = img.getPrimaryPixels();
long pixId = pixels.getId().getValue();
// method already tested in PixelsServiceTest
// make sure objects are loaded.
pixels = factory.getPixelsService().retrievePixDescription(pixId);
String pump = null;
if (values[k])
pump = ModelMockFactory.FILAMENT;
Instrument instrument = mmFactory.createInstrument(
ModelMockFactory.LASER, pump);
instrument = (Instrument) iUpdate.saveAndReturnObject(instrument);
assertNotNull(instrument);
// retrieve the detector.
ParametersI param = new ParametersI();
param.addLong("iid", instrument.getId().getValue());
String sql = "select d from Detector as d where d.instrument.id = :iid";
Detector detector = (Detector) iQuery.findByQuery(sql, param);
sql = "select d from FilterSet as d where d.instrument.id = :iid";
FilterSet filterSet = (FilterSet) iQuery.findByQuery(sql, param);
sql = "select d from Laser as d where d.instrument.id = :iid";
List<IObject> lasers = iQuery.findAllByQuery(sql, param);
Laser laser = (Laser) lasers.get(0);
sql = "select d from Dichroic as d where d.instrument.id = :iid";
Dichroic dichroic = (Dichroic) iQuery.findByQuery(sql, param);
sql = "select d from Objective as d where d.instrument.id = :iid";
Objective objective = (Objective) iQuery.findByQuery(sql, param);
sql = "select d from OTF as d where d.instrument.id = :iid";
OTF otf = (OTF) iQuery.findByQuery(sql, param);
assertNotNull(otf);
LogicalChannel lc;
Channel channel;
ContrastMethod cm;
Illumination illumination;
AcquisitionMode mode;
List<IObject> types = factory.getPixelsService()
.getAllEnumerations(ContrastMethod.class.getName());
cm = (ContrastMethod) types.get(0);
types = factory.getPixelsService().getAllEnumerations(
Illumination.class.getName());
illumination = (Illumination) types.get(0);
types = factory.getPixelsService().getAllEnumerations(
AcquisitionMode.class.getName());
mode = (AcquisitionMode) types.get(0);
List<Long> ids = new ArrayList<Long>();
for (int i = 0; i < pixels.getSizeC().getValue(); i++) {
channel = pixels.getChannel(i);
lc = channel.getLogicalChannel();
lc.setContrastMethod(cm);
lc.setIllumination(illumination);
lc.setMode(mode);
lc.setOtf(otf);
lc.setDetectorSettings(mmFactory
.createDetectorSettings(detector));
lc.setFilterSet(filterSet);
lc.setLightSourceSettings(mmFactory.createLightSettings(laser));
lc.setLightPath(mmFactory.createLightPath(null, dichroic, null));
lc = (LogicalChannel) iUpdate.saveAndReturnObject(lc);
assertNotNull(lc);
ids.add(lc.getId().getValue());
}
List<LogicalChannel> channels = iMetadata
.loadChannelAcquisitionData(ids);
assertEquals(channels.size(), pixels.getSizeC().getValue());
LogicalChannel loaded;
Iterator<LogicalChannel> j = channels.iterator();
LightSourceData l;
while (j.hasNext()) {
loaded = j.next();
assertNotNull(loaded);
ChannelAcquisitionData data = new ChannelAcquisitionData(loaded);
assertEquals(data.getDetector().getId(), detector.getId()
.getValue());
assertEquals(data.getFilterSet().getId(), filterSet.getId()
.getValue());
l = (LightSourceData) data.getLightSource();
assertEquals(l.getId(), laser.getId().getValue());
assertNotNull(l.getLaserMedium());
assertNotNull(l.getType());
if (values[k]) {
assertNotNull(((Laser) l.asIObject()).getPump());
}
assertNotNull(loaded.getDetectorSettings());
assertNotNull(loaded.getLightSourceSettings());
assertNotNull(loaded.getDetectorSettings().getBinning());
assertNotNull(loaded.getDetectorSettings().getDetector());
assertNotNull(loaded.getDetectorSettings().getDetector()
.getType());
assertNotNull(loaded.getLightPath());
assertEquals(data.getLightPath().getDichroic().getId(),
dichroic.getId().getValue());
assertNotNull(data.getContrastMethod());
assertNotNull(data.getIllumination());
assertNotNull(data.getMode());
// OTF support
assertEquals(data.getOTF().getId(), otf.getId().getValue());
assertNotNull(loaded.getOtf());
assertEquals(loaded.getOtf().getId().getValue(), otf.getId()
.getValue());
assertNotNull(loaded.getOtf().getFilterSet());
assertNotNull(loaded.getOtf().getObjective());
assertEquals(loaded.getOtf().getFilterSet().getId().getValue(),
filterSet.getId().getValue());
assertEquals(loaded.getOtf().getObjective().getId().getValue(),
objective.getId().getValue());
assertNotNull(loaded.getOtf().getPixelsType());
}
}
}
/**
* Tests the retrieval of tag sets. One with a tag, one without.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadEmptyTagSets() throws Exception {
long self = iAdmin.getEventContext().userId;
// Create a tag set.
TagAnnotation tagSet = new TagAnnotationI();
tagSet.setTextValue(rstring("tagSet"));
tagSet.setNs(rstring(TagAnnotationData.INSIGHT_TAGSET_NS));
TagAnnotation tagSetReturned = (TagAnnotation) iUpdate
.saveAndReturnObject(tagSet);
// create a tag and link it to the tag set
TagAnnotation tag = new TagAnnotationI();
tag.setTextValue(rstring("tag"));
TagAnnotation tagReturned = (TagAnnotation) iUpdate
.saveAndReturnObject(tag);
AnnotationAnnotationLinkI link = new AnnotationAnnotationLinkI();
link.setChild(tagReturned);
link.setParent(tagSetReturned);
// save the link.
iUpdate.saveAndReturnObject(link);
tagSet = new TagAnnotationI();
tagSet.setTextValue(rstring("tagSet"));
tagSet.setNs(rstring(TagAnnotationData.INSIGHT_TAGSET_NS));
TagAnnotation tagSetReturned_2 = (TagAnnotation) iUpdate
.saveAndReturnObject(tagSet);
ParametersI param = new ParametersI();
param.exp(rlong(self));
param.orphan(); // no tag loaded
List<IObject> result = iMetadata.loadTagSets(param);
assertNotNull(result);
Iterator<IObject> i = result.iterator();
TagAnnotationData data;
String ns;
int count = 0;
while (i.hasNext()) {
tag = (TagAnnotation) i.next();
data = new TagAnnotationData(tag);
ns = data.getNameSpace();
if (ns != null && TagAnnotationData.INSIGHT_TAGSET_NS.equals(ns)) {
if (data.getId() == tagSetReturned.getId().getValue()
|| data.getId() == tagSetReturned_2.getId().getValue())
count++;
}
}
assertEquals(count, 2);
}
/**
* Tests the retrieval of tag sets with tags with a null ns and other with
* not null ns. The ns is not the tagset namespace
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadTagsNamepaceNullAndNotNull() throws Exception {
long self = iAdmin.getEventContext().userId;
// Create a tag set.
TagAnnotation tagSet = new TagAnnotationI();
tagSet.setTextValue(rstring("tagSet"));
tagSet.setNs(rstring(TagAnnotationData.INSIGHT_TAGSET_NS));
TagAnnotation tagSetReturned = (TagAnnotation) iUpdate
.saveAndReturnObject(tagSet);
// create a tag and link it to the tag set
TagAnnotation tag = new TagAnnotationI();
tag.setTextValue(rstring("tag"));
TagAnnotation tagReturned = (TagAnnotation) iUpdate
.saveAndReturnObject(tag);
AnnotationAnnotationLinkI link = new AnnotationAnnotationLinkI();
link.setChild(tagReturned);
link.setParent(tagSetReturned);
// save the link.
iUpdate.saveAndReturnObject(link);
List<Long> tagsIds = new ArrayList<Long>();
tag = new TagAnnotationI();
tag.setTextValue(rstring("tag2"));
TagAnnotation orphaned = (TagAnnotation) iUpdate
.saveAndReturnObject(tag);
tagsIds.add(orphaned.getId().getValue());
tag = new TagAnnotationI();
tag.setNs(rstring(""));
tag.setTextValue(rstring("tag2"));
orphaned = (TagAnnotation) iUpdate.saveAndReturnObject(tag);
tagsIds.add(orphaned.getId().getValue());
ParametersI param = new ParametersI();
param.exp(rlong(self));
param.orphan(); // no tag loaded
List<IObject> result = iMetadata.loadTagSets(param);
assertNotNull(result);
Iterator<IObject> i = result.iterator();
TagAnnotationData data;
int count = 0;
int orphan = 0;
String ns;
while (i.hasNext()) {
data = new TagAnnotationData((TagAnnotation) i.next());
ns = data.getNameSpace();
if (ns != null) {
if (TagAnnotationData.INSIGHT_TAGSET_NS.equals(ns)) {
if (tagSetReturned.getId().getValue() == data.getId())
count++;
}
}
if (tagsIds.contains(data.getId()))
orphan++;
}
assertEquals(orphan, tagsIds.size());
assertEquals(count, 1);
}
/**
* Tests the creation of file annotation with an original file and load it.
* Loads the annotation using the <code>loadSpecifiedAnnotations</code>
* method. Converts the file annotation into its corresponding Pojo Object
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadSpecifiedAnnotationsFileAnnotationConvertToPojo()
throws Exception {
OriginalFile of = (OriginalFile) iUpdate.saveAndReturnObject(mmFactory
.createOriginalFile());
assertNotNull(of);
FileAnnotationI fa = new FileAnnotationI();
fa.setFile(of);
FileAnnotation data = (FileAnnotation) iUpdate.saveAndReturnObject(fa);
assertNotNull(data);
Parameters param = new Parameters();
List<String> include = new ArrayList<String>();
List<String> exclude = new ArrayList<String>();
List<Annotation> result = iMetadata.loadSpecifiedAnnotations(
FileAnnotation.class.getName(), include, exclude, param);
assertNotNull(result);
Iterator<Annotation> i = result.iterator();
Annotation o;
int count = 0;
FileAnnotationData pojo;
while (i.hasNext()) {
o = i.next();
if (o instanceof FileAnnotation) {
pojo = new FileAnnotationData((FileAnnotation) o);
count++;
if (pojo.getId() == data.getId().getValue()) {
assertEquals(pojo.getFileID(), of.getId().getValue());
assertEquals(pojo.getFileName(), of.getName().getValue());
assertEquals(pojo.getFilePath(), of.getPath().getValue());
}
}
}
assertTrue(count > 0);
assertEquals(count, result.size());
}
/**
* Tests the retrieval of annotations with and without namespaces. Exclude
* the annotation with a given name space.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadSpecifiedAnnotationsFileAnnotationNS() throws Exception {
OriginalFile of = (OriginalFile) iUpdate.saveAndReturnObject(mmFactory
.createOriginalFile());
assertNotNull(of);
String ns = "include";
FileAnnotationI fa = new FileAnnotationI();
fa.setFile(of);
fa.setNs(rstring(ns));
FileAnnotation data = (FileAnnotation) iUpdate.saveAndReturnObject(fa);
assertNotNull(data);
fa = new FileAnnotationI();
fa.setFile(of);
FileAnnotation data2 = (FileAnnotation) iUpdate.saveAndReturnObject(fa);
assertNotNull(data2);
Parameters param = new Parameters();
// First test the include condition
List<Annotation> result = iMetadata.loadSpecifiedAnnotations(
FileAnnotation.class.getName(), new ArrayList<String>(),
Arrays.asList(ns), param);
assertNotNull(result);
Iterator<Annotation> i = result.iterator();
Annotation o;
FileAnnotation r;
FileAnnotationData pojo;
while (i.hasNext()) {
o = i.next();
pojo = new FileAnnotationData((FileAnnotation) o);
if (data2.getId().getValue() == pojo.getId()) {
assertEquals(pojo.getFileName(), of.getName().getValue());
assertEquals(pojo.getFilePath(), of.getPath().getValue());
}
}
}
/**
* Tests the retrieval of a specified long annotation linked to images.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadSpecifiedAnnotationLinkedToImages() throws Exception {
Image img1 = (Image) iUpdate.saveAndReturnObject(mmFactory
.simpleImage());
Image img2 = (Image) iUpdate.saveAndReturnObject(mmFactory
.simpleImage());
LongAnnotation data1 = new LongAnnotationI();
data1.setLongValue(rlong(1L));
data1 = (LongAnnotation) iUpdate.saveAndReturnObject(data1);
ImageAnnotationLink l = new ImageAnnotationLinkI();
l.setParent((Image) img1.proxy());
l.setChild((Annotation) data1.proxy());
iUpdate.saveAndReturnObject(l);
LongAnnotation data2 = new LongAnnotationI();
data2.setLongValue(rlong(1L));
data2 = (LongAnnotation) iUpdate.saveAndReturnObject(data2);
l = new ImageAnnotationLinkI();
l.setParent((Image) img2.proxy());
l.setChild((Annotation) data2.proxy());
iUpdate.saveAndReturnObject(l);
// Add a comment annotation
CommentAnnotation comment = new CommentAnnotationI();
comment.setTextValue(rstring("comment"));
comment = (CommentAnnotation) iUpdate.saveAndReturnObject(comment);
l = new ImageAnnotationLinkI();
l.setParent((Image) img2.proxy());
l.setChild((Annotation) comment.proxy());
iUpdate.saveAndReturnObject(l);
Parameters param = new Parameters();
List<String> include = new ArrayList<String>();
List<String> exclude = new ArrayList<String>();
Map<Long, List<Annotation>> map = iMetadata
.loadSpecifiedAnnotationsLinkedTo(LongAnnotation.class
.getName(), include, exclude, Image.class.getName(),
Arrays.asList(img1.getId().getValue(), img2.getId()
.getValue()), param);
assertNotNull(map);
assertEquals(map.size(), 2);
List<Annotation> result = map.get(img1.getId().getValue());
assertEquals(result.size(), 1);
assertEquals(result.get(0).getId().getValue(), data1.getId().getValue());
result = map.get(img2.getId().getValue());
assertEquals(result.size(), 1);
assertEquals(result.get(0).getId().getValue(), data2.getId().getValue());
}
/**
* Tests the retrieval of a specified comment annotation linked to datasets.
* All Types covered by other tests.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadSpecifiedAnnotationLinkedToDatasets() throws Exception {
String name = " 2&1 " + System.currentTimeMillis();
Dataset d1 = new DatasetI();
d1.setName(rstring(name));
d1 = (Dataset) iUpdate.saveAndReturnObject(d1);
Dataset d2 = new DatasetI();
d2.setName(rstring(name));
d2 = (Dataset) iUpdate.saveAndReturnObject(d2);
CommentAnnotation data1 = new CommentAnnotationI();
data1.setTextValue(rstring("1"));
data1 = (CommentAnnotation) iUpdate.saveAndReturnObject(data1);
DatasetAnnotationLink l = new DatasetAnnotationLinkI();
l.setParent((Dataset) d1.proxy());
l.setChild((Annotation) data1.proxy());
iUpdate.saveAndReturnObject(l);
CommentAnnotation data2 = new CommentAnnotationI();
data2.setTextValue(rstring("1"));
data2 = (CommentAnnotation) iUpdate.saveAndReturnObject(data2);
l = new DatasetAnnotationLinkI();
l.setParent((Dataset) d2.proxy());
l.setChild((Annotation) data2.proxy());
iUpdate.saveAndReturnObject(l);
LongAnnotation c = new LongAnnotationI();
c.setLongValue(rlong(1L));
c = (LongAnnotation) iUpdate.saveAndReturnObject(c);
l = new DatasetAnnotationLinkI();
l.setParent((Dataset) d2.proxy());
l.setChild((Annotation) c.proxy());
iUpdate.saveAndReturnObject(l);
Parameters param = new Parameters();
List<String> include = new ArrayList<String>();
List<String> exclude = new ArrayList<String>();
Map<Long, List<Annotation>> map = iMetadata
.loadSpecifiedAnnotationsLinkedTo(CommentAnnotation.class
.getName(), include, exclude, Dataset.class.getName(),
Arrays.asList(d1.getId().getValue(), d2.getId()
.getValue()), param);
assertNotNull(map);
assertEquals(map.size(), 2);
List<Annotation> result = map.get(d1.getId().getValue());
assertEquals(result.size(), 1);
assertEquals(result.get(0).getId().getValue(), data1.getId().getValue());
result = map.get(d2.getId().getValue());
assertEquals(result.size(), 1);
assertEquals(result.get(0).getId().getValue(), data2.getId().getValue());
}
/**
* Tests the retrieval of a specified term annotation linked to projects.
* All Types covered by other tests.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadSpecifiedAnnotationLinkedToProjects() throws Exception {
String name = " 2&1 " + System.currentTimeMillis();
Project d1 = new ProjectI();
d1.setName(rstring(name));
d1 = (Project) iUpdate.saveAndReturnObject(d1);
Project d2 = new ProjectI();
d2.setName(rstring(name));
d2 = (Project) iUpdate.saveAndReturnObject(d2);
TermAnnotation data1 = new TermAnnotationI();
data1.setTermValue(rstring("Term 1"));
data1 = (TermAnnotation) iUpdate.saveAndReturnObject(data1);
ProjectAnnotationLink l = new ProjectAnnotationLinkI();
l.setParent((Project) d1.proxy());
l.setChild((Annotation) data1.proxy());
iUpdate.saveAndReturnObject(l);
TermAnnotation data2 = new TermAnnotationI();
data2.setTermValue(rstring("Term 1"));
data2 = (TermAnnotation) iUpdate.saveAndReturnObject(data2);
l = new ProjectAnnotationLinkI();
l.setParent((Project) d2.proxy());
l.setChild((Annotation) data2.proxy());
iUpdate.saveAndReturnObject(l);
LongAnnotation c = new LongAnnotationI();
c.setLongValue(rlong(1L));
c = (LongAnnotation) iUpdate.saveAndReturnObject(c);
l = new ProjectAnnotationLinkI();
l.setParent((Project) d2.proxy());
l.setChild((Annotation) c.proxy());
iUpdate.saveAndReturnObject(l);
Parameters param = new Parameters();
List<String> include = new ArrayList<String>();
List<String> exclude = new ArrayList<String>();
Map<Long, List<Annotation>> map = iMetadata
.loadSpecifiedAnnotationsLinkedTo(TermAnnotation.class
.getName(), include, exclude, Project.class.getName(),
Arrays.asList(d1.getId().getValue(), d2.getId()
.getValue()), param);
assertNotNull(map);
assertEquals(map.size(), 2);
List<Annotation> result = map.get(d1.getId().getValue());
assertEquals(result.size(), 1);
assertEquals(result.get(0).getId().getValue(), data1.getId().getValue());
result = map.get(d2.getId().getValue());
assertEquals(result.size(), 1);
assertEquals(result.get(0).getId().getValue(), data2.getId().getValue());
}
/**
* Tests the retrieval of a specified tag annotation linked to screen. All
* Types covered by other tests.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadSpecifiedAnnotationLinkedToScreens() throws Exception {
String name = " 2&1 " + System.currentTimeMillis();
Screen d1 = new ScreenI();
d1.setName(rstring(name));
d1 = (Screen) iUpdate.saveAndReturnObject(d1);
Screen d2 = new ScreenI();
d2.setName(rstring(name));
d2 = (Screen) iUpdate.saveAndReturnObject(d2);
TagAnnotation data1 = new TagAnnotationI();
data1.setTextValue(rstring("Tag 1"));
data1 = (TagAnnotation) iUpdate.saveAndReturnObject(data1);
ScreenAnnotationLink l = new ScreenAnnotationLinkI();
l.setParent((Screen) d1.proxy());
l.setChild((Annotation) data1.proxy());
iUpdate.saveAndReturnObject(l);
TagAnnotation data2 = new TagAnnotationI();
data2.setTextValue(rstring("Tag 1"));
data2 = (TagAnnotation) iUpdate.saveAndReturnObject(data2);
l = new ScreenAnnotationLinkI();
l.setParent((Screen) d2.proxy());
l.setChild((Annotation) data2.proxy());
iUpdate.saveAndReturnObject(l);
LongAnnotation c = new LongAnnotationI();
c.setLongValue(rlong(1L));
c = (LongAnnotation) iUpdate.saveAndReturnObject(c);
l = new ScreenAnnotationLinkI();
l.setParent((Screen) d2.proxy());
l.setChild((Annotation) c.proxy());
iUpdate.saveAndReturnObject(l);
Parameters param = new Parameters();
List<String> include = new ArrayList<String>();
List<String> exclude = new ArrayList<String>();
Map<Long, List<Annotation>> map = iMetadata
.loadSpecifiedAnnotationsLinkedTo(
TagAnnotation.class.getName(), include, exclude,
Screen.class.getName(), Arrays.asList(d1.getId()
.getValue(), d2.getId().getValue()), param);
assertNotNull(map);
assertEquals(map.size(), 2);
List<Annotation> result = map.get(d1.getId().getValue());
assertEquals(result.size(), 1);
assertEquals(result.get(0).getId().getValue(), data1.getId().getValue());
result = map.get(d2.getId().getValue());
assertEquals(result.size(), 1);
assertEquals(result.get(0).getId().getValue(), data2.getId().getValue());
}
/**
* Tests the retrieval of a specified boolean annotation linked to plates.
* All Types covered by other tests.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadSpecifiedAnnotationLinkedToPlates() throws Exception {
String name = " 2&1 " + System.currentTimeMillis();
Plate d1 = new PlateI();
d1.setName(rstring(name));
d1 = (Plate) iUpdate.saveAndReturnObject(d1);
Plate d2 = new PlateI();
d2.setName(rstring(name));
d2 = (Plate) iUpdate.saveAndReturnObject(d2);
BooleanAnnotation data1 = new BooleanAnnotationI();
data1.setBoolValue(rbool(true));
data1 = (BooleanAnnotation) iUpdate.saveAndReturnObject(data1);
PlateAnnotationLink l = new PlateAnnotationLinkI();
l.setParent((Plate) d1.proxy());
l.setChild((Annotation) data1.proxy());
iUpdate.saveAndReturnObject(l);
BooleanAnnotation data2 = new BooleanAnnotationI();
data1.setBoolValue(rbool(true));
data2 = (BooleanAnnotation) iUpdate.saveAndReturnObject(data2);
l = new PlateAnnotationLinkI();
l.setParent((Plate) d2.proxy());
l.setChild((Annotation) data2.proxy());
iUpdate.saveAndReturnObject(l);
LongAnnotation c = new LongAnnotationI();
c.setLongValue(rlong(1L));
c = (LongAnnotation) iUpdate.saveAndReturnObject(c);
l = new PlateAnnotationLinkI();
l.setParent((Plate) d2.proxy());
l.setChild((Annotation) c.proxy());
iUpdate.saveAndReturnObject(l);
Parameters param = new Parameters();
List<String> include = new ArrayList<String>();
List<String> exclude = new ArrayList<String>();
Map<Long, List<Annotation>> map = iMetadata
.loadSpecifiedAnnotationsLinkedTo(BooleanAnnotation.class
.getName(), include, exclude, Plate.class.getName(),
Arrays.asList(d1.getId().getValue(), d2.getId()
.getValue()), param);
assertNotNull(map);
assertEquals(map.size(), 2);
List<Annotation> result = map.get(d1.getId().getValue());
assertEquals(result.size(), 1);
assertEquals(result.get(0).getId().getValue(), data1.getId().getValue());
result = map.get(d2.getId().getValue());
assertEquals(result.size(), 1);
assertEquals(result.get(0).getId().getValue(), data2.getId().getValue());
}
/**
* Tests the retrieval of a specified xml annotation linked to plates. All
* Types covered by other tests.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadSpecifiedAnnotationLinkedToPlateAcquisitions()
throws Exception {
String name = " 2&1 " + System.currentTimeMillis();
PlateAcquisition d1 = new PlateAcquisitionI();
d1.setName(rstring(name));
Plate p1 = new PlateI();
p1.setName(rstring(name));
d1.setPlate(p1);
d1 = (PlateAcquisition) iUpdate.saveAndReturnObject(d1);
PlateAcquisition d2 = new PlateAcquisitionI();
d2.setName(rstring(name));
d2.setPlate(p1);
d2 = (PlateAcquisition) iUpdate.saveAndReturnObject(d2);
XmlAnnotation data1 = new XmlAnnotationI();
data1.setTextValue(rstring("xml annotation"));
data1 = (XmlAnnotation) iUpdate.saveAndReturnObject(data1);
PlateAcquisitionAnnotationLink l = new PlateAcquisitionAnnotationLinkI();
l.setParent((PlateAcquisition) d1.proxy());
l.setChild((Annotation) data1.proxy());
iUpdate.saveAndReturnObject(l);
XmlAnnotation data2 = new XmlAnnotationI();
data1.setTextValue(rstring("xml annotation"));
data2 = (XmlAnnotation) iUpdate.saveAndReturnObject(data2);
l = new PlateAcquisitionAnnotationLinkI();
l.setParent((PlateAcquisition) d2.proxy());
l.setChild((Annotation) data2.proxy());
iUpdate.saveAndReturnObject(l);
LongAnnotation c = new LongAnnotationI();
c.setLongValue(rlong(1L));
c = (LongAnnotation) iUpdate.saveAndReturnObject(c);
l = new PlateAcquisitionAnnotationLinkI();
l.setParent((PlateAcquisition) d2.proxy());
l.setChild((Annotation) c.proxy());
iUpdate.saveAndReturnObject(l);
Parameters param = new Parameters();
List<String> include = new ArrayList<String>();
List<String> exclude = new ArrayList<String>();
Map<Long, List<Annotation>> map = iMetadata
.loadSpecifiedAnnotationsLinkedTo(
XmlAnnotation.class.getName(), include, exclude,
PlateAcquisition.class.getName(), Arrays.asList(d1
.getId().getValue(), d2.getId().getValue()),
param);
assertNotNull(map);
assertEquals(map.size(), 2);
List<Annotation> result = map.get(d1.getId().getValue());
assertEquals(result.size(), 1);
assertEquals(result.get(0).getId().getValue(), data1.getId().getValue());
result = map.get(d2.getId().getValue());
assertEquals(result.size(), 1);
assertEquals(result.get(0).getId().getValue(), data2.getId().getValue());
}
/**
* Tests the retrieval of a specified file annotation linked to wells. All
* Types covered by other tests.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadSpecifiedAnnotationLinkedToWells() throws Exception {
Plate p = (Plate) iUpdate.saveAndReturnObject(mmFactory.createPlate(2,
1, 1, 1, false));
ParametersI options = new ParametersI();
options.addLong("plateID", p.getId().getValue());
StringBuilder sb = new StringBuilder();
sb.append("select well from Well as well ");
sb.append("left outer join fetch well.plate as pt ");
sb.append("left outer join fetch well.wellSamples as ws ");
sb.append("left outer join fetch ws.image as img ");
sb.append("where pt.id = :plateID");
List results = iQuery.findAllByQuery(sb.toString(), options);
Well w1 = (Well) results.get(0);
Well w2 = (Well) results.get(1);
FileAnnotation data1 = new FileAnnotationI();
data1 = (FileAnnotation) iUpdate.saveAndReturnObject(data1);
WellAnnotationLink l = new WellAnnotationLinkI();
l.setParent((Well) w1.proxy());
l.setChild((Annotation) data1.proxy());
iUpdate.saveAndReturnObject(l);
FileAnnotation data2 = new FileAnnotationI();
data2 = (FileAnnotation) iUpdate.saveAndReturnObject(data2);
l = new WellAnnotationLinkI();
l.setParent((Well) w2.proxy());
l.setChild((Annotation) data2.proxy());
iUpdate.saveAndReturnObject(l);
LongAnnotation c = new LongAnnotationI();
c.setLongValue(rlong(1L));
c = (LongAnnotation) iUpdate.saveAndReturnObject(c);
l = new WellAnnotationLinkI();
l.setParent((Well) w2.proxy());
l.setChild((Annotation) c.proxy());
iUpdate.saveAndReturnObject(l);
Parameters param = new Parameters();
List<String> include = new ArrayList<String>();
List<String> exclude = new ArrayList<String>();
Map<Long, List<Annotation>> map = iMetadata
.loadSpecifiedAnnotationsLinkedTo(FileAnnotation.class
.getName(), include, exclude, Well.class.getName(),
Arrays.asList(w1.getId().getValue(), w2.getId()
.getValue()), param);
assertNotNull(map);
assertEquals(map.size(), 2);
List<Annotation> result = map.get(w1.getId().getValue());
assertEquals(result.size(), 1);
assertEquals(result.get(0).getId().getValue(), data1.getId().getValue());
result = map.get(w2.getId().getValue());
assertEquals(result.size(), 1);
assertEquals(result.get(0).getId().getValue(), data2.getId().getValue());
}
/**
* Tests the retrieval of specified xml annotations linked to an image. The
* one annotation has its ns set to <code>modulo</code> ns the other one
* does not.
*
* @throws Exception
* Thrown if an error occurred.
*/
@Test
public void testLoadSpecifiedAnnotationLinkedToImageWithModuloNS()
throws Exception {
Image img1 = (Image) iUpdate.saveAndReturnObject(mmFactory
.simpleImage());
XmlAnnotation data1 = new XmlAnnotationI();
data1.setTextValue(rstring("with modulo ns"));
data1.setNs(rstring(XMLAnnotationData.MODULO_NS));
data1 = (XmlAnnotation) iUpdate.saveAndReturnObject(data1);
ImageAnnotationLink l = new ImageAnnotationLinkI();
l.setParent((Image) img1.proxy());
l.setChild((Annotation) data1.proxy());
iUpdate.saveAndReturnObject(l);
XmlAnnotation data2 = new XmlAnnotationI();
data2.setTextValue(rstring("w/o modulo ns"));
data2 = (XmlAnnotation) iUpdate.saveAndReturnObject(data2);
l = new ImageAnnotationLinkI();
l.setParent((Image) img1.proxy());
l.setChild((Annotation) data2.proxy());
iUpdate.saveAndReturnObject(l);
Parameters param = new Parameters();
List<String> include = Arrays.asList(XMLAnnotationData.MODULO_NS);
List<String> exclude = new ArrayList<String>();
Map<Long, List<Annotation>> map = iMetadata
.loadSpecifiedAnnotationsLinkedTo(
XmlAnnotation.class.getName(), include, exclude,
Image.class.getName(),
Arrays.asList(img1.getId().getValue()), param);
assertNotNull(map);
assertEquals(map.size(), 1);
List<Annotation> result = map.get(img1.getId().getValue());
assertEquals(result.size(), 1);
assertEquals(result.get(0).getId().getValue(), data1.getId().getValue());
// now exclude ns
include = new ArrayList<String>();
exclude = Arrays.asList(XMLAnnotationData.MODULO_NS);
map = iMetadata.loadSpecifiedAnnotationsLinkedTo(
XmlAnnotation.class.getName(), include, exclude,
Image.class.getName(), Arrays.asList(img1.getId().getValue()),
param);
assertNotNull(map);
assertEquals(map.size(), 1);
result = map.get(img1.getId().getValue());
assertEquals(result.size(), 1);
assertEquals(result.get(0).getId().getValue(), data2.getId().getValue());
}
/**
* Creates a new finished upload job, without persisting it.
* @return the new job
* @throws ServerError unexpected
*/
private UploadJob getNewUploadJob() throws ServerError {
final Roles roles = iAdmin.getSecurityRoles();
final UploadJob uploadJob = new UploadJobI();
uploadJob.setUsername(rstring(roles.rootName));
uploadJob.setGroupname(rstring(roles.systemGroupName));
uploadJob.setSubmitted(rtime(System.currentTimeMillis()));
uploadJob.setScheduledFor(rtime(System.currentTimeMillis()));
uploadJob.setStarted(rtime(System.currentTimeMillis()));
uploadJob.setFinished(rtime(System.currentTimeMillis()));
uploadJob.setMessage(rstring(getClass().getSimpleName()));
uploadJob.setStatus((JobStatus) factory.getTypesService().getEnumeration(JobStatus.class.getName(), JobHandle.FINISHED));
uploadJob.setType(rstring("Test"));
return uploadJob;
}
/**
* Assert that the collection of IObjects is exactly original files of the given IDs.
* @param objects the IObjects expected to be original files
* @param expectedIdArray the expected original file IDs
*/
private static void assertOriginalFileIds(Collection<IObject> objects, Long... expectedIdArray) {
final Set<Long> expectedIds = Sets.newHashSet(expectedIdArray);
for (final IObject object : objects) {
assertTrue(expectedIds.remove(((OriginalFile) object).getId().getValue()));
}
assertTrue(expectedIds.isEmpty());
}
/**
* Test that the correct import logs are retrieved for given fileset and image IDs.
* @throws ServerError unexpected
* @throws CannotCreateSessionException unexpected
* @throws PermissionDeniedException unexpected
*/
@Test
public void testLoadImportLog() throws ServerError, CannotCreateSessionException, PermissionDeniedException
{
/* set up import records where image 1 is in fileset 1 and images 2 and 3 are in fileset 2 */
final long currentGroupId = iAdmin.getEventContext().groupId;
final Map<String, String> groupContext = ImmutableMap.of(Login.OMERO_GROUP, Long.toString(currentGroupId));
final IUpdatePrx iUpdateRoot = (IUpdatePrx) root.getSession().getUpdateService().ice_context(groupContext);
final IMetadataPrx iMetadata = (IMetadataPrx) root.getSession().getMetadataService().ice_context(groupContext);
Job uploadJob1 = getNewUploadJob();
uploadJob1 = (Job) iUpdateRoot.saveAndReturnObject(uploadJob1);
final long uploadJob1Id = uploadJob1.getId().getValue();
Job uploadJob2 = getNewUploadJob();
uploadJob2 = (Job) iUpdateRoot.saveAndReturnObject(uploadJob2);
final long uploadJob2Id = uploadJob2.getId().getValue();
OriginalFile importLog1 = new OriginalFileI();
importLog1.setMimetype(rstring("application/omero-log-file"));
importLog1.setName(rstring("import log"));
importLog1.setPath(rstring("import one"));
importLog1 = (OriginalFile) iUpdate.saveAndReturnObject(importLog1);
final long importLog1Id = importLog1.getId().getValue();
OriginalFile importLog2 = new OriginalFileI();
importLog2.setMimetype(rstring("application/omero-log-file"));
importLog2.setName(rstring("import log"));
importLog2.setPath(rstring("import two"));
importLog2 = (OriginalFile) iUpdate.saveAndReturnObject(importLog2);
final long importLog2Id = importLog2.getId().getValue();
JobOriginalFileLink jobOriginalFileLink;
jobOriginalFileLink = new JobOriginalFileLinkI();
jobOriginalFileLink.setParent(uploadJob1);
jobOriginalFileLink.setChild(importLog1);
iUpdate.saveAndReturnObject(jobOriginalFileLink);
jobOriginalFileLink = new JobOriginalFileLinkI();
jobOriginalFileLink.setParent(uploadJob2);
jobOriginalFileLink.setChild(importLog2);
iUpdate.saveAndReturnObject(jobOriginalFileLink);
uploadJob1 = (Job) iQuery.find(UploadJob.class.getName(), uploadJob1Id);
uploadJob2 = (Job) iQuery.find(UploadJob.class.getName(), uploadJob2Id);
Fileset fileset1 = newFileset();
fileset1.linkJob(uploadJob1);
fileset1 = (Fileset) iUpdate.saveAndReturnObject(fileset1);
final long fileset1Id = fileset1.getId().getValue();
Fileset fileset2 = newFileset();
fileset2.linkJob(uploadJob2);
fileset2 = (Fileset) iUpdate.saveAndReturnObject(fileset2);
final long fileset2Id = fileset2.getId().getValue();
Image image1 = new ImageI();
image1.setName(rstring("image alpha from fileset one"));
image1.setFileset(fileset1);
image1 = (Image) iUpdate.saveAndReturnObject(image1);
final long image1Id = image1.getId().getValue();
Image image2 = new ImageI();
image2.setName(rstring("image alpha from fileset two"));
image2.setFileset(fileset2);
image2 = (Image) iUpdate.saveAndReturnObject(image2);
final long image2Id = image2.getId().getValue();
Image image3 = new ImageI();
image3.setName(rstring("image beta from fileset two"));
image3.setFileset(fileset2);
image3 = (Image) iUpdate.saveAndReturnObject(image3);
final long image3Id = image3.getId().getValue();
Map<Long, List<IObject>> logFiles;
/* test import log retrieval by fileset ID */
logFiles = iMetadata.loadLogFiles(Fileset.class.getName(), ImmutableList.<Long>of());
assertTrue(logFiles.isEmpty());
logFiles = iMetadata.loadLogFiles(Fileset.class.getName(), ImmutableList.of(fileset1Id));
assertTrue(logFiles.size() == 1);
assertOriginalFileIds(logFiles.get(fileset1Id), importLog1Id);
logFiles = iMetadata.loadLogFiles(Fileset.class.getName(), ImmutableList.of(fileset2Id));
assertTrue(logFiles.size() == 1);
assertOriginalFileIds(logFiles.get(fileset2Id), importLog2Id);
logFiles = iMetadata.loadLogFiles(Fileset.class.getName(), ImmutableList.of(fileset1Id, fileset2Id));
assertTrue(logFiles.size() == 2);
assertOriginalFileIds(logFiles.get(fileset1Id), importLog1Id);
assertOriginalFileIds(logFiles.get(fileset2Id), importLog2Id);
/* test import log retrieval by image ID */
logFiles = iMetadata.loadLogFiles(Image.class.getName(), ImmutableList.<Long>of());
assertTrue(logFiles.isEmpty());
logFiles = iMetadata.loadLogFiles(Image.class.getName(), ImmutableList.of(image1Id));
assertTrue(logFiles.size() == 1);
assertOriginalFileIds(logFiles.get(image1Id), importLog1Id);
logFiles = iMetadata.loadLogFiles(Image.class.getName(), ImmutableList.of(image2Id));
assertTrue(logFiles.size() == 1);
assertOriginalFileIds(logFiles.get(image2Id), importLog2Id);
logFiles = iMetadata.loadLogFiles(Image.class.getName(), ImmutableList.of(image3Id));
assertTrue(logFiles.size() == 1);
assertOriginalFileIds(logFiles.get(image3Id), importLog2Id);
logFiles = iMetadata.loadLogFiles(Image.class.getName(), ImmutableList.of(image1Id, image2Id));
assertTrue(logFiles.size() == 2);
assertOriginalFileIds(logFiles.get(image1Id), importLog1Id);
assertOriginalFileIds(logFiles.get(image2Id), importLog2Id);
logFiles = iMetadata.loadLogFiles(Image.class.getName(), ImmutableList.of(image1Id, image3Id));
assertTrue(logFiles.size() == 2);
assertOriginalFileIds(logFiles.get(image1Id), importLog1Id);
assertOriginalFileIds(logFiles.get(image3Id), importLog2Id);
logFiles = iMetadata.loadLogFiles(Image.class.getName(), ImmutableList.of(image2Id, image3Id));
assertTrue(logFiles.size() == 2);
assertOriginalFileIds(logFiles.get(image2Id), importLog2Id);
assertOriginalFileIds(logFiles.get(image3Id), importLog2Id);
logFiles = iMetadata.loadLogFiles(Image.class.getName(), ImmutableList.of(image1Id, image2Id, image3Id));
assertTrue(logFiles.size() == 3);
assertOriginalFileIds(logFiles.get(image1Id), importLog1Id);
assertOriginalFileIds(logFiles.get(image2Id), importLog2Id);
assertOriginalFileIds(logFiles.get(image3Id), importLog2Id);
}
/**
* Test that import logs cannot be retrieved for unexpected root node types.
* @throws ServerError because of the given unexpected root node type
*/
@Test(expectedExceptions = ApiUsageException.class)
public void testLoadImportLogWrongRootType() throws ServerError {
iMetadata.loadLogFiles(WellSample.class.getName(), ImmutableList.<Long>of());
}
}