/* * $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.assertTrue; import static org.testng.AssertJUnit.fail; import java.awt.Point; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.DataBuffer; import java.awt.image.DataBufferInt; import java.awt.image.DirectColorModel; import java.awt.image.SinglePixelPackedSampleModel; import java.awt.image.WritableRaster; import java.io.ByteArrayInputStream; import java.io.File; import java.util.Arrays; import java.util.Iterator; import java.util.List; import javax.imageio.ImageIO; import ome.specification.XMLMockObjects; import ome.specification.XMLWriter; import omero.api.IPixelsPrx; import omero.api.RenderingEnginePrx; import omero.model.ChannelBinding; import omero.model.Family; import omero.model.IObject; import omero.model.Image; import omero.model.Pixels; import omero.model.QuantumDef; import omero.model.RenderingDef; import omero.model.RenderingModel; import omero.romio.PlaneDef; import omero.romio.RGBBuffer; import omero.romio.RegionDef; import omero.sys.EventContext; import org.testng.annotations.Test; import sun.awt.image.IntegerInterleavedRaster; /** * Collection of tests for the <code>RenderingEngine</code>. * * @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 RenderingEngineTest extends AbstractServerTest { /** The red mask. */ private static final int RED_MASK = 0x00ff0000; /** The green mask. */ private static final int GREEN_MASK = 0x0000ff00; /** The blue mask. */ private static final int BLUE_MASK = 0x000000ff; /** The RGB masks. */ private static final int[] RGB = { RED_MASK, GREEN_MASK, BLUE_MASK }; /** * Saves the rendering settings when the image is viewed by another member * of the group. * * @param permissions * The permissions. * @param role * @throws Exception */ private void saveRenderingSettings(String permissions, int role) throws Exception { saveRenderingSettings(permissions, role, true); saveRenderingSettings(permissions, role, false); } /** * Inner method which allows to optionally call the rendering method as the * owner. If this is not called, then there will be no rendering def at all * when the secondary uses attempts access. */ private void saveRenderingSettings(String permissions, int role, boolean preload) throws Exception { EventContext ctx = newUserAndGroup(permissions); // Import the image File f = File.createTempFile("saveRenderingSettings", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } if (preload) { assertRendering(pixels); // View as owner } disconnect(); // login as another user. EventContext ctx2 = newUserInGroup(ctx); switch (role) { case ADMIN: logRootIntoGroup(ctx2); break; case GROUP_OWNER: makeGroupOwner(); } assertRendering(pixels); } private void assertRendering(List<Pixels> pixels) throws Exception { Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); int t = re.getDefaultT(); int v = t + 1; re.setDefaultT(v); re.saveCurrentSettings(); assertEquals(re.getDefaultT(), v); RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); assertEquals(def.getDefaultT().getValue(), v); re.close(); } /** * Creates a buffer image from the specified <code>array</code> of integers. * * @param buf * The array to handle. * @param bits * The number of bits in the pixel values. * @param sizeX * The width (in pixels) of the region of image data described. * @param sizeY * The height (in pixels) of the region of image data described. * @return See above. */ private BufferedImage createImage(int[] buf, int bits, int sizeX, int sizeY) { if (buf == null) return null; DataBuffer j2DBuf = new DataBufferInt(buf, sizeX * sizeY); SinglePixelPackedSampleModel sampleModel = new SinglePixelPackedSampleModel( DataBuffer.TYPE_INT, sizeX, sizeY, sizeX, RGB); WritableRaster raster = new IntegerInterleavedRaster(sampleModel, j2DBuf, new Point(0, 0)); ColorModel colorModel = new DirectColorModel(bits, RGB[0], RGB[1], RGB[2]); BufferedImage image = new BufferedImage(colorModel, raster, false, null); image.setAccelerationPriority(1f); return image; } /** * Creates an image from the passed values. * * @param values * The values to handle. * @return See above. * @throws Exception * Thrown if an error occurred. */ private BufferedImage createImage(byte[] values) throws Exception { ByteArrayInputStream stream = new ByteArrayInputStream(values); return ImageIO.read(stream); } /** * Checks the value of the bytes are the same. * * @param region * The region. * @param plane * The plane. * @param w * The width of a step. * @param rWidth * The width of the region. */ private void checkBuffer(byte[] region, byte[] plane, int w, int rWidth) { int j; int k = 0; for (int i = 0; i < region.length; i++) { j = w * k + i; assertEquals(region[i], plane[j]); if (i % rWidth == rWidth - 1) k++; } } /** * Checks the value of the bytes are the same. * * @param region * The region. * @param plane * The plane. * @param w * The width of a step. * @param rWidth * The width of the region. */ private void checkIntBuffer(int[] region, int[] plane, int w, int rWidth) { int j; int k = 0; for (int i = 0; i < region.length; i++) { j = w * k + i; assertEquals(region[i], plane[j]); if (i % rWidth == rWidth - 1) k++; } } /** * Tests the creation of the rendering engine for a given pixels set w/o * looking up for rendering settings. * * @throws Exception * Thrown if an error occurred. */ @Test public void testCreateRenderingEngineNoSettings() throws Exception { Image image = mmFactory.createImage(); image = (Image) iUpdate.saveAndReturnObject(image); Pixels pixels = image.getPrimaryPixels(); RenderingEnginePrx svc = factory.createRenderingEngine(); try { svc.lookupPixels(pixels.getId().getValue()); svc.load(); fail("We should not have been able to load it."); } catch (Exception e) { } } /** * Tests the creation of the rendering engine for a given pixels set when * looking up for rendering settings. * * @throws Exception * Thrown if an error occurred. */ @Test public void testCreateRenderingEngine() throws Exception { File f = File.createTempFile("testCreateRenderingEngine", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); re.close(); } /** * Tests the retrieval of the rendering settings data using the rendering * engine. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderingEngineGetters() throws Exception { File f = File.createTempFile("testRenderingEngineGetters", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); factory.getRenderingSettingsService().setOriginalSettingsInSet( Pixels.class.getName(), Arrays.asList(id)); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); // retrieve the rendering def RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); assertEquals(def.getDefaultZ().getValue(), re.getDefaultZ()); assertEquals(def.getDefaultT().getValue(), re.getDefaultT()); assertEquals(def.getModel().getValue().getValue(), re.getModel() .getValue().getValue()); QuantumDef q1 = def.getQuantization(); QuantumDef q2 = re.getQuantumDef(); assertNotNull(q1); assertNotNull(q2); assertEquals(q1.getBitResolution().getValue(), q2.getBitResolution() .getValue()); assertEquals(q1.getCdStart().getValue(), q2.getCdStart().getValue()); assertEquals(q1.getCdEnd().getValue(), q2.getCdEnd().getValue()); List<ChannelBinding> channels1 = def.copyWaveRendering(); assertNotNull(channels1); Iterator<ChannelBinding> i = channels1.iterator(); ChannelBinding c1; int index = 0; int[] rgba; while (i.hasNext()) { c1 = i.next(); rgba = re.getRGBA(index); assertEquals(c1.getRed().getValue(), rgba[0]); assertEquals(c1.getGreen().getValue(), rgba[1]); assertEquals(c1.getBlue().getValue(), rgba[2]); assertEquals(c1.getAlpha().getValue(), rgba[3]); assertEquals(c1.getCoefficient().getValue(), re.getChannelCurveCoefficient(index)); assertEquals(c1.getFamily().getValue().getValue(), re .getChannelFamily(index).getValue().getValue()); assertEquals(c1.getInputStart().getValue(), re.getChannelWindowStart(index)); assertEquals(c1.getInputEnd().getValue(), re.getChannelWindowEnd(index)); Boolean b1 = Boolean.valueOf(c1.getActive().getValue()); Boolean b2 = Boolean.valueOf(re.isActive(index)); assertTrue(b1.equals(b2)); b1 = Boolean.valueOf(c1.getNoiseReduction().getValue()); b2 = Boolean.valueOf(re.getChannelNoiseReduction(index)); assertTrue(b1.equals(b2)); index++; } re.close(); } /** * Tests to modify the rendering settings using the rendering engine. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderingEngineSetters() throws Exception { File file = File.createTempFile("testRenderingEngineSetters", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(file, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(file, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); factory.getRenderingSettingsService().setOriginalSettingsInSet( Pixels.class.getName(), Arrays.asList(id)); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); int v = def.getDefaultT().getValue() + 1; re.setDefaultT(v); assertEquals(re.getDefaultT(), v); v = def.getDefaultZ().getValue() + 1; re.setDefaultZ(v); assertEquals(re.getDefaultZ(), v); // tested in PixelsService IPixelsPrx svc = factory.getPixelsService(); List<IObject> families = svc.getAllEnumerations(Family.class.getName()); List<IObject> models = svc.getAllEnumerations(RenderingModel.class .getName()); RenderingModel model = def.getModel(); Iterator<IObject> i; RenderingModel m; i = models.iterator(); while (i.hasNext()) { m = (RenderingModel) i.next(); if (m.getId().getValue() != model.getId().getValue()) { model = m; break; } } re.setModel(model); assertEquals(re.getModel().getId().getValue(), model.getId().getValue()); QuantumDef qdef = def.getQuantization(); int start = qdef.getCdStart().getValue() + 10; int end = qdef.getCdEnd().getValue() - 10; re.setCodomainInterval(start, end); assertEquals(re.getQuantumDef().getCdStart().getValue(), start); assertEquals(re.getQuantumDef().getCdEnd().getValue(), end); List<ChannelBinding> channels1 = def.copyWaveRendering(); assertNotNull(channels1); Iterator<ChannelBinding> j = channels1.iterator(); ChannelBinding c1; int index = 0; boolean b; double s, e; int[] RGBA = { 255, 0, 10, 200 }; int[] rgba; double coefficient = 0.5; Family f = (Family) families.get(families.size() - 1); while (j.hasNext()) { c1 = j.next(); b = !c1.getActive().getValue(); re.setActive(index, b); assertTrue(Boolean.valueOf(b).equals( Boolean.valueOf(re.isActive(index)))); s = c1.getInputStart().getValue() + 1; e = c1.getInputEnd().getValue() + 1; re.setChannelWindow(index, s, e); assertEquals(re.getChannelWindowStart(index), s); assertEquals(re.getChannelWindowEnd(index), e); b = !c1.getNoiseReduction().getValue(); re.setRGBA(index, RGBA[0], RGBA[1], RGBA[2], RGBA[3]); rgba = re.getRGBA(index); for (int k = 0; k < rgba.length; k++) { assertTrue(rgba[k] == RGBA[k]); } b = !c1.getNoiseReduction().getValue(); re.setQuantizationMap(index, f, coefficient, b); assertTrue(Boolean.valueOf(re.getChannelNoiseReduction(index)) .equals(Boolean.valueOf(b))); assertEquals(re.getChannelCurveCoefficient(index), coefficient); assertEquals(re.getChannelFamily(index).getId().getValue(), f .getId().getValue()); } re.close(); } /** * Tests to reset the default settings but do not save them back to the * database using the <code>resetDefaultsNoSave</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetDefaultsNoSave() throws Exception { File f = File.createTempFile("testResetDefaultsNoSave", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); factory.getRenderingSettingsService().setOriginalSettingsInSet( Pixels.class.getName(), Arrays.asList(id)); RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); int t = def.getDefaultT().getValue(); int v = t + 1; def.setDefaultT(omero.rtypes.rint(v)); // update def = (RenderingDef) iUpdate.saveAndReturnObject(def); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); assertEquals(re.getDefaultT(), def.getDefaultT().getValue()); re.resetDefaultSettings(false); assertEquals(re.getDefaultT(), t); // reload from db def = factory.getPixelsService().retrieveRndSettings(id); assertEquals(def.getDefaultT().getValue(), v); } /** * Tests to reset the default settings and save them back to the database * using the <code>resetDefaults</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testResetDefaults() throws Exception { File f = File.createTempFile("testResetDefaults", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); factory.getRenderingSettingsService().setOriginalSettingsInSet( Pixels.class.getName(), Arrays.asList(id)); RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); int t = def.getDefaultT().getValue(); int v = t + 1; def.setDefaultT(omero.rtypes.rint(v)); // update def = (RenderingDef) iUpdate.saveAndReturnObject(def); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!re.lookupRenderingDef(id)) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); assertEquals(re.getDefaultT(), def.getDefaultT().getValue()); re.resetDefaultSettings(true); assertEquals(re.getDefaultT(), t); } /** * Tests to modify the rendering settings using the rendering engine and * save the current settings using the <code>saveCurrentSettings</code> * method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testSaveCurrentSettings() throws Exception { File f = File.createTempFile("testSaveCurrentSettings", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); int t = re.getDefaultT(); int v = t + 1; re.setDefaultT(v); re.saveCurrentSettings(); assertTrue(re.getDefaultT() == v); RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); assertEquals(def.getDefaultT().getValue(), v); re.close(); } /** * Tests to render a plane using the <code>render</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderPlane() throws Exception { File f = File.createTempFile("testRenderPlane", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); PlaneDef pDef = new PlaneDef(); pDef.t = re.getDefaultT(); pDef.z = re.getDefaultZ(); pDef.slice = omero.romio.XY.value; // delete the file. RGBBuffer buffer = re.render(pDef); assertNotNull(buffer); assertEquals(p.getSizeX().getValue(), buffer.sizeX1); assertEquals(p.getSizeY().getValue(), buffer.sizeX2); IPixelsPrx svc = factory.getPixelsService(); List<IObject> models = svc.getAllEnumerations(RenderingModel.class .getName()); RenderingModel model = re.getModel(); Iterator<IObject> i = models.iterator(); RenderingModel m; // Change the color model and render while (i.hasNext()) { m = (RenderingModel) i.next(); if (m.getId().getValue() != model.getId().getValue()) re.setModel(m); } buffer = re.render(pDef); assertNotNull(buffer); f.delete(); re.close(); } /** * Tests to render a given region of plane using the <code>render</code> * method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderRegion() throws Exception { File f = File.createTempFile("testRenderRegion", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); int[] values = { 1, 2, 3, 4, 5 }; int v; int sizeX = p.getSizeX().getValue(); int sizeY = p.getSizeY().getValue(); PlaneDef pDef; RGBBuffer bufferRegion, bufferPlane; byte[] region, plane; for (int i = 0; i < values.length; i++) { v = values[i]; pDef = new PlaneDef(); pDef.t = re.getDefaultT(); pDef.z = re.getDefaultZ(); pDef.slice = omero.romio.XY.value; RegionDef r = new RegionDef(); r.x = 0; r.y = 0; r.width = sizeX / v; r.height = sizeY / v; pDef.region = r; bufferRegion = re.render(pDef); assertNotNull(bufferRegion); assertEquals(r.width, bufferRegion.sizeX1); assertEquals(r.height, bufferRegion.sizeX2); // now render a plane and compare the renderer value. pDef = new PlaneDef(); pDef.t = re.getDefaultT(); pDef.z = re.getDefaultZ(); pDef.slice = omero.romio.XY.value; bufferPlane = re.render(pDef); assertNotNull(bufferPlane); // red band region = bufferRegion.bands[0]; plane = bufferPlane.bands[0]; assertNotNull(region); assertNotNull(plane); checkBuffer(region, plane, sizeX - r.width, r.width); // green band region = bufferRegion.bands[1]; plane = bufferPlane.bands[1]; assertNotNull(region); assertNotNull(plane); checkBuffer(region, plane, sizeX - r.width, r.width); // blue band region = bufferRegion.bands[2]; plane = bufferPlane.bands[2]; assertNotNull(region); assertNotNull(plane); checkBuffer(region, plane, sizeX - r.width, r.width); } f.delete(); re.close(); } /** * Tests to render a given region of plane using the <code>render</code> * method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderRegionChangeModel() throws Exception { File f = File.createTempFile("testRenderRegionChangeModel", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); int v = 2; int sizeX = p.getSizeX().getValue(); int sizeY = p.getSizeY().getValue(); PlaneDef pDef; RGBBuffer bufferRegion; pDef = new PlaneDef(); pDef.t = re.getDefaultT(); pDef.z = re.getDefaultZ(); pDef.slice = omero.romio.XY.value; RegionDef r = new RegionDef(); r.x = 0; r.y = 0; r.width = sizeX / v; r.height = sizeY / v; pDef.region = r; bufferRegion = re.render(pDef); assertNotNull(bufferRegion); IPixelsPrx svc = factory.getPixelsService(); List<IObject> models = svc.getAllEnumerations(RenderingModel.class .getName()); RenderingModel model = re.getModel(); Iterator<IObject> i = models.iterator(); RenderingModel m; // Change the color model and render while (i.hasNext()) { m = (RenderingModel) i.next(); if (m.getId().getValue() != model.getId().getValue()) re.setModel(m); } bufferRegion = re.render(pDef); assertNotNull(bufferRegion); f.delete(); re.close(); } /** * Tests to render a plane using the <code>renderCompressed</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderCompressedPlane() throws Exception { File f = File.createTempFile("testRenderCompressedPlane", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); PlaneDef pDef = new PlaneDef(); pDef.t = re.getDefaultT(); pDef.z = re.getDefaultZ(); pDef.slice = omero.romio.XY.value; // delete the file. byte[] values = re.renderCompressed(pDef); assertNotNull(values); // Create a buffered image. BufferedImage image = createImage(values); assertNotNull(image); assertEquals(image.getWidth(), p.getSizeX().getValue()); assertEquals(image.getHeight(), p.getSizeY().getValue()); f.delete(); re.close(); } /** * Tests to render a given region of plane using the * <code>renderCompressed</code> method. For the comparison between plane * and region, see {@link #testRenderAsPackedIntRegion}. The * <code>renderCompressed</code> method first renders the region using the * <code>renderAsPackedInt</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderCompressedRegion() throws Exception { File f = File.createTempFile("testRenderCompressedRegion", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); int sizeX = p.getSizeX().getValue(); int sizeY = p.getSizeY().getValue(); PlaneDef pDef; BufferedImage imageRegion; byte[] region; int v = 2; pDef = new PlaneDef(); pDef.t = re.getDefaultT(); pDef.z = re.getDefaultZ(); pDef.slice = omero.romio.XY.value; RegionDef r = new RegionDef(); r.x = 0; r.y = 0; r.width = sizeX / v; r.height = sizeY / v; pDef.region = r; region = re.renderCompressed(pDef); assertNotNull(region); imageRegion = createImage(region); assertNotNull(imageRegion); assertEquals(r.width, imageRegion.getWidth()); assertEquals(r.height, imageRegion.getHeight()); f.delete(); re.close(); } /** * Tests to render a plane using the <code>renderAsPackedInt</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderAsPackedIntPlane() throws Exception { File f = File.createTempFile("testRenderAsPackedIntPlane", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); PlaneDef pDef = new PlaneDef(); pDef.t = re.getDefaultT(); pDef.z = re.getDefaultZ(); pDef.slice = omero.romio.XY.value; // delete the file. int[] buffer = re.renderAsPackedInt(pDef); assertNotNull(buffer); BufferedImage image = createImage(buffer, 32, p.getSizeX().getValue(), p.getSizeY().getValue()); assertNotNull(image); // now change the model IPixelsPrx svc = factory.getPixelsService(); List<IObject> models = svc.getAllEnumerations(RenderingModel.class .getName()); RenderingModel model = re.getModel(); Iterator<IObject> i = models.iterator(); RenderingModel m; // Change the color model and render while (i.hasNext()) { m = (RenderingModel) i.next(); if (m.getId().getValue() != model.getId().getValue()) re.setModel(m); } buffer = re.renderAsPackedInt(pDef); assertNotNull(buffer); image = createImage(buffer, 32, p.getSizeX().getValue(), p.getSizeY() .getValue()); assertNotNull(image); f.delete(); re.close(); } /** * Tests to render a given region of plane using the * <code>renderAsPackedInt</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderAsPackedIntRegion() throws Exception { File f = File.createTempFile("testRenderAsPackedIntRegion", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); int[] values = { 1, 2, 3, 4, 5 }; int v; int sizeX = p.getSizeX().getValue(); int sizeY = p.getSizeY().getValue(); PlaneDef pDef; BufferedImage imageRegion, imagePlane, cropImage; int[] region, plane; for (int i = 0; i < values.length; i++) { v = values[i]; pDef = new PlaneDef(); pDef.t = re.getDefaultT(); pDef.z = re.getDefaultZ(); pDef.slice = omero.romio.XY.value; RegionDef r = new RegionDef(); r.x = 0; r.y = 0; r.width = sizeX / v; r.height = sizeY / v; pDef.region = r; region = re.renderAsPackedInt(pDef); assertNotNull(region); imageRegion = createImage(region, 32, r.width, r.height); assertNotNull(imageRegion); assertEquals(r.width, imageRegion.getWidth()); assertEquals(r.height, imageRegion.getHeight()); // now render a plane and compare the renderer value. pDef = new PlaneDef(); pDef.t = re.getDefaultT(); pDef.z = re.getDefaultZ(); pDef.slice = omero.romio.XY.value; plane = re.renderAsPackedInt(pDef); assertNotNull(plane); checkIntBuffer(region, plane, sizeX - r.width, r.width); } f.delete(); re.close(); } /** * Tests to render a given region of plane using the * <code>renderAsPackedInt</code> method, change the color model. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderAsPackedIntRegionChangeModel() throws Exception { File f = File.createTempFile("testRenderAsPackedIntRegion", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); int v = 2; int sizeX = p.getSizeX().getValue(); int sizeY = p.getSizeY().getValue(); PlaneDef pDef; BufferedImage imageRegion; int[] region; pDef = new PlaneDef(); pDef.t = re.getDefaultT(); pDef.z = re.getDefaultZ(); pDef.slice = omero.romio.XY.value; RegionDef r = new RegionDef(); r.x = 0; r.y = 0; r.width = sizeX / v; r.height = sizeY / v; pDef.region = r; region = re.renderAsPackedInt(pDef); assertNotNull(region); imageRegion = createImage(region, 32, r.width, r.height); assertNotNull(imageRegion); IPixelsPrx svc = factory.getPixelsService(); List<IObject> models = svc.getAllEnumerations(RenderingModel.class .getName()); RenderingModel model = re.getModel(); Iterator<IObject> i = models.iterator(); RenderingModel m; // Change the color model and render while (i.hasNext()) { m = (RenderingModel) i.next(); if (m.getId().getValue() != model.getId().getValue()) re.setModel(m); } region = re.renderAsPackedInt(pDef); assertNotNull(region); imageRegion = createImage(region, 32, r.width, r.height); assertNotNull(imageRegion); f.delete(); re.close(); } /** * Tests to render a plane using the stride parameter, not all pixels will * be rendered. The method uses the <code>renderAsPackedInt</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderAsPackedIntStridePlane() throws Exception { File f = File.createTempFile("testRenderAsPackedIntStridePlane", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); PlaneDef pDef = new PlaneDef(); pDef.t = re.getDefaultT(); pDef.z = re.getDefaultZ(); pDef.slice = omero.romio.XY.value; pDef.stride = 1; // delete the file. int sizeX = p.getSizeX().getValue(); int sizeY = p.getSizeX().getValue(); sizeX = sizeX / (pDef.stride + 1); sizeY = sizeY / (pDef.stride + 1); int[] buffer = re.renderAsPackedInt(pDef); assertNotNull(buffer); BufferedImage image = createImage(buffer, 32, sizeX, sizeY); assertNotNull(image); f.delete(); re.close(); } /** * Tests to render a plane using the stride parameter, not all pixels will * be rendered. The method uses the <code>renderAsPackedInt</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderAsPackedIntStrideRegion() throws Exception { File f = File.createTempFile("testRenderAsPackedIntStrideRegion", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); int sizeX = p.getSizeX().getValue(); int sizeY = p.getSizeX().getValue(); RegionDef regionDef = new RegionDef(); regionDef.x = 0; regionDef.y = 0; regionDef.width = sizeX / 2; regionDef.height = sizeY / 2; PlaneDef pDef = new PlaneDef(); pDef.t = re.getDefaultT(); pDef.z = re.getDefaultZ(); pDef.slice = omero.romio.XY.value; pDef.stride = 1; sizeX = regionDef.width / (pDef.stride + 1); sizeY = regionDef.height / (pDef.stride + 1); int[] buffer = re.renderAsPackedInt(pDef); assertNotNull(buffer); BufferedImage image = createImage(buffer, 32, sizeX, sizeY); assertNotNull(image); f.delete(); re.close(); } /** * Tests to render a plane using the stride parameter, not all pixels will * be rendered. The method uses the <code>renderCompressed</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderCompressedStridePlane() throws Exception { File f = File.createTempFile("testRenderCompressedStridePlane", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); PlaneDef pDef = new PlaneDef(); pDef.t = re.getDefaultT(); pDef.z = re.getDefaultZ(); pDef.slice = omero.romio.XY.value; pDef.stride = 1; // delete the file. int sizeX = p.getSizeX().getValue(); int sizeY = p.getSizeX().getValue(); sizeX = sizeX / (pDef.stride + 1); sizeY = sizeY / (pDef.stride + 1); byte[] buffer = re.renderCompressed(pDef); assertNotNull(buffer); BufferedImage image = createImage(buffer); assertNotNull(image); assertEquals(image.getWidth(), sizeX); assertEquals(image.getHeight(), sizeY); f.delete(); re.close(); } /** * Tests to render the region of a plane using the stride parameter, not all * pixels will be rendered. The method uses the * <code>renderCompressed</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderCompressedStrideRegion() throws Exception { File f = File.createTempFile("testRenderCompressedStridePlane", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); int sizeX = p.getSizeX().getValue(); int sizeY = p.getSizeX().getValue(); RegionDef regionDef = new RegionDef(); regionDef.x = 0; regionDef.y = 0; regionDef.width = sizeX / 2; regionDef.height = sizeY / 2; PlaneDef pDef = new PlaneDef(); pDef.t = re.getDefaultT(); pDef.z = re.getDefaultZ(); pDef.slice = omero.romio.XY.value; pDef.stride = 1; pDef.region = regionDef; // delete the file. sizeX = regionDef.width / (pDef.stride + 1); sizeY = regionDef.height / (pDef.stride + 1); byte[] buffer = re.renderCompressed(pDef); assertNotNull(buffer); BufferedImage image = createImage(buffer); assertNotNull(image); assertEquals(image.getWidth(), sizeX); assertEquals(image.getHeight(), sizeY); f.delete(); re.close(); } /** * Tests to render a plane using the stride parameter, not all pixels will * be rendered. The method uses the <code>render</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderStridePlane() throws Exception { File f = File.createTempFile("testRenderStridePlane", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); PlaneDef pDef = new PlaneDef(); pDef.t = re.getDefaultT(); pDef.z = re.getDefaultZ(); pDef.slice = omero.romio.XY.value; pDef.stride = 1; // delete the file. int sizeX = p.getSizeX().getValue(); int sizeY = p.getSizeX().getValue(); sizeX = sizeX / (pDef.stride + 1); sizeY = sizeY / (pDef.stride + 1); // hsb RGBBuffer buffer = re.render(pDef); assertNotNull(buffer); assertEquals(sizeX, buffer.sizeX1); assertEquals(sizeY, buffer.sizeX2); // greyscale RenderingModel model = re.getModel(); IPixelsPrx svc = factory.getPixelsService(); List<IObject> models = svc.getAllEnumerations(RenderingModel.class .getName()); Iterator<IObject> i = models.iterator(); RenderingModel m; // Change the color model and render while (i.hasNext()) { m = (RenderingModel) i.next(); if (m.getId().getValue() != model.getId().getValue()) re.setModel(m); } buffer = re.render(pDef); assertNotNull(buffer); f.delete(); re.close(); } /** * Tests to render a region of a plane using the stride parameter, not all * pixels will be rendered. The method uses the <code>render</code> method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderStrideRegion() throws Exception { File f = File .createTempFile("testRenderStrideRegion", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); int sizeX = p.getSizeX().getValue(); int sizeY = p.getSizeX().getValue(); RegionDef regionDef = new RegionDef(); regionDef.x = 0; regionDef.y = 0; regionDef.width = sizeX / 2; regionDef.height = sizeY / 2; PlaneDef pDef = new PlaneDef(); pDef.t = re.getDefaultT(); pDef.z = re.getDefaultZ(); pDef.slice = omero.romio.XY.value; pDef.stride = 1; pDef.region = regionDef; sizeX = regionDef.width / (pDef.stride + 1); sizeY = regionDef.height / (pDef.stride + 1); // hsb model RGBBuffer buffer = re.render(pDef); assertNotNull(buffer); assertEquals(sizeX, buffer.sizeX1); assertEquals(sizeY, buffer.sizeX2); // grey scale. RenderingModel model = re.getModel(); IPixelsPrx svc = factory.getPixelsService(); List<IObject> models = svc.getAllEnumerations(RenderingModel.class .getName()); Iterator<IObject> i = models.iterator(); RenderingModel m; // Change the color model and render while (i.hasNext()) { m = (RenderingModel) i.next(); if (m.getId().getValue() != model.getId().getValue()) re.setModel(m); } buffer = re.render(pDef); assertNotNull(buffer); f.delete(); re.close(); } /** * Tests to render a given region of plane using the <code>render</code> * method. The region requested it outside the size of the image. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderRegionOutsideRange() throws Exception { File f = File.createTempFile("testRenderRegionOutsideRange", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); int sizeX = p.getSizeX().getValue(); int sizeY = p.getSizeY().getValue(); PlaneDef pDef; RGBBuffer bufferRegion; pDef = new PlaneDef(); pDef.t = re.getDefaultT(); pDef.z = re.getDefaultZ(); pDef.slice = omero.romio.XY.value; RegionDef r = new RegionDef(); int w = 8; int h = 8; r.x = sizeX - w; r.y = sizeY - h; r.width = 2 * w; r.height = 2 * h; pDef.region = r; bufferRegion = re.render(pDef); assertNotNull(bufferRegion); assertEquals(w, bufferRegion.sizeX1); assertEquals(h, bufferRegion.sizeX2); f.delete(); re.close(); } /** * Tests to render a given region of plane using the * <code>renderAsPackedInt</code> method. The region requested it outside * the size of the image. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderAsPacketIntRegionOutsideRange() throws Exception { File f = File.createTempFile("testRenderRegionOutsideRange", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); int sizeX = p.getSizeX().getValue(); int sizeY = p.getSizeY().getValue(); PlaneDef pDef; int[] bufferRegion; pDef = new PlaneDef(); pDef.t = re.getDefaultT(); pDef.z = re.getDefaultZ(); pDef.slice = omero.romio.XY.value; RegionDef r = new RegionDef(); int w = 8; int h = 8; r.x = sizeX - w; r.y = sizeY - h; r.width = 2 * w; r.height = 2 * h; pDef.region = r; bufferRegion = re.renderAsPackedInt(pDef); assertNotNull(bufferRegion); BufferedImage image = createImage(bufferRegion, 32, w, h); assertNotNull(image); f.delete(); re.close(); } /** * Tests to modify the rendering settings using the rendering engine and * save the current settings using the <code>saveCurrentSettings</code> * method multiple times in a short period of time. * * @throws Exception * Thrown if an error occurred. */ @Test public void testSaveCurrentSettingsMultipleTimes() throws Exception { File file = File.createTempFile("testRenderingEngineSetters", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(file, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(file, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); int n = 5; int diff = 20; long start, end; long time = 0; /* * for (int i = 0; i < n; i++) { start = System.currentTimeMillis(); * re.saveCurrentSettings(); end = System.currentTimeMillis()-start; if * (i == 0) time = end; else assertTrue(end >= (time-diff) & end <= * (time+diff)); } */ re.close(); } /** * Tests to modify the rendering settings using the rendering engine and * save the current settings using the <code>saveCurrentSettings</code> * method multiple times in a short period of time. * * @throws Exception * Thrown if an error occurred. */ @Test public void testSaveCurrentSettingsAll() throws Exception { File file = File.createTempFile("testRenderingEngineSetters", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(file, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(file, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); // z int z = 0; re.setDefaultZ(z); re.saveCurrentSettings(); assertEquals(re.getDefaultZ(), z); // t int t = 1; re.setDefaultT(t); re.saveCurrentSettings(); assertEquals(re.getDefaultT(), t); // tested in PixelsService IPixelsPrx svc = factory.getPixelsService(); List<IObject> families = svc.getAllEnumerations(Family.class.getName()); List<IObject> models = svc.getAllEnumerations(RenderingModel.class .getName()); RenderingModel rm = re.getModel(); Iterator<IObject> i; RenderingModel m; i = models.iterator(); while (i.hasNext()) { m = (RenderingModel) i.next(); if (m.getId().getValue() != rm.getId().getValue()) { rm = m; break; } } re.setModel(rm); re.saveCurrentSettings(); assertEquals(re.getModel().getId().getValue(), rm.getId().getValue()); int start = re.getQuantumDef().getCdStart().getValue() + 10; int end = re.getQuantumDef().getCdEnd().getValue() - 10; re.setCodomainInterval(start, end); re.saveCurrentSettings(); assertEquals(re.getQuantumDef().getCdStart().getValue(), start); int DEPTH_7BIT = 127; re.setQuantumStrategy(DEPTH_7BIT); re.saveCurrentSettings(); assertEquals(re.getQuantumDef().getBitResolution().getValue(), DEPTH_7BIT); // channels now double min = 0; double max = 10; int[] RGBA = { 255, 0, 10, 200 }; int[] rgba; Family f = (Family) families.get(families.size() - 1); double coefficient = 0.5; boolean b; for (int j = 0; j < XMLMockObjects.SIZE_C; j++) { re.setActive(j, j == 0); re.saveCurrentSettings(); assertEquals(j == 0, re.isActive(j)); re.setChannelWindow(j, min, max); re.saveCurrentSettings(); assertEquals(re.getChannelWindowStart(j), min); assertEquals(re.getChannelWindowEnd(j), max); // color re.setRGBA(j, RGBA[0], RGBA[1], RGBA[2], RGBA[3]); re.saveCurrentSettings(); rgba = re.getRGBA(j); for (int k = 0; k < rgba.length; k++) { assertEquals(rgba[k], RGBA[k]); } b = !re.getChannelNoiseReduction(j); re.setQuantizationMap(j, f, coefficient, b); re.saveCurrentSettings(); assertEquals(re.getChannelCurveCoefficient(j), coefficient); assertEquals(re.getChannelNoiseReduction(j), b); assertEquals(re.getChannelFamily(j).getId().getValue(), f.getId() .getValue()); } re.close(); } /** * Tests to modify the rendering settings using the rendering engine and * save the current settings using the <code>saveCurrentSettings</code> * method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testSaveCurrentSettingsByGroupOwnerRWR() throws Exception { saveRenderingSettings("rwr---", GROUP_OWNER); } /** * Tests to modify the rendering settings using the rendering engine and * save the current settings using the <code>saveCurrentSettings</code> * method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testSaveCurrentSettingsByAdminRWR() throws Exception { saveRenderingSettings("rwr---", ADMIN); } /** * Tests to modify the rendering settings using the rendering engine and * save the current settings using the <code>saveCurrentSettings</code> * method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testSaveCurrentSettingsByGroupOwnerRWRA() throws Exception { saveRenderingSettings("rwra--", GROUP_OWNER); } /** * Tests to modify the rendering settings using the rendering engine and * save the current settings using the <code>saveCurrentSettings</code> * method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testSaveCurrentSettingsByAdminRWRA() throws Exception { saveRenderingSettings("rwra--", ADMIN); } /** * Tests to modify the rendering settings using the rendering engine and * save the current settings using the <code>saveCurrentSettings</code> * method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testSaveCurrentSettingsByGroupOwnerRWRW() throws Exception { saveRenderingSettings("rwrw--", GROUP_OWNER); } /** * Tests to modify the rendering settings using the rendering engine and * save the current settings using the <code>saveCurrentSettings</code> * method. * * @throws Exception * Thrown if an error occurred. */ @Test public void testSaveCurrentSettingsByAdminRWRW() throws Exception { saveRenderingSettings("rwrw--", ADMIN); } /** * Tests the retrieval of the rendering settings data using the rendering * engine. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderingEngineChannelWindowGetter() throws Exception { File f = File.createTempFile("testRenderingEngineGetters", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); factory.getRenderingSettingsService().setOriginalSettingsInSet( Pixels.class.getName(), Arrays.asList(id)); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); // retrieve the rendering def RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); QuantumDef q1 = def.getQuantization(); assertNotNull(q1); List<ChannelBinding> channels1 = def.copyWaveRendering(); assertNotNull(channels1); Iterator<ChannelBinding> i = channels1.iterator(); ChannelBinding c1; int index = 0; double s = 0.11; double e = 0.21; while (i.hasNext()) { c1 = i.next(); e = c1.getInputEnd().getValue()+0.21; s = c1.getInputStart().getValue()+0.11; re.setChannelWindow(index, s, e); assertEquals(s, re.getChannelWindowStart(index)); assertEquals(e, re.getChannelWindowEnd(index)); index++; } re.close(); } /** * Tests the retrieval of the lookup table info using the rendering * engine. * * @throws Exception * Thrown if an error occurred. */ @Test public void testRenderingEngineChannelLookupTable() throws Exception { File f = File.createTempFile("testRenderingEngineGetters", "." + OME_FORMAT); XMLMockObjects xml = new XMLMockObjects(); XMLWriter writer = new XMLWriter(); writer.writeFile(f, xml.createImage(), true); List<Pixels> pixels = null; try { pixels = importFile(f, OME_FORMAT); } catch (Throwable e) { throw new Exception("cannot import image", e); } Pixels p = pixels.get(0); long id = p.getId().getValue(); factory.getRenderingSettingsService().setOriginalSettingsInSet( Pixels.class.getName(), Arrays.asList(id)); RenderingEnginePrx re = factory.createRenderingEngine(); re.lookupPixels(id); if (!(re.lookupRenderingDef(id))) { re.resetDefaultSettings(true); re.lookupRenderingDef(id); } re.load(); // retrieve the rendering def RenderingDef def = factory.getPixelsService().retrieveRndSettings(id); List<ChannelBinding> channels1 = def.copyWaveRendering(); assertNotNull(channels1); Iterator<ChannelBinding> i = channels1.iterator(); ChannelBinding c1; int index = 0; while (i.hasNext()) { c1 = i.next(); assertEquals(null, c1.getLookupTable()); re.setChannelLookupTable(index, "foo"); assertEquals("foo", re.getChannelLookupTable(index)); index++; } re.saveCurrentSettings(); re.close(); } }