import java.util.Collections; import java.util.List; import java.util.Map; import omero.ServerError; import omero.api.IAdminPrx; import omero.api.IMetadataPrx; import omero.api.ServiceFactoryPrx; import omero.constants.namespaces.NSMEASUREMENT; import omero.grid.SharedResourcesPrx; import omero.grid.TablePrx; import omero.model.FileAnnotation; import omero.model.IObject; /** * Take an image id and find any attached measurements. If no image id is * passed, then will use {@link MeasurementTable} to create one. */ public class FindMeasurements { /** * The main method takes an optional long from the command line which should * be the id of a valid Image for the current user. If no id is provided, a * test image is created. */ public static void main(String[] args) throws Exception { // Configuration for the client object in this case comes // from the ICE_CONFIG environment variable. omero.client client = new omero.client(); client.createSession(); try { // Get or create a valid Image id. long imageId; if (args.length > 0) { imageId = Long.valueOf(args[0]); } else { MeasurementTable table = new MeasurementTable(client, null); imageId = table.imageId; } new FindMeasurements(client, imageId); } finally { client.closeSession(); System.exit(0); } } /** * Finds all measurement tables attached to the given image. */ FindMeasurements(omero.client client, long imageId) throws ServerError { final ServiceFactoryPrx factory = client.getSession(); final IAdminPrx admin = factory.getAdminService(); final SharedResourcesPrx resources = factory.sharedResources(); final IMetadataPrx metadata = factory.getMetadataService(); final long userId = admin.getEventContext().userId; final Map<Long, List<IObject>> annotations = metadata.loadAnnotations( "Image", Collections.singletonList(imageId), null, null, null); //Collections.singletonList("Annotation"), // Ways to limit the annotations //Collections.singletonList(userId), null); // by type or user. if (!annotations.containsKey(imageId)) { System.out.println("No annotations."); return; } for (IObject obj : annotations.get(imageId)) { FileAnnotation ann = (FileAnnotation) obj; if (NSMEASUREMENT.value.equals(ann.getNs().getValue())) { TablePrx table = resources.openTable(ann.getFile()); try { System.out.println(String.format("Found measurement file %s: rows=%s", table .getOriginalFile().getId().getValue(), table.getNumberOfRows())); } finally { table.close(); } } } } }