ome / omero-figure

An OMERO.web app for creating Figures from images in OMERO
http://figure.openmicroscopy.org
GNU Affero General Public License v3.0
15 stars 30 forks source link

Annotation inheritance support #525

Closed Tom-TBT closed 4 months ago

Tom-TBT commented 8 months ago

This PR is at a testing stage and relies on a changed function (api_annotations) from omero-web, inside a parallel PR.

Inherited annotations are decompressed, and the ann.link.parent is changed to the inheritor object. Like so, all further handling of the annotation is the same. No difference if the annotation was on the current image or on a parent object.

The implementation also checks that the query's result has the inherited annotations.

will-moore commented 4 months ago

Hi Tom, Apologies for the delay, but I'm just getting around to testing this now...

I'm finding that if I select multiple images from the same Dataset (and Project), and add labels from KVPs, the KVPs that are on the parents only get applied to one of the images.

E.g. here the 3 images are in the same Dataset, but the Project/Dataset KVPs are all only shown on 1 image. The colour and test_KVP are on the images themselves, but all the others are on the Project/Dataset.

Screenshot 2024-02-15 at 11 23 59

After a bit of digging, I worked out what's going on... When you do:

let clone_ann = { ...ann };

this doesn't do a deep copy. Only a shallow copy. So the clone_ann.link.parent is not copied. So when you do

clone_ann.link.parent.id = lineage[j].id;

each time in the loop, you are updating the same object. You need to do a deep copy, and it looks like the easiest is to do:

let clone_ann = JSON.parse(JSON.stringify(ann));
Tom-TBT commented 4 months ago

Thank you Will, I could reproduce the error and your solution fixed it.