|
Provides methods for dealing with the core Pojos of OME. Included are: Projects, Datasets, Images.
The names of the methods correlate to how the function operates:
The options are used to add some constraints to the generic method e.g. load hierarchy trees images for a given user. This mechanism should give us enough flexibility to extend the API if necessary, e.g. in some cases we might want to retrieve the images with or without annotations
Most methods take such an options
map which is built
on the client-side using the sys::Parameters class. The
currently supported options are:
As outlined in TODO, the semantics of the Omero write API are based on three rules:
isLoaded()
returns
false are assumed filteredgetDetails().isFiltered(String collectionName)
returns
true are assumed filtered. TODO: should we accept isFiltered for
all fields?
For all write calls, the options map (see below) must contain the userId and the userGroupId for the newly created objects. TODO umask.
This method also retrieves the Experimenters linked to the objects in the tree.
Retrieves hierarchy trees rooted by a given node (unless orphan is specified -- See below)
This method also retrieves the Experimenters linked to the objects in the tree. Similarly, all Images will be linked to their Pixel objects if included.
Note that objects are never duplicated. For example, if an Experimenter owns all the objects in the retrieved tree, then those objects will be linked to the same instance of model::Experimenter. Or if an Image is contained in more than one Dataset in the retrieved tree, then all enclosing model::Dataset objects will point to the same model::Image object. And so on.
options
, otherwise an Exception
is thrown to prevent all images in the entire
database from being downloaded.annotator
,
leaves
, orphan
,
acquisition data
used.
acquisition data
is only relevant
for images and taken into account if the images
are loaded.
If rootNodeIds==null
,
experimenter|group
must be set and
filtering will be applied at the
Class-level; e.g. to retrieve a user's
Projects, or user's Datasets. If
rootNodeIds!=null
, the result will
be filtered by the
experimenter|group
at the
Image
and intermediate levels
if available.
Due to the amount of data potentially linked a
Screen/Plate, the leaves
option is
not taken into account when the root node is a
model::Screen.
orphan
implies that objects which
are not contained in an object of rootNodeType
should also be returned.a set of hierarchy trees. The requested node as
root and all of its descendants. The type of the
returned value will be rootNodeType
,
unless orphan
is specified in which
case objects of type rootNodeType
and
below may be returned.
Retrieves hierarchy trees in various hierarchies that contain the specified Images.
This method will look for all the containers containing the specified Images and then for all containers containing those containers and on up the container hierarchy.
This method returns a Set
with all root nodes
that were
found. Every root node is linked to the found objects and
so on until the leaf nodes, which are
model::Image objects. Note that the type of any
root node in the returned set can be the given
rootNodeType, any of its containees or an
model::Image.
For example, say that you pass in the ids of six Images:
i1, i2, i3, i4, i5, i6
.
If the P/D/I hierarchy in the DB looks like this:
| __p1__ | / \ | _d1_ _d2_ d3 | / \ / \ | | i1 i2 i3 i4 i5 i6
Then the returned set will contain
p1, d3, i5, i6
. All objects will be properly
linked up.
Finally, this method will only retrieve the nodes
that are connected in a tree to the specified leaf image
nodes. Back to the previous example, if d1
contained image img500
, then the returned
object would not contain img500
. In a
similar way, if p1
contained
ds300
and this dataset weren't linked to any of
the i1, i2, i3, i4, i5, i6
images, then
ds300
would not be part of the returned
tree rooted by p1
.
annotator
used.
experimenter|group
may be applied
at the top-level only or at each level in the
hierarchy, but will not apply to the leaf
(Image) level.A Set
with all root nodes that were
found.
Retrieve a user's (or all users') images within any given container. For example, all images in project, applying temporal filtering or pagination.
rootNodeType
Not null.leaves
.
experimenter|group
apply at the
Image level.
OPTIONS: - startTime and/or endTime should be
Timestamp.valueOf("YYYY-MM-DD hh:mm:ss.ms");
limit
and offset
are
applied at the Image-level. That is, calling
with Dataset.class, limit == 10 and offset == 0
will first perform one query to get an effective
set of rootNodeIds, then getImages will be
called with an effective rootNodeType of
Image.class and the new ids.
acquisition data
is only relevant
for images.A set of images.
Retrieves a user's images.
leaves
.
experimenter|group
apply at the
Image level and must be present.A set of images.
Retrieves images by options.
leaves
.
experimenter|group
apply at the
Image level and must be present.
OPTIONS:
- startTime and/or endTime should be
Timestamp.valueOf("YYYY-MM-DD hh:mm:ss.ms").
acquisition data
is only relevant
for images.A set of images.
Given a list of IDs of certain entity types, calculates which filesets are split such that a non-empty proper subset of their images are referenced, directly or indirectly, as being included. The return value lists both the fileset IDs and the image IDs in ascending order, the image ID lists separated by if they were included. Warning: following discussion in trac ticket 11019 the return type may be changed.
the partially included filesets
Counts the number of members in a collection for a given object. For example, if you wanted to retrieve the number of Images contained in a Dataset you would pass TODO.
A map from id integer to count integer
Retrieves a collection with all members initialized (loaded). This is useful when a collection has been nulled in a previous query.
public static final String
from the
IObject.classAn initialized collection.
Creates the specified data object.
A placeholder parent object is created if the data object is to be put in a collection.
For example, if the object is a Dataset
, we
first create a Project
as parent then we set
the Dataset parent as follows:
//pseudo-code TODO
Project p = new Project(id,false);
dataset.addProject(p);
then for each parent relationship a DataObject
ome::model::ILink is created.
the created object
Convenience method to save network calls. Loops over the array of IObjects calling {@code createDataObject}.
IObjects
Removes links between OmeroDataObjects e.g Project-Dataset, Dataset-Image Note that the objects themselves aren't deleted, only the Link objects.
Convenience method for creating links. Functionality also available from {@code createDataObject}
the created links
Updates a data object.
To link or unlink objects to the specified object, we
should call the methods link or unlink. TODO Or do we use
for example dataset.setProjects(set of projects) to add.
Link has to be set as follows dataset→project and
project→dataset.
Alternatively, you can make sure that the collection is
exactly how it should be in the database. If you
can't guarantee this, it's best to send all your
collections back as null
created data object
Convenience method to save network calls. Loops over the array of IObjects calling {@code updateDataObject}.
created data objects.
|