/*
* #%L
* OME Bio-Formats package for reading and converting biological file formats.
* %%
* Copyright (C) 2005 - 2015 Open Microscopy Environment:
* - Board of Regents of the University of Wisconsin-Madison
* - Glencoe Software, Inc.
* - University of Dundee
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-2.0.html>.
* #L%
*/
package loci.formats.utests;
import loci.formats.ome.OMEXMLMetadataImpl;
import ome.xml.meta.MetadataRoot;
import ome.xml.model.primitives.NonNegativeInteger;
import ome.xml.model.primitives.PositiveInteger;
import ome.xml.model.primitives.Timestamp;
import ome.units.quantity.Power;
import ome.units.UNITS;
/**
*/
public class IMetadataBasedOMEModelMock implements OMEModelMock {
private OMEXMLMetadataImpl store;
public IMetadataBasedOMEModelMock() {
store = new OMEXMLMetadataImpl();
store.createRoot();
makeImage();
makeInstrument();
makePlate();
makeROI();
store.resolveReferences();
}
@Override
public MetadataRoot getRoot() {
return store.getRoot();
}
private void makeImage() {
// Create <Image/>
store.setImageID(InOutCurrentTest.IMAGE_ID, 0);
store.setListAnnotationID(InOutCurrentTest.IMAGE_LIST_ANNOTATION_ID, 0);
store.setListAnnotationNamespace(
InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 0);
store.setBooleanAnnotationID(InOutCurrentTest.IMAGE_ANNOTATION_ID, 0);
store.setBooleanAnnotationNamespace(
InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 0);
store.setListAnnotationAnnotationRef(
InOutCurrentTest.IMAGE_ANNOTATION_ID, 0, 0);
store.setBooleanAnnotationValue(InOutCurrentTest.IMAGE_ANNOTATION_VALUE, 0);
store.setBooleanAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 0);
store.setBooleanAnnotationValue(InOutCurrentTest.IMAGE_ANNOTATION_VALUE, 0);
store.setImageAnnotationRef(InOutCurrentTest.IMAGE_LIST_ANNOTATION_ID, 0, 0);
// Create <Pixels/>
store.setPixelsID(InOutCurrentTest.PIXELS_ID, 0);
store.setPixelsSizeX(new PositiveInteger(InOutCurrentTest.SIZE_X), 0);
store.setPixelsSizeY(new PositiveInteger(InOutCurrentTest.SIZE_Y), 0);
store.setPixelsSizeZ(new PositiveInteger(InOutCurrentTest.SIZE_Z), 0);
store.setPixelsSizeC(new PositiveInteger(InOutCurrentTest.SIZE_C), 0);
store.setPixelsSizeT(new PositiveInteger(InOutCurrentTest.SIZE_T), 0);
store.setPixelsDimensionOrder(InOutCurrentTest.DIMENSION_ORDER, 0);
store.setPixelsType(InOutCurrentTest.PIXEL_TYPE, 0);
store.setUUIDValue(InOutCurrentTest.TIFF_DATA_UUID, 0, 0);
// Create <Channel/> under <Pixels/>
store.setXMLAnnotationID(
InOutCurrentTest.CHANNEL_ANNOTATION_ID, 0);
store.setXMLAnnotationNamespace(
InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 0);
store.setXMLAnnotationValue(
InOutCurrentTest.CHANNEL_ANNOTATION_VALUE, 0);
store.setXMLAnnotationNamespace(
InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 0);
for (int i = 0; i < InOutCurrentTest.SIZE_C; i++) {
store.setChannelID("Channel:" + i, 0, i);
if (i == 0) {
store.setChannelAnnotationRef(
InOutCurrentTest.CHANNEL_ANNOTATION_ID, 0, i, 0);
}
}
}
private void makeInstrument() {
// Create <Instrument/>
store.setInstrumentID(InOutCurrentTest.INSTRUMENT_ID, 0);
// Create <Detector/> under <Instrument/>
store.setDetectorID(InOutCurrentTest.DETECTOR_ID, 0, 0);
store.setDetectorModel(InOutCurrentTest.DETECTOR_MODEL, 0, 0);
// Create <Annotation/> under <Detector/>
store.setCommentAnnotationID(InOutCurrentTest.DETECTOR_ANNOTATION_ID, 0);
store.setCommentAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 0);
store.setCommentAnnotationValue(InOutCurrentTest.DETECTOR_ANNOTATION_VALUE, 0);
store.setDetectorAnnotationRef(InOutCurrentTest.DETECTOR_ANNOTATION_ID, 0, 0, 0);
// Create <Laser/> under <Instrument/>
store.setLaserID(InOutCurrentTest.LIGHTSOURCE_LASER_ID, 0, 0);
store.setLaserModel(InOutCurrentTest.LIGHTSOURCE_LASER_MODEL, 0, 0);
store.setLaserType(InOutCurrentTest.LASER_TYPE, 0, 0);
store.setLaserPower(new Power(InOutCurrentTest.LIGHTSOURCE_LASER_POWER, UNITS.MW), 0, 0);
// Create <Annotation/> under <Laser/>
store.setCommentAnnotationID(InOutCurrentTest.LIGHTSOURCE_LASER_ANNOTATION_ID, 1);
store.setCommentAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 1);
store.setCommentAnnotationValue(InOutCurrentTest.LIGHTSOURCE_LASER_ANNOTATION_VALUE, 1);
store.setLightEmittingDiodeAnnotationRef(InOutCurrentTest.LIGHTSOURCE_LASER_ANNOTATION_ID, 0, 0, 0);
// with a Pump>
store.setLaserID(InOutCurrentTest.LIGHTSOURCE_PUMP_ID, 0, 1);
store.setLaserModel(InOutCurrentTest.LIGHTSOURCE_PUMP_MODEL, 0, 1);
store.setLaserType(InOutCurrentTest.LASER_TYPE, 0, 1);
store.setLaserPower(new Power(InOutCurrentTest.LIGHTSOURCE_PUMP_POWER, UNITS.MW), 0, 1);
// and link them
store.setLaserPump(InOutCurrentTest.LIGHTSOURCE_PUMP_ID, 0, 0);
// Create <Arc/> under <Instrument/>
store.setArcID(InOutCurrentTest.LIGHTSOURCE_ARC_ID, 0, 2);
store.setArcModel(InOutCurrentTest.LIGHTSOURCE_ARC_MODEL, 0, 2);
store.setArcType(InOutCurrentTest.ARC_TYPE, 0, 2);
store.setArcPower(new Power(InOutCurrentTest.LIGHTSOURCE_ARC_POWER, UNITS.MW), 0, 2);
// Create <Annotation/> under <Arc/>
store.setCommentAnnotationID(InOutCurrentTest.LIGHTSOURCE_ARC_ANNOTATION_ID, 2);
store.setCommentAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 2);
store.setCommentAnnotationValue(InOutCurrentTest.LIGHTSOURCE_ARC_ANNOTATION_VALUE, 2);
store.setLightEmittingDiodeAnnotationRef(InOutCurrentTest.LIGHTSOURCE_ARC_ANNOTATION_ID, 0, 2, 0);
// Create <Filament/> under <Instrument/>
store.setFilamentID(InOutCurrentTest.LIGHTSOURCE_FILAMENT_ID, 0, 3);
store.setFilamentModel(InOutCurrentTest.LIGHTSOURCE_FILAMENT_MODEL, 0, 3);
store.setFilamentType(InOutCurrentTest.FILAMENT_TYPE, 0, 3);
store.setFilamentPower(new Power(InOutCurrentTest.LIGHTSOURCE_FILAMENT_POWER, UNITS.MW), 0, 3);
// Create <Annotation/> under <Filament/>
store.setCommentAnnotationID(InOutCurrentTest.LIGHTSOURCE_FILAMENT_ANNOTATION_ID, 3);
store.setCommentAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 3);
store.setCommentAnnotationValue(InOutCurrentTest.LIGHTSOURCE_FILAMENT_ANNOTATION_VALUE, 3);
store.setLightEmittingDiodeAnnotationRef(InOutCurrentTest.LIGHTSOURCE_FILAMENT_ANNOTATION_ID, 0, 3, 0);
// Create <LightEmittingDiode/> under <Instrument/>
store.setLightEmittingDiodeID(InOutCurrentTest.LIGHTSOURCE_LED_ID, 0, 4);
store.setLightEmittingDiodeModel(InOutCurrentTest.LIGHTSOURCE_LED_MODEL, 0, 4);
store.setLightEmittingDiodePower(new Power(InOutCurrentTest.LIGHTSOURCE_LED_POWER, UNITS.MW), 0, 4);
// Create <Annotation/> under <LightEmittingDiode/>
store.setCommentAnnotationID(InOutCurrentTest.LIGHTSOURCE_LED_ANNOTATION_ID, 4);
store.setCommentAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 4);
store.setCommentAnnotationValue(InOutCurrentTest.LIGHTSOURCE_LED_ANNOTATION_VALUE, 4);
store.setLightEmittingDiodeAnnotationRef(InOutCurrentTest.LIGHTSOURCE_LED_ANNOTATION_ID, 0, 4, 0);
// Create <Dichroic/> under <Instrument/>
store.setDichroicID(InOutCurrentTest.DICHROIC_ID, 0, 0);
store.setDichroicSerialNumber(InOutCurrentTest.DICHROIC_SN, 0, 0);
// Create <Annotation/> under <Dichroic/>
store.setCommentAnnotationID(InOutCurrentTest.DICHROIC_ANNOTATION_ID, 5);
store.setCommentAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 5);
store.setCommentAnnotationValue(InOutCurrentTest.DICHROIC_ANNOTATION_VALUE, 5);
store.setDichroicAnnotationRef(InOutCurrentTest.DICHROIC_ANNOTATION_ID, 0, 0, 0);
// Create <FilterSet/> under <Instrument/>
store.setFilterSetID(InOutCurrentTest.FILTERSET_ID, 0, 0);
store.setFilterSetLotNumber(InOutCurrentTest.FILTERSET_LOT, 0, 0);
store.setFilterSetDichroicRef(InOutCurrentTest.DICHROIC_ID, 0, 0);
store.setFilterSetEmissionFilterRef(InOutCurrentTest.EM_FILTER_ID, 0, 0, 0);
store.setFilterSetExcitationFilterRef(InOutCurrentTest.EX_FILTER_ID, 0, 0, 0);
// Create <Filter/>s under <Instrument/>
store.setFilterID(InOutCurrentTest.EM_FILTER_ID, 0, 0);
store.setFilterType(InOutCurrentTest.EM_FILTER_TYPE, 0, 0);
// Create <Annotation/> under first <Filter/>
store.setCommentAnnotationID(InOutCurrentTest.EM_FILTER_ANNOTATION_ID, 6);
store.setCommentAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 6);
store.setCommentAnnotationValue(InOutCurrentTest.EM_FILTER_ANNOTATION_VALUE, 6);
store.setFilterAnnotationRef(InOutCurrentTest.EM_FILTER_ANNOTATION_ID, 0, 0, 0);
store.setFilterID(InOutCurrentTest.EX_FILTER_ID, 0, 1);
store.setFilterType(InOutCurrentTest.EX_FILTER_TYPE, 0, 1);
// Create <Objective/> under <Instrument/>
store.setObjectiveID(InOutCurrentTest.OBJECTIVE_ID, 0, 0);
store.setObjectiveModel(InOutCurrentTest.OBJECTIVE_MODEL, 0, 0);
// Create <Annotation/> under <Objective/>
store.setCommentAnnotationID(InOutCurrentTest.OBJECTIVE_ANNOTATION_ID, 7);
store.setCommentAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 7);
store.setCommentAnnotationValue(InOutCurrentTest.OBJECTIVE_ANNOTATION_VALUE, 7);
store.setObjectiveAnnotationRef(InOutCurrentTest.OBJECTIVE_ANNOTATION_ID, 0, 0, 0);
// Create <Annotation/> under <Instrument/>
store.setCommentAnnotationID(InOutCurrentTest.INSTRUMENT_ANNOTATION_ID, 8);
store.setCommentAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 8);
store.setCommentAnnotationValue(InOutCurrentTest.INSTRUMENT_ANNOTATION_VALUE, 8);
store.setInstrumentAnnotationRef(InOutCurrentTest.INSTRUMENT_ANNOTATION_ID, 0, 0);
// link Instrument to the first Image
store.setImageInstrumentRef(InOutCurrentTest.INSTRUMENT_ID, 0);
}
private void makePlate() {
store.setPlateID(InOutCurrentTest.PLATE_ID, 0);
store.setPlateRows(InOutCurrentTest.WELL_ROWS, 0);
store.setPlateColumns(InOutCurrentTest.WELL_COLS, 0);
store.setPlateRowNamingConvention(InOutCurrentTest.WELL_ROW, 0);
store.setPlateColumnNamingConvention(InOutCurrentTest.WELL_COL, 0);
store.setPlateAnnotationRef(InOutCurrentTest.PLATE_ANNOTATION_ID, 0, 0);
store.setTimestampAnnotationID(InOutCurrentTest.PLATE_ANNOTATION_ID, 0);
store.setTimestampAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 0);
store.setTimestampAnnotationValue(new Timestamp(InOutCurrentTest.PLATE_ANNOTATION_VALUE), 0);
int wellSampleIndex = 0;
int wellCount = 0;
for (int row=0; row<InOutCurrentTest.WELL_ROWS.getValue(); row++) {
for (int col=0; col<InOutCurrentTest.WELL_COLS.getValue(); col++) {
store.setWellID(String.format("Well:%d_%d", row, col), 0, wellCount);
store.setWellRow(new NonNegativeInteger(row), 0, wellCount);
store.setWellColumn(new NonNegativeInteger(col), 0, wellCount);
if (row == 0 && col == 0) {
store.setLongAnnotationID(InOutCurrentTest.WELL_ANNOTATION_ID, 0);
store.setLongAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 0);
store.setLongAnnotationValue(InOutCurrentTest.WELL_ANNOTATION_VALUE, 0);
store.setWellAnnotationRef(InOutCurrentTest.WELL_ANNOTATION_ID, 0, wellCount, 0);
}
store.setWellSampleID(String.format("WellSample:%d_%d", row, col), 0, wellCount, 0);
store.setWellSampleIndex(new NonNegativeInteger(wellSampleIndex), 0, wellCount, 0);
store.setWellSampleImageRef(InOutCurrentTest.IMAGE_ID, 0, wellCount, 0);
wellSampleIndex++;
wellCount++;
}
}
}
private void makeROI() {
store.setROIID(InOutCurrentTest.ROI_ID, 0);
store.setCommentAnnotationID(InOutCurrentTest.ROI_ANNOTATION_ID, 9);
store.setCommentAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 9);
store.setCommentAnnotationValue(InOutCurrentTest.ROI_ANNOTATION_VALUE, 9);
store.setROIAnnotationRef(InOutCurrentTest.ROI_ANNOTATION_ID, 0, 0);
store.setRectangleID(InOutCurrentTest.SHAPE_ID, 0, 0);
store.setRectangleX(InOutCurrentTest.RECTANGLE_X, 0, 0);
store.setRectangleY(InOutCurrentTest.RECTANGLE_Y, 0, 0);
store.setRectangleWidth(InOutCurrentTest.RECTANGLE_WIDTH, 0, 0);
store.setRectangleHeight(InOutCurrentTest.RECTANGLE_HEIGHT, 0, 0);
}
}