0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
1 % Retrieve a ltpda_uo from a repository
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
3 %
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
4 % FUNCTION: fromRepository
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
5 %
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
6 % DESCRIPTION: Retrieve a ltpda_uo from a repository
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
7 %
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
8 % CALL: obj = fromRepository(pl)
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
9 %
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
10 % PARAMETER: pl: Parameter list object
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
11 %
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
12 % VERSION: $Id: fromRepository.m,v 1.8 2010/10/29 16:09:11 ingo Exp $
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
13 %
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
14 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
22
|
15 function coll = fromRepository(coll, pl)
|
|
16
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
17 VERSION = '$Id: fromRepository.m,v 1.8 2010/10/29 16:09:11 ingo Exp $';
|
22
|
18
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
19 % get object info
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
20 ii = collection.getInfo('collection', 'From Repository');
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
21 % Set the method version string in the minfo object
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
22 ii.setMversion([VERSION '-->' ii.mversion]);
|
22
|
23
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
24 plh = copy(pl, 1);
|
22
|
25
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
26 % Get parameters
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
27 ids = find(pl, 'id');
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
28 cids = find(pl, 'cid');
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
29 bin = find(pl, 'binary');
|
22
|
30
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
31 collFound = false;
|
22
|
32
|
24
056f8e1e995e
Properly record history in fromRepository constructors
Daniele Nicolodi <nicolodi@science.unitn.it>
diff
changeset
|
33 % check if using binary download
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
34 bin = utils.prog.yes2true(bin);
|
22
|
35
|
|
36 % database connection
|
|
37 conn = LTPDADatabaseConnectionManager().connect(pl);
|
|
38
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
39 if ~isempty(cids)
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
40 for kk=1:numel(cids)
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
41 cid = cids(kk);
|
22
|
42 ids = utils.repository.getCollectionIDs(conn, cid);
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
43 end
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
44 end
|
22
|
45
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
46 % Get each ID
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
47 Nids = length(ids);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
48 collObjs = {};
|
22
|
49
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
50 for kk=1:Nids
|
22
|
51
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
52 %---- copy the input plist because each object should get an other plist
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
53 plh = copy(pl, 1);
|
22
|
54
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
55 %---- This id
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
56 id = ids(kk);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
57 utils.helper.msg(utils.const.msg.OPROC2, 'retrieving ID %d', id);
|
22
|
58
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
59 try
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
60 %---- call database constructor
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
61 if bin
|
22
|
62 robj = ltpda_uo.retrieve(conn, 'binary', id);
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
63 else
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
64 robj = ltpda_uo.retrieve(conn, id);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
65 end
|
22
|
66
|
24
056f8e1e995e
Properly record history in fromRepository constructors
Daniele Nicolodi <nicolodi@science.unitn.it>
diff
changeset
|
67 %---- Set connection parameters in the plist
|
056f8e1e995e
Properly record history in fromRepository constructors
Daniele Nicolodi <nicolodi@science.unitn.it>
diff
changeset
|
68 utils.repository.adjustPlist(conn, plh);
|
22
|
69
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
70 %---- Set only the ID of the current object to the plist
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
71 plh.pset('ID', id);
|
22
|
72
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
73 %---- Add history
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
74 robj.addHistoryWoChangingUUID(robj.getInfo(class(robj), 'From Repository'), plh, [], robj.hist);
|
22
|
75
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
76 %---- Add to output array
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
77 if isa(robj, 'collection')
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
78 if numel(ids) == 1
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
79 coll = robj;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
80 return
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
81 end
|
22
|
82
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
83 if numel(robj.objs)>0
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
84 collFound = true;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
85 collObjs = [collObjs; robj.objs(:)];
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
86 end
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
87 else
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
88 collObjs = [collObjs; {robj}];
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
89 end
|
22
|
90
|
|
91 catch ex
|
|
92 % close connection if we own it
|
|
93 if isempty(find(pl, 'conn'))
|
|
94 conn.close();
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
95 end
|
22
|
96 throw(ex)
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
97 end
|
22
|
98
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
99 end
|
22
|
100
|
|
101 % close connection if we own it
|
|
102 if isempty(find(pl, 'conn'))
|
|
103 conn.close();
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
104 end
|
22
|
105
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
106 if collFound
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
107 warning(sprintf(['!!! The output collection contains the contents of at least one retrieved collection.' ...
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
108 '\nThe history of those collection objects is discarded. The internal objects of those ' ...
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
109 'objects is retained.']));
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
110 end
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
111 if isempty(collObjs)
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
112 warning('!!! No objects were retrieved from the ids %s and/or collection id %s', mat2str(ids), mat2str(cid));
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
113 end
|
22
|
114
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
115 % Define collection-plist for the history
|
22
|
116 plh.pset('id', pl.find('id'));
|
|
117 plh.pset('cid', pl.find('cid'));
|
|
118
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
119 % Set properties from the plist
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
120 coll.setProperties(pl);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
121 coll.objs = collObjs;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
122 coll.addHistory(ii, plh, [], []);
|
22
|
123
|
0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
124 end
|