/
collectionmethods.cpp
65 lines (55 loc) · 2.23 KB
/
collectionmethods.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <omero/model/DatasetI.h>
#include <omero/model/DatasetImageLinkI.h>
#include <omero/model/EventI.h>
#include <omero/model/ImageI.h>
#include <omero/model/PixelsI.h>
using namespace omero::model;
int main(int argc, char* argv[]) {
ImagePtr image = new ImageI(1, true);
image->getDetails()->setUpdateEvent( new EventI(1L, false) );
// On creation, all collections are
// initialized to empty, and can be added
// to.
assert(image->sizeOfDatasetLinks() == 0);
DatasetPtr dataset = new DatasetI(1L, false);
DatasetImageLinkPtr link = image->linkDataset(dataset);
assert(image->sizeOfDatasetLinks() == 1);
// If you want to work with this collection,
// you'll need to get a copy.
ImageDatasetLinksSeq links = image->copyDatasetLinks();
// When you are done working with it, you can
// unload the datasets, assuming the changes
// have been persisted to the server.
image->unloadDatasetLinks();
assert(image->sizeOfDatasetLinks() < 0);
try {
image->linkDataset( new DatasetI() );
} catch (...) {
// Can't access an unloaded collection
}
// The reload...() method allows one instance
// to take over a collection from another, if it
// has been properly initialized on the server.
// sameImage will have it's collection unloaded.
ImagePtr sameImage = new ImageI(1L, true);
sameImage->getDetails()->setUpdateEvent( new EventI(1L, false) );
sameImage->linkDataset( new DatasetI(1L, false) );
image->reloadDatasetLinks( sameImage );
assert(image->sizeOfDatasetLinks() == 1);
assert(sameImage->sizeOfDatasetLinks() < 0);
// If you would like to remove all the member
// elements from a collection, don't unload it
// but "clear" it.
image->clearDatasetLinks();
// Saving this to the database will remove
// all dataset links!
// Finally, all collections can be unloaded
// to use an instance as a single row in the db.
image->unloadCollections();
// Ordered collections have slightly different methods.
image = new ImageI(1L, true);
image->addPixels( new PixelsI() );
image->getPixels(0);
image->getPrimaryPixels(); // Same thing
image->removePixels( image->getPixels(0) );
}