package ome.formats.utests; import static ome.formats.model.UnitsFactory.convertLength; import static ome.formats.model.UnitsFactory.convertPower; import java.util.Map; import junit.framework.TestCase; import ome.formats.OMEROMetadataStoreClient; import ome.formats.importer.ImportConfig; import ome.formats.importer.OMEROWrapper; import ome.formats.model.BlitzInstanceProvider; import ome.formats.model.UnitsFactory; import ome.units.quantity.Power; import ome.util.LSID; import ome.xml.model.enums.LaserMedium; import ome.xml.model.enums.LaserType; import ome.xml.model.primitives.PercentFraction; import ome.xml.model.primitives.PositiveInteger; import omero.api.ServiceFactoryPrx; import omero.metadatastore.IObjectContainer; import omero.model.LengthI; import omero.model.Plate; import omero.model.PowerI; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; public class ContainerCacheOrderTest extends TestCase { private OMEROWrapper wrapper; private OMEROMetadataStoreClient store; private static final int LIGHTSOURCE_INDEX = 0; private static final int INSTRUMENT_INDEX = 0; private static final int IMAGE_INDEX = 0; private static final int CHANNEL_INDEX = 0; private static final int OBJECTIVE_INDEX = 0; private static ome.units.quantity.Length makeWave(double d) { return convertLength(new LengthI(d, UnitsFactory.Channel_EmissionWavelength)); } Power watt(double d) { return convertPower(new PowerI(d, UnitsFactory.LightSource_Power)); } @BeforeMethod protected void setUp() throws Exception { ServiceFactoryPrx sf = new TestServiceFactory().proxy(); wrapper = new OMEROWrapper(new ImportConfig()); store = new OMEROMetadataStoreClient(); store.initialize(sf); store.setReader(new TestReader()); store.setEnumerationProvider(new TestEnumerationProvider()); store.setInstanceProvider( new BlitzInstanceProvider(store.getEnumerationProvider())); wrapper.setMetadataStore(store); // Populate at least one image field. store.setImageName("Foo", IMAGE_INDEX); // Populate at least one pixels field. store.setPixelsSizeX(new PositiveInteger(1), IMAGE_INDEX); // Populate at least one logical channel field. store.setChannelEmissionWavelength( makeWave(100.1), IMAGE_INDEX, CHANNEL_INDEX); // Populate at least one instrument field. store.setInstrumentID("Instrument:0", INSTRUMENT_INDEX); // First Laser, First LightSourceSettings store.setLaserModel( "Model", INSTRUMENT_INDEX, LIGHTSOURCE_INDEX); store.setLaserID( "Laser:0", INSTRUMENT_INDEX, LIGHTSOURCE_INDEX); store.setLaserPower( watt(1.0), INSTRUMENT_INDEX, LIGHTSOURCE_INDEX); store.setLaserFrequencyMultiplication( new PositiveInteger(1), INSTRUMENT_INDEX, LIGHTSOURCE_INDEX); store.setChannelLightSourceSettingsID( "Laser:0", IMAGE_INDEX, CHANNEL_INDEX); store.setChannelLightSourceSettingsAttenuation( new PercentFraction(1f), IMAGE_INDEX, CHANNEL_INDEX); // Second Laser, Second LightSourceSettings store.setLaserModel( "Model", INSTRUMENT_INDEX, LIGHTSOURCE_INDEX + 1); store.setLaserID( "Laser:1", INSTRUMENT_INDEX, LIGHTSOURCE_INDEX + 1); store.setLaserPower( watt(1.0), INSTRUMENT_INDEX, LIGHTSOURCE_INDEX + 1); store.setLaserFrequencyMultiplication( new PositiveInteger(1), INSTRUMENT_INDEX, LIGHTSOURCE_INDEX + 1); store.setChannelLightSourceSettingsID( "Laser:1", IMAGE_INDEX, CHANNEL_INDEX + 1); store.setChannelLightSourceSettingsAttenuation( new PercentFraction(1f), IMAGE_INDEX, CHANNEL_INDEX + 1); // Third Laser, Third LightSourceSettings (different orientation) store.setLaserLaserMedium( LaserMedium.AR, INSTRUMENT_INDEX, LIGHTSOURCE_INDEX + 2); store.setLaserType( LaserType.GAS, INSTRUMENT_INDEX, LIGHTSOURCE_INDEX + 2); store.setLaserID( "Laser:2", INSTRUMENT_INDEX, LIGHTSOURCE_INDEX + 2); store.setChannelLightSourceSettingsID( "Laser:2", IMAGE_INDEX, CHANNEL_INDEX + 2); store.setChannelLightSourceSettingsAttenuation( new PercentFraction(1f), IMAGE_INDEX, CHANNEL_INDEX + 2); // First Objective, First ObjectiveSettings store.setObjectiveLensNA(1.0, INSTRUMENT_INDEX, OBJECTIVE_INDEX); store.setObjectiveID("Objective:0", INSTRUMENT_INDEX, OBJECTIVE_INDEX); store.setObjectiveSettingsID("Objective:0", IMAGE_INDEX); // Second Objective, Second ObjectiveSettings store.setObjectiveLensNA(1.0, INSTRUMENT_INDEX, OBJECTIVE_INDEX + 1); store.setObjectiveID("Objective:1", INSTRUMENT_INDEX, OBJECTIVE_INDEX + 1); store.setObjectiveSettingsID("Objective:1", IMAGE_INDEX + 1); // A Plate store.setPlateName("Plate", 0); } @Test public void testOrder() { Map<LSID, IObjectContainer> containerCache = store.getContainerCache(); for (LSID key : containerCache.keySet()) { System.err.println(key + " == " + containerCache.get(key).sourceObject); } } @Test public void testPlateLSIDEquivalence() { LSID a = new LSID(Plate.class, 0); LSID b = new LSID("omero.model.Plate:0"); assertEquals(a, b); assertEquals(b, a); } @Test public void testGetPlateByString() { Map<LSID, IObjectContainer> containerCache = store.getContainerCache(); assertNotNull(containerCache.get(new LSID("omero.model.Plate:0", true))); } @Test public void testGetPlateByClassAndIndex() { Map<LSID, IObjectContainer> containerCache = store.getContainerCache(); assertNotNull(containerCache.get(new LSID(Plate.class, 0))); } }