/* * $Id$ * * Copyright 2006-2010 University of Dundee. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package integration; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertNull; import static org.testng.AssertJUnit.assertTrue; import java.awt.Point; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Map; import omero.api.IRenderingSettingsPrx; import omero.model.Channel; import omero.model.ChannelBinding; import omero.model.Dataset; import omero.model.DatasetI; import omero.model.DatasetImageLink; import omero.model.DatasetImageLinkI; import omero.model.IObject; import omero.model.Image; import omero.model.Pixels; import omero.model.Plate; import omero.model.PlateAcquisition; import omero.model.Project; import omero.model.ProjectDatasetLink; import omero.model.ProjectDatasetLinkI; import omero.model.RenderingDef; import omero.model.Screen; import omero.model.ScreenPlateLink; import omero.model.ScreenPlateLinkI; import omero.model.Well; import omero.model.WellSample; import omero.sys.EventContext; import omero.sys.ParametersI; import org.testng.annotations.Test; /** * Collections of tests for the <code>RenderingSettingsService</code> service. * * * @author Jean-Marie Burel      <a * href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a> * @author Donald MacDonald      <a * href="mailto:donald@lifesci.dundee.ac.uk" * >donald@lifesci.dundee.ac.uk</a> * @version 3.0 <small> (<b>Internal version:</b> $Revision: $Date: $) </small> * @since 3.0-Beta4 */ public class RenderingSettingsServiceTest extends AbstractServerTest { /** * Create an entire plate, uploading binary data for all the images. * * After recent changes on the server to check for existing binary data for * pixels, many resetDefaults methods tested below began returning null * since {@link omero.LockTimeout} exceptions were being thrown server-side. * By using omero.client.forEachTile, we can set the necessary data easily. * * @see ticket:5755 */ public Plate createBinaryPlate(int rows, int cols, int fields, int acquisitions) throws Exception { Plate plate = mmFactory.createPlate(rows, cols, fields, acquisitions, true); plate = (Plate) iUpdate.saveAndReturnObject(plate); for (Well well : plate.copyWells()) { for (WellSample ws : well.copyWellSamples()) { Image image = createBinaryImage(ws.getImage()); ws.setImage(image); } } return plate; } /** * Tests to set the default rendering settings for a set. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetDefaultInSetForPixels() throws Exception { Image image = createBinaryImage(); Pixels pixels = image.getPrimaryPixels(); IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); prx.setOriginalSettingsInSet(Pixels.class.getName(), Arrays.asList(pixels.getId().getValue())); // Pixels first List<Long> ids = new ArrayList<Long>(); ids.add(pixels.getId().getValue()); List<Long> v = prx.resetDefaultsInSet(Pixels.class.getName(), ids); assertNotNull(v); // check if we have settings now. ParametersI param = new ParametersI(); param.addLong("pid", pixels.getId().getValue()); String sql = "select rdef from RenderingDef as rdef " + "where rdef.pixels.id = :pid"; List<IObject> values = iQuery.findAllByQuery(sql, param); assertNotNull(values); assertEquals(values.size(), 1); // Image ids = new ArrayList<Long>(); ids.add(image.getId().getValue()); v = prx.resetDefaultsInSet(Image.class.getName(), ids); assertNotNull(v); values = iQuery.findAllByQuery(sql, param); assertNotNull(values); assertEquals(values.size(), 1); } /** * Tests to set the default rendering settings for a set. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetDefaultInSetForImage() throws Exception { Image image = createBinaryImage(); Pixels pixels = image.getPrimaryPixels(); IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); prx.setOriginalSettingsInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); // Image List<Long> ids = new ArrayList<Long>(); ids.add(image.getId().getValue()); List<Long> v = prx.resetDefaultsInSet(Image.class.getName(), ids); assertNotNull(v); assertEquals(v.size(), 1); ParametersI param = new ParametersI(); param.addLong("pid", pixels.getId().getValue()); String sql = "select rdef from RenderingDef as rdef " + "where rdef.pixels.id = :pid"; List<IObject> values = iQuery.findAllByQuery(sql, param); assertNotNull(values); assertEquals(values.size(), 1); } /** * Tests to set the default rendering settings for a set. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetDefaultInSetForDataset() throws Exception { Image image = createBinaryImage(); Pixels pixels = image.getPrimaryPixels(); // create a dataset Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory .simpleDatasetData().asIObject()); DatasetImageLink l = new DatasetImageLinkI(); l.setChild(image); l.setParent(d); iUpdate.saveAndReturnObject(l); IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); prx.setOriginalSettingsInSet(Dataset.class.getName(), Arrays.asList(d.getId().getValue())); // Dataset List<Long> v = prx.resetDefaultsInSet(Dataset.class.getName(), Arrays.asList(d.getId().getValue())); assertNotNull(v); assertEquals(v.size(), 1); ParametersI param = new ParametersI(); param.addLong("pid", pixels.getId().getValue()); String sql = "select rdef from RenderingDef as rdef " + "where rdef.pixels.id = :pid"; List<IObject> values = iQuery.findAllByQuery(sql, param); assertNotNull(values); assertEquals(values.size(), 1); } /** * Tests to set the default rendering settings for a project. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetDefaultInSetForProject() throws Exception { // create a project. Project p = (Project) iUpdate.saveAndReturnObject(mmFactory .simpleProjectData().asIObject()); // create a dataset Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory .simpleDatasetData().asIObject()); Image image = createBinaryImage(); Pixels pixels = image.getPrimaryPixels(); ProjectDatasetLink link = new ProjectDatasetLinkI(); link.link(p, d); link = (ProjectDatasetLink) iUpdate.saveAndReturnObject(link); DatasetImageLink l = new DatasetImageLinkI(); l.link(new DatasetI(d.getId().getValue(), false), image); l = (DatasetImageLink) iUpdate.saveAndReturnObject(l); IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); prx.setOriginalSettingsInSet(Project.class.getName(), Arrays.asList(p.getId().getValue())); List<Long> ids = new ArrayList<Long>(); ids.add(p.getId().getValue()); List<Long> v = prx.resetDefaultsInSet(Project.class.getName(), ids); ParametersI param; String sql; param = new ParametersI(); ids.clear(); ids.add(p.getId().getValue()); param.addIds(ids); sql = "select pix from Pixels as pix " + "join fetch pix.image as i " + "join fetch pix.pixelsType " + "join fetch pix.channels as c " + "join fetch c.logicalChannel " + "join i.datasetLinks as dil " + "join dil.parent as d " + "left outer join d.projectLinks as pdl " + "left outer join pdl.parent as p " + "where p.id in (:ids)"; assertEquals(iQuery.findAllByQuery(sql, param).size(), 1); assertNotNull(v); assertEquals(v.size(), 1); param = new ParametersI(); param.addLong("pid", pixels.getId().getValue()); sql = "select rdef from RenderingDef as rdef " + "where rdef.pixels.id = :pid"; List<IObject> values = iQuery.findAllByQuery(sql, param); assertNotNull(values); assertEquals(values.size(), 1); } /** * Tests to set the default rendering settings for a screen. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetDefaultInSetForScreen() throws Exception { Screen screen = (Screen) iUpdate.saveAndReturnObject(mmFactory .simpleScreenData().asIObject()); Plate p = createBinaryPlate(1, 1, 1, 0); p = (Plate) iUpdate.saveAndReturnObject(p); ScreenPlateLink link = new ScreenPlateLinkI(); link.setChild(p); link.setParent(screen); iUpdate.saveAndReturnObject(link); // load the well List<Well> results = loadWells(p.getId().getValue(), true); Well well = results.get(0); Image image = well.getWellSample(0).getImage(); Pixels pixels = image.getPrimaryPixels(); IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); prx.setOriginalSettingsInSet(Screen.class.getName(), Arrays.asList(screen.getId().getValue())); // Image List<Long> ids = new ArrayList<Long>(); ids.add(screen.getId().getValue()); List<Long> v = prx.resetDefaultsInSet(Screen.class.getName(), ids); assertNotNull(v); assertEquals(v.size(), 1); ParametersI param = new ParametersI(); param.addLong("pid", pixels.getId().getValue()); String sql = "select rdef from RenderingDef as rdef " + "where rdef.pixels.id = :pid"; List<IObject> values = iQuery.findAllByQuery(sql, param); assertNotNull(values); assertEquals(values.size(), 1); } /** * Tests to set the default rendering settings for a empty dataset. Tests * the <code>resetDefaultsInSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetDefaultInSetForEmptyDataset() throws Exception { // create a dataset Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory .simpleDatasetData().asIObject()); IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); // Dataset prx.setOriginalSettingsInSet(Dataset.class.getName(), Arrays.asList(d.getId().getValue())); List<Long> ids = new ArrayList<Long>(); ids.add(d.getId().getValue()); List<Long> v = prx.resetDefaultsInSet(Dataset.class.getName(), ids); assertNotNull(v); assertEquals(v.size(), 0); } /** * Tests to apply the rendering settings to a collection of images. Tests * the <code>ApplySettingsToSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testApplySettingsToSetForImage() throws Exception { IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); Image image = createBinaryImage(); Pixels pixels = image.getPrimaryPixels(); long id = pixels.getId().getValue(); // Image prx.setOriginalSettingsInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); // method already tested RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); // Create a second image. Image image2 = createBinaryImage(); Map<Boolean, List<Long>> m = prx .applySettingsToSet(id, Image.class.getName(), Arrays.asList(image2.getId().getValue())); assertNotNull(m); List<Long> success = (List<Long>) m.get(Boolean.valueOf(true)); List<Long> failure = (List<Long>) m.get(Boolean.valueOf(false)); assertNotNull(success); assertNotNull(failure); assertEquals(success.size(), 1); assertEquals(failure.size(), 0); id = success.get(0); // image id. assertEquals(id, image2.getId().getValue()); RenderingDef def2 = factory.getPixelsService().retrieveRndSettings( image2.getPrimaryPixels().getId().getValue()); compareRenderingDef(def, def2); } /** * Tests to apply the rendering settings to a collection of images within a * dataset. Tests the <code>ApplySettingsToSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testApplySettingsToSetForDataset() throws Exception { IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); Image image = createBinaryImage(); Pixels pixels = image.getPrimaryPixels(); long id = pixels.getId().getValue(); // Image // method already tested prx.setOriginalSettingsInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); // method already tested RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); // Create a second image. Image image2 = createBinaryImage(); // Create a dataset Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory .simpleDatasetData().asIObject()); DatasetImageLink l = new DatasetImageLinkI(); l.setChild(image2); l.setParent(d); iUpdate.saveAndReturnObject(l); Map<Boolean, List<Long>> m = prx.applySettingsToSet(id, Dataset.class.getName(), Arrays.asList(d.getId().getValue())); assertNotNull(m); List<Long> success = (List<Long>) m.get(Boolean.valueOf(true)); List<Long> failure = (List<Long>) m.get(Boolean.valueOf(false)); assertNotNull(success); assertNotNull(failure); assertEquals(success.size(), 1); assertEquals(failure.size(), 0); id = success.get(0); // image id. assertEquals(id, image2.getId().getValue()); RenderingDef def2 = factory.getPixelsService().retrieveRndSettings( image2.getPrimaryPixels().getId().getValue()); compareRenderingDef(def, def2); } /** * Tests to apply the rendering settings to an empty dataset. Tests the * <code>ApplySettingsToSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testApplySettingsToSetForEmptyDataset() throws Exception { IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); Image image = createBinaryImage(); Pixels pixels = image.getPrimaryPixels(); long id = pixels.getId().getValue(); // Image prx.setOriginalSettingsInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); // create a dataset Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory .simpleDatasetData().asIObject()); // Dataset Map<Boolean, List<Long>> m = prx.applySettingsToSet(id, Dataset.class.getName(), Arrays.asList(d.getId().getValue())); assertNotNull(m); } /** * Tests to apply the rendering settings to a collection of images contained * in a project. Tests the <code>ApplySettingsToSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testApplySettingsToSetForProject() throws Exception { IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); Image image = createBinaryImage(); Pixels pixels = image.getPrimaryPixels(); long id = pixels.getId().getValue(); // Image // method already tested prx.setOriginalSettingsInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); // method already tested RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); // Create a second image. Image image2 = createBinaryImage(); // Create a dataset // Link image and dataset Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory .simpleDatasetData().asIObject()); Project project = (Project) iUpdate.saveAndReturnObject(mmFactory .simpleProjectData().asIObject()); ProjectDatasetLink pLink = new ProjectDatasetLinkI(); pLink.link(project, d); iUpdate.saveAndReturnObject(pLink); DatasetImageLink link = new DatasetImageLinkI(); link.link(new DatasetI(d.getId().getValue(), false), image2); iUpdate.saveAndReturnObject(link); Map<Boolean, List<Long>> m = prx.applySettingsToSet(id, Project.class.getName(), Arrays.asList(project.getId().getValue())); assertNotNull(m); List<Long> success = (List<Long>) m.get(Boolean.valueOf(true)); List<Long> failure = (List<Long>) m.get(Boolean.valueOf(false)); assertNotNull(success); assertNotNull(failure); assertEquals(success.size(), 1); assertEquals(failure.size(), 0); id = success.get(0); // image id. assertEquals(id, image2.getId().getValue()); RenderingDef def2 = factory.getPixelsService().retrieveRndSettings( image2.getPrimaryPixels().getId().getValue()); compareRenderingDef(def, def2); } /** * Tests to apply the rendering settings to a plate. Tests the * <code>ApplySettingsToSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testApplySettingsToSetForPlate() throws Exception { Plate p = createBinaryPlate(1, 1, 1, 0); p = (Plate) iUpdate.saveAndReturnObject(p); // load the well List<Well> results = loadWells(p.getId().getValue(), true); Well well = results.get(0); IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); Image image = well.getWellSample(0).getImage(); Pixels pixels = image.getPrimaryPixels(); long id = pixels.getId().getValue(); // Image // method already tested prx.setOriginalSettingsInSet(Plate.class.getName(), Arrays.asList(p.getId().getValue())); // method already tested RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); // Create a second plate p = createBinaryPlate(1, 1, 1, 0); p = (Plate) iUpdate.saveAndReturnObject(p); results = loadWells(p.getId().getValue(), true); well = (Well) results.get(0); Image image2 = well.getWellSample(0).getImage(); Map<Boolean, List<Long>> m = prx.applySettingsToSet(id, Plate.class.getName(), Arrays.asList(p.getId().getValue())); assertNotNull(m); List<Long> success = (List<Long>) m.get(Boolean.valueOf(true)); List<Long> failure = (List<Long>) m.get(Boolean.valueOf(false)); assertNotNull(success); assertNotNull(failure); assertEquals(success.size(), 1); assertEquals(failure.size(), 0); id = success.get(0); // image id. assertEquals(id, image2.getId().getValue()); RenderingDef def2 = factory.getPixelsService().retrieveRndSettings( image2.getPrimaryPixels().getId().getValue()); compareRenderingDef(def, def2); } /** * Tests to apply the rendering settings to a plate acquisition. Tests the * <code>ApplySettingsToSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testApplySettingsToSetForPlateAcquisition() throws Exception { Plate p = createBinaryPlate(1, 1, 1, 1); p = (Plate) iUpdate.saveAndReturnObject(p); // load the well List<Well> results = loadWells(p.getId().getValue(), true); Well well = results.get(0); IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); WellSample ws = well.getWellSample(0); Image image = ws.getImage(); Pixels pixels = image.getPrimaryPixels(); long id = pixels.getId().getValue(); // Image // method already tested prx.setOriginalSettingsInSet(PlateAcquisition.class.getName(), Arrays.asList(ws.getPlateAcquisition().getId().getValue())); // method already tested RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); // Create a second plate p = createBinaryPlate(1, 1, 1, 1); p = (Plate) iUpdate.saveAndReturnObject(p); results = loadWells(p.getId().getValue(), true); well = (Well) results.get(0); ws = well.getWellSample(0); Image image2 = ws.getImage(); Map<Boolean, List<Long>> m = prx.applySettingsToSet(id, PlateAcquisition.class.getName(), Arrays.asList(ws.getPlateAcquisition().getId().getValue())); assertNotNull(m); List<Long> success = (List<Long>) m.get(Boolean.valueOf(true)); List<Long> failure = (List<Long>) m.get(Boolean.valueOf(false)); assertNotNull(success); assertNotNull(failure); assertEquals(success.size(), 1); assertEquals(failure.size(), 0); id = success.get(0); // image id. assertEquals(id, image2.getId().getValue()); RenderingDef def2 = factory.getPixelsService().retrieveRndSettings( image2.getPrimaryPixels().getId().getValue()); compareRenderingDef(def, def2); } /** * Tests to apply the rendering settings to a screen. Tests the * <code>ApplySettingsToSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testApplySettingsToSetForScreen() throws Exception { Screen screen = (Screen) iUpdate.saveAndReturnObject(mmFactory .simpleScreenData().asIObject()); Plate p = createBinaryPlate(1, 1, 1, 0); p = (Plate) iUpdate.saveAndReturnObject(p); ScreenPlateLink link = new ScreenPlateLinkI(); link.setChild(p); link.setParent(screen); link = (ScreenPlateLink) iUpdate.saveAndReturnObject(link); screen = link.getParent(); // load the well List<Well> results = loadWells(p.getId().getValue(), true); Well well = results.get(0); IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); Image image = well.getWellSample(0).getImage(); Pixels pixels = image.getPrimaryPixels(); long id = pixels.getId().getValue(); // Image prx.setOriginalSettingsInSet(Plate.class.getName(), Arrays.asList(p.getId().getValue())); // method already tested RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); // Create a second plate p = createBinaryPlate(1, 1, 1, 0); p = (Plate) iUpdate.saveAndReturnObject(p); link = new ScreenPlateLinkI(); link.setChild(p); link.setParent(screen); link = (ScreenPlateLink) iUpdate.saveAndReturnObject(link); results = loadWells(p.getId().getValue(), true); well = results.get(0); Image image2 = well.getWellSample(0).getImage(); Map<Boolean, List<Long>> m = prx.applySettingsToSet(id, Screen.class.getName(), Arrays.asList(screen.getId().getValue())); assertNotNull(m); List<Long> success = (List<Long>) m.get(Boolean.valueOf(true)); List<Long> failure = (List<Long>) m.get(Boolean.valueOf(false)); assertNotNull(success); assertNotNull(failure); assertEquals(success.size(), 1); assertEquals(failure.size(), 0); id = success.get(0); // image id. assertEquals(id, image2.getId().getValue()); RenderingDef def2 = factory.getPixelsService().retrieveRndSettings( image2.getPrimaryPixels().getId().getValue()); compareRenderingDef(def, def2); } /** * Tests to reset the default rendering settings to a plate. Tests the * <code>ResetDefaultInSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetDefaultInSetForPlate() throws Exception { Plate p = createBinaryPlate(1, 1, 1, 0); p = (Plate) iUpdate.saveAndReturnObject(p); // load the well List<Well> results = loadWells(p.getId().getValue(), true); Well well = results.get(0); Image image = well.getWellSample(0).getImage(); Pixels pixels = image.getPrimaryPixels(); IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); prx.setOriginalSettingsInSet(Plate.class.getName(), Arrays.asList(p.getId().getValue())); // Image List<Long> ids = new ArrayList<Long>(); ids.add(p.getId().getValue()); List<Long> v = prx.resetDefaultsInSet(Plate.class.getName(), ids); assertNotNull(v); assertEquals(v.size(), 1); ParametersI param = new ParametersI(); param.addLong("pid", pixels.getId().getValue()); String sql = "select rdef from RenderingDef as rdef " + "where rdef.pixels.id = :pid"; List<IObject> values = iQuery.findAllByQuery(sql, param); assertNotNull(values); assertEquals(values.size(), 1); } /** * Tests to reset the default rendering settings to a plate acquisition. * Tests the <code>ResetDefaultInSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetDefaultInSetForPlateAcquisition() throws Exception { Plate p = createBinaryPlate(1, 1, 1, 1); p = (Plate) iUpdate.saveAndReturnObject(p); // load the well List<Well> results = loadWells(p.getId().getValue(), true); Well well = results.get(0); WellSample ws = well.getWellSample(0); Image image = ws.getImage(); Pixels pixels = image.getPrimaryPixels(); IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); prx.setOriginalSettingsInSet(PlateAcquisition.class.getName(), Arrays.asList(ws.getPlateAcquisition().getId().getValue())); // Image List<Long> ids = new ArrayList<Long>(); ids.add(ws.getPlateAcquisition().getId().getValue()); List<Long> v = prx.resetDefaultsInSet(PlateAcquisition.class.getName(), ids); assertNotNull(v); assertEquals(v.size(), 1); ParametersI param = new ParametersI(); param.addLong("pid", pixels.getId().getValue()); String sql = "select rdef from RenderingDef as rdef " + "where rdef.pixels.id = :pid"; List<IObject> values = iQuery.findAllByQuery(sql, param); assertNotNull(values); assertEquals(values.size(), 1); } /** * Tests to apply the rendering settings to a collection of images. Tests * the <code>ResetMinMaxForSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetMinMaxForSetForImage() throws Exception { IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); Image image = createBinaryImage(); Pixels pixels = image.getPrimaryPixels(); long id = pixels.getId().getValue(); // Image // method already tested prx.setOriginalSettingsInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); // method already tested RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); // Modified the settings. ChannelBinding channel; List<Point> list = new ArrayList<Point>(); Point p; List<IObject> toUpdate = new ArrayList<IObject>(); for (int i = 0; i < pixels.getSizeC().getValue(); i++) { channel = def.getChannelBinding(0); p = new Point(); p.setLocation(channel.getInputStart().getValue(), channel .getInputEnd().getValue()); list.add(p); channel.setInputStart(omero.rtypes.rdouble(1)); channel.setInputEnd(omero.rtypes.rdouble(2)); toUpdate.add(channel); } iUpdate.saveAndReturnArray(toUpdate); List<Long> m = prx.resetMinMaxInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); assertNotNull(m); assertEquals(m.size(), 1); def = factory.getPixelsService().retrieveRndSettings(id); for (int i = 0; i < pixels.getSizeC().getValue(); i++) { channel = def.getChannelBinding(i); p = list.get(i); assertEquals(channel.getInputStart().getValue(), p.getX()); assertEquals(channel.getInputEnd().getValue(), p.getY()); } } /** * Tests to apply the rendering settings to a collection of images. Tests * the <code>ResetMinMaxForSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetMinMaxForSetForDataset() throws Exception { IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); Image image = createBinaryImage(); Pixels pixels = image.getPrimaryPixels(); long id = pixels.getId().getValue(); // Image // method already tested prx.setOriginalSettingsInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); // method already tested RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); // Modified the settings. ChannelBinding channel; List<Point> list = new ArrayList<Point>(); Point p; List<IObject> toUpdate = new ArrayList<IObject>(); for (int i = 0; i < pixels.getSizeC().getValue(); i++) { channel = def.getChannelBinding(0); p = new Point(); p.setLocation(channel.getInputStart().getValue(), channel .getInputEnd().getValue()); list.add(p); channel.setInputStart(omero.rtypes.rdouble(1)); channel.setInputEnd(omero.rtypes.rdouble(2)); toUpdate.add(channel); } iUpdate.saveAndReturnArray(toUpdate); // Link image and dataset Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory .simpleDatasetData().asIObject()); DatasetImageLink link = new DatasetImageLinkI(); link.setChild(image); link.setParent(d); iUpdate.saveAndReturnObject(link); List<Long> m = prx.resetMinMaxInSet(Dataset.class.getName(), Arrays.asList(d.getId().getValue())); assertNotNull(m); assertEquals(m.size(), 1); def = factory.getPixelsService().retrieveRndSettings(id); for (int i = 0; i < pixels.getSizeC().getValue(); i++) { channel = def.getChannelBinding(i); p = list.get(i); assertEquals(channel.getInputStart().getValue(), p.getX()); assertEquals(channel.getInputEnd().getValue(), p.getY()); } } /** * Tests to apply the rendering settings to a collection of images. Tests * the <code>ResetMinMaxForSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetMinMaxForSetForEmptyDataset() throws Exception { Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory .simpleDatasetData().asIObject()); IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); prx.setOriginalSettingsInSet(Dataset.class.getName(), Arrays.asList(d.getId().getValue())); List<Long> m = prx.resetMinMaxInSet(Dataset.class.getName(), Arrays.asList(d.getId().getValue())); assertEquals(m.size(), 0); } /** * Tests to apply the rendering settings to a collection of images. Tests * the <code>ResetMinMaxForSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test(groups = "ticket:5755") public void testResetMinMaxForSetForProject() throws Exception { IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); Image image = createBinaryImage(); Pixels pixels = image.getPrimaryPixels(); long id = pixels.getId().getValue(); // Image // method already tested prx.setOriginalSettingsInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); // method already tested RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); assertNotNull(def); // Modified the settings. ChannelBinding channel; List<Point> list = new ArrayList<Point>(); Point p; List<IObject> toUpdate = new ArrayList<IObject>(); for (int i = 0; i < pixels.getSizeC().getValue(); i++) { channel = def.getChannelBinding(0); p = new Point(); p.setLocation(channel.getInputStart().getValue(), channel .getInputEnd().getValue()); list.add(p); channel.setInputStart(omero.rtypes.rdouble(1)); channel.setInputEnd(omero.rtypes.rdouble(2)); toUpdate.add(channel); } iUpdate.saveAndReturnArray(toUpdate); // Link image and dataset Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory .simpleDatasetData().asIObject()); Project project = (Project) iUpdate.saveAndReturnObject(mmFactory .simpleProjectData().asIObject()); ProjectDatasetLink pLink = new ProjectDatasetLinkI(); pLink.link(project, d); iUpdate.saveAndReturnObject(pLink); DatasetImageLink link = new DatasetImageLinkI(); link.link(new DatasetI(d.getId().getValue(), false), image); iUpdate.saveAndReturnObject(link); List<Long> m = prx.resetMinMaxInSet(Project.class.getName(), Arrays.asList(project.getId().getValue())); assertNotNull(m); assertEquals(m.size(), 1); def = factory.getPixelsService().retrieveRndSettings(id); for (int i = 0; i < pixels.getSizeC().getValue(); i++) { channel = def.getChannelBinding(i); p = list.get(i); assertEquals(channel.getInputStart().getValue(), p.getX()); assertEquals(channel.getInputEnd().getValue(), p.getY()); } } /** * Tests to apply the rendering settings to a plate. Tests the * <code>ResetMinMaxForSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetMinMaxForSetForPlate() throws Exception { Plate plate = createBinaryPlate(1, 1, 1, 0); plate = (Plate) iUpdate.saveAndReturnObject(plate); // load the well List<Well> results = loadWells(plate.getId().getValue(), true); Well well = results.get(0); IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); Image image = well.getWellSample(0).getImage(); Pixels pixels = image.getPrimaryPixels(); long id = pixels.getId().getValue(); // Image prx.setOriginalSettingsInSet(Plate.class.getName(), Arrays.asList(plate.getId().getValue())); // method already tested RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); // Modified the settings. ChannelBinding channel; List<Point> list = new ArrayList<Point>(); Point p; List<IObject> toUpdate = new ArrayList<IObject>(); for (int i = 0; i < pixels.getSizeC().getValue(); i++) { channel = def.getChannelBinding(0); p = new Point(); p.setLocation(channel.getInputStart().getValue(), channel .getInputEnd().getValue()); list.add(p); channel.setInputStart(omero.rtypes.rdouble(1)); channel.setInputEnd(omero.rtypes.rdouble(2)); toUpdate.add(channel); } iUpdate.saveAndReturnArray(toUpdate); List<Long> m = prx.resetMinMaxInSet(Plate.class.getName(), Arrays.asList(plate.getId().getValue())); assertNotNull(m); assertEquals(m.size(), 1); def = factory.getPixelsService().retrieveRndSettings(id); for (int i = 0; i < pixels.getSizeC().getValue(); i++) { channel = def.getChannelBinding(i); p = list.get(i); assertEquals(channel.getInputStart().getValue(), p.getX()); assertEquals(channel.getInputEnd().getValue(), p.getY()); } } /** * Tests to apply the rendering settings to a plate. Tests the * <code>ResetMinMaxForSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetMinMaxForSetForPlateAcquisition() throws Exception { Plate plate = createBinaryPlate(1, 1, 1, 1); plate = (Plate) iUpdate.saveAndReturnObject(plate); // load the well List<Well> results = loadWells(plate.getId().getValue(), true); Well well = results.get(0); IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); WellSample ws = well.getWellSample(0); Image image = ws.getImage(); Pixels pixels = image.getPrimaryPixels(); long id = pixels.getId().getValue(); // Image // method already tested prx.setOriginalSettingsInSet(PlateAcquisition.class.getName(), Arrays.asList(ws.getPlateAcquisition().getId().getValue())); // method already tested RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); // Modified the settings. ChannelBinding channel; List<Point> list = new ArrayList<Point>(); Point p; List<IObject> toUpdate = new ArrayList<IObject>(); for (int i = 0; i < pixels.getSizeC().getValue(); i++) { channel = def.getChannelBinding(0); p = new Point(); p.setLocation(channel.getInputStart().getValue(), channel .getInputEnd().getValue()); list.add(p); channel.setInputStart(omero.rtypes.rdouble(1)); channel.setInputEnd(omero.rtypes.rdouble(2)); toUpdate.add(channel); } iUpdate.saveAndReturnArray(toUpdate); List<Long> m = prx.resetMinMaxInSet(PlateAcquisition.class.getName(), Arrays.asList(ws.getPlateAcquisition().getId().getValue())); assertNotNull(m); assertEquals(m.size(), 1); def = factory.getPixelsService().retrieveRndSettings(id); for (int i = 0; i < pixels.getSizeC().getValue(); i++) { channel = def.getChannelBinding(i); p = list.get(i); assertEquals(channel.getInputStart().getValue(), p.getX()); assertEquals(channel.getInputEnd().getValue(), p.getY()); } } /** * Tests to apply reset the min/max values for a screen.s Tests the * <code>ResetMinMaxForSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test(groups = "ticket:5755") public void testResetMinMaxForSetForScreen() throws Exception { Screen screen = (Screen) iUpdate.saveAndReturnObject(mmFactory .simpleScreenData().asIObject()); Plate plate = createBinaryPlate(1, 1, 1, 0); plate = (Plate) iUpdate.saveAndReturnObject(plate); ScreenPlateLink link = new ScreenPlateLinkI(); link.setChild(plate); link.setParent(screen); link = (ScreenPlateLink) iUpdate.saveAndReturnObject(link); screen = link.getParent(); // load the well List<Well> results = loadWells(plate.getId().getValue(), true); Well well = results.get(0); IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); Image image = well.getWellSample(0).getImage(); Pixels pixels = image.getPrimaryPixels(); long id = pixels.getId().getValue(); prx.setOriginalSettingsInSet(Plate.class.getName(), Arrays.asList(plate.getId().getValue())); // method already tested RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); // Modified the settings. ChannelBinding channel; List<Point> list = new ArrayList<Point>(); Point p; List<IObject> toUpdate = new ArrayList<IObject>(); for (int i = 0; i < pixels.getSizeC().getValue(); i++) { channel = def.getChannelBinding(0); p = new Point(); p.setLocation(channel.getInputStart().getValue(), channel .getInputEnd().getValue()); list.add(p); channel.setInputStart(omero.rtypes.rdouble(1)); channel.setInputEnd(omero.rtypes.rdouble(2)); toUpdate.add(channel); } iUpdate.saveAndReturnArray(toUpdate); List<Long> m = prx.resetMinMaxInSet(Plate.class.getName(), Arrays.asList(plate.getId().getValue())); assertNotNull(m); assertEquals(m.size(), 1); def = factory.getPixelsService().retrieveRndSettings(id); for (int i = 0; i < pixels.getSizeC().getValue(); i++) { channel = def.getChannelBinding(i); p = list.get(i); assertEquals(channel.getInputStart().getValue(), p.getX()); assertEquals(channel.getInputEnd().getValue(), p.getY()); } } /** * Tests to apply the rendering settings to a collection of images. Tests * the <code>ApplySettingsToSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testSetOriginalSettingsInSet() throws Exception { IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); Image image = createBinaryImage(); Pixels pixels = image.getPrimaryPixels(); long id = pixels.getId().getValue(); // Image // method already tested prx.setOriginalSettingsInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); // method already tested RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); // Create a second image. Image image2 = createBinaryImage(); Map<Boolean, List<Long>> m = prx .applySettingsToSet(id, Image.class.getName(), Arrays.asList(image2.getId().getValue())); assertNotNull(m); List<Long> success = (List<Long>) m.get(Boolean.valueOf(true)); List<Long> failure = (List<Long>) m.get(Boolean.valueOf(false)); assertNotNull(success); assertNotNull(failure); assertTrue(success.size() == 1); assertTrue(failure.size() == 0); id = success.get(0); // image id. assertTrue(id == image2.getId().getValue()); RenderingDef def2 = factory.getPixelsService().retrieveRndSettings( image2.getPrimaryPixels().getId().getValue()); compareRenderingDef(def, def2); } /** * Tests to apply the rendering settings to a collection of images. Tests * the <code>ApplySettingsToSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetDefaultByOwner() throws Exception { EventContext ctx = newUserAndGroup("rwra--"); Image image = createBinaryImage(); Pixels pixels = image.getPrimaryPixels(); IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); prx.setOriginalSettingsInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); disconnect(); EventContext ctx2 = newUserInGroup(ctx); prx = factory.getRenderingSettingsService(); prx.setOriginalSettingsInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); // Image List<Long> v = prx.resetDefaultsByOwnerInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); assertNotNull(v); assertEquals(v.size(), 1); ParametersI param = new ParametersI(); param.addLong("pid", pixels.getId().getValue()); param.addLong("oid", ctx2.userId); String sql = "select rdef from RenderingDef as rdef " + "where rdef.pixels.id = :pid and rdef.details.owner.id = :oid"; List<IObject> values = iQuery.findAllByQuery(sql, param); assertNotNull(values); assertEquals(values.size(), 1); } /** * Tests to apply the rendering settings to a collection of images. Tests * the <code>ApplySettingsToSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetDefaultByOwnerNoRndSettingsTarget() throws Exception { EventContext ctx = newUserAndGroup("rwra--"); Image image = createBinaryImage(); Pixels pixels = image.getPrimaryPixels(); IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); prx.setOriginalSettingsInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); disconnect(); EventContext ctx2 = newUserInGroup(ctx); prx = factory.getRenderingSettingsService(); // in that case create rendering settings for the target. // Image List<Long> v = prx.resetDefaultsByOwnerInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); assertNotNull(v); assertEquals(v.size(), 1); ParametersI param = new ParametersI(); param.addLong("pid", pixels.getId().getValue()); param.addLong("oid", ctx2.userId); String sql = "select rdef from RenderingDef as rdef " + "where rdef.pixels.id = :pid and rdef.details.owner.id = :oid"; List<IObject> values = iQuery.findAllByQuery(sql, param); assertNotNull(values); assertEquals(values.size(), 1); } /** * Tests to apply the rendering settings to a collection of images. Tests * the <code>ApplySettingsToSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetDefaultByOwnerNoRndSettingsSource() throws Exception { EventContext ctx = newUserAndGroup("rwra--"); Image image = createBinaryImage(); Pixels pixels = image.getPrimaryPixels(); IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); disconnect(); EventContext ctx2 = newUserInGroup(ctx); prx = factory.getRenderingSettingsService(); prx.setOriginalSettingsInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); // Image List<Long> v = prx.resetDefaultsByOwnerInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); assertNotNull(v); assertEquals(v.size(), 0); } /** * Tests to apply the rendering settings to a collection of images. Tests * the <code>ResetMinMaxForSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetMinMaxForSetForImageNoSettings() throws Exception { IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); Image image = createBinaryImage(); // Image // method already tested List<Long> m = prx.resetMinMaxInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); assertNotNull(m); assertEquals(m.size(), 1); } /** * Tests to apply the rendering settings to a collection of images. Tests * the <code>ResetMinMaxForSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetMinMaxForSetForNonValidImage() throws Exception { IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); Image image = mmFactory.simpleImage(); image = (Image) iUpdate.saveAndReturnObject(image); // Image // method already tested List<Long> m = prx.resetMinMaxInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); assertNotNull(m); assertEquals(m.size(), 0); } /** * Tests to apply the rendering settings to a collection of images. Tests * the <code>ApplySettingsToSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetDefaultByOwnerNonValidImage() throws Exception { EventContext ctx = newUserAndGroup("rwra--"); Image image = (Image) iUpdate.saveAndReturnObject(mmFactory .simpleImage()); // Image IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); List<Long> v = prx.resetDefaultsByOwnerInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); assertNotNull(v); assertEquals(v.size(), 0); } /** * Tests to apply the rendering settings to a collection of images. Tests * the <code>ApplySettingsToSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testSetOriginalSettingsInSetNonValidImage() throws Exception { EventContext ctx = newUserAndGroup("rwra--"); Image image = (Image) iUpdate.saveAndReturnObject(mmFactory .simpleImage()); // Image IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); List<Long> v = prx.setOriginalSettingsInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); assertNotNull(v); assertEquals(v.size(), 0); } /** * Tests to apply the rendering settings to a collection of images. Tests * the <code>ApplySettingsToSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetDefaultInSetNonValidImage() throws Exception { EventContext ctx = newUserAndGroup("rwra--"); Image image = (Image) iUpdate.saveAndReturnObject(mmFactory .simpleImage()); // Image IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); List<Long> v = prx.resetDefaultsInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); assertNotNull(v); assertEquals(v.size(), 0); } /** * Tests to apply the rendering settings to an image w/o stats info Tests * the <code>ResetMinMaxForSet</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetMinMaxForSetForImageNoStatsInfo() throws Exception { IRenderingSettingsPrx prx = factory.getRenderingSettingsService(); Image image = createBinaryImage(); // Delete the stats info object. Pixels pixels = image.getPixels(0); // load the channel. Channel channel; String sql = "select c from Channel as c where c.pixels.id = :iid"; ParametersI param = new ParametersI(); param.addLong("iid", pixels.getId().getValue()); List<IObject> channels = iQuery.findAllByQuery(sql, param); Iterator<IObject> i = channels.iterator(); while (i.hasNext()) { channel = (Channel) i.next(); channel.setStatsInfo(null); iUpdate.saveAndReturnObject(channel); } // Make sure the channels not have stats info. channels = iQuery.findAllByQuery(sql, param); i = channels.iterator(); while (i.hasNext()) { channel = (Channel) i.next(); assertNull(channel.getStatsInfo()); } // Image // method already tested List<Long> m = prx.resetMinMaxInSet(Image.class.getName(), Arrays.asList(image.getId().getValue())); assertNotNull(m); assertEquals(m.size(), 1); } }