/*
* #%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 ome.xml.meta.OMEXMLMetadataRoot;
import ome.xml.model.Arc;
import ome.xml.model.BinaryFile;
import ome.xml.model.BooleanAnnotation;
import ome.xml.model.Channel;
import ome.xml.model.CommentAnnotation;
import ome.xml.model.Detector;
import ome.xml.model.Dichroic;
import ome.xml.model.DoubleAnnotation;
import ome.xml.model.External;
import ome.xml.model.Filament;
import ome.xml.model.Filter;
import ome.xml.model.FilterSet;
import ome.xml.model.Image;
import ome.xml.model.Instrument;
import ome.xml.model.Laser;
import ome.xml.model.LightEmittingDiode;
import ome.xml.model.ListAnnotation;
import ome.xml.model.LongAnnotation;
import ome.xml.model.Objective;
import ome.xml.model.ObjectiveSettings;
import ome.xml.model.Pixels;
import ome.xml.model.Plate;
import ome.xml.model.ROI;
import ome.xml.model.Rectangle;
import ome.xml.model.StructuredAnnotations;
import ome.xml.model.TiffData;
import ome.xml.model.TimestampAnnotation;
import ome.xml.model.UUID;
import ome.xml.model.Union;
import ome.xml.model.Well;
import ome.xml.model.WellSample;
import ome.xml.model.XMLAnnotation;
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 ObjectBasedOMEModelMock implements OMEModelMock {
private OMEXMLMetadataRoot ome;
private StructuredAnnotations annotations;
public ObjectBasedOMEModelMock() {
ome = new OMEXMLMetadataRoot();
annotations = new StructuredAnnotations();
ome.addImage(makeImage());
ome.addPlate(makePlate());
ome.addInstrument(makeInstrument());
ome.addROI(makeROI());
ome.setStructuredAnnotations(annotations);
}
@Override
public OMEXMLMetadataRoot getRoot() {
return ome;
}
private Image makeImage() {
// Create <Image/>
Image image = new Image();
image.setID(InOutCurrentTest.IMAGE_ID);
ListAnnotation listAnnotation = new ListAnnotation();
listAnnotation.setID(InOutCurrentTest.IMAGE_LIST_ANNOTATION_ID);
listAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
annotations.addListAnnotation(listAnnotation);
BooleanAnnotation annotation = new BooleanAnnotation();
annotation.setID(InOutCurrentTest.IMAGE_ANNOTATION_ID);
annotation.setValue(InOutCurrentTest.IMAGE_ANNOTATION_VALUE);
annotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
listAnnotation.linkAnnotation(annotation);
image.linkAnnotation(listAnnotation);
annotations.addBooleanAnnotation(annotation);
// Create <Pixels/>
Pixels pixels = new Pixels();
pixels.setID(InOutCurrentTest.PIXELS_ID);
pixels.setSizeX(new PositiveInteger(InOutCurrentTest.SIZE_X));
pixels.setSizeY(new PositiveInteger(InOutCurrentTest.SIZE_Y));
pixels.setSizeZ(new PositiveInteger(InOutCurrentTest.SIZE_Z));
pixels.setSizeC(new PositiveInteger(InOutCurrentTest.SIZE_C));
pixels.setSizeT(new PositiveInteger(InOutCurrentTest.SIZE_T));
pixels.setDimensionOrder(InOutCurrentTest.DIMENSION_ORDER);
pixels.setType(InOutCurrentTest.PIXEL_TYPE);
// Create <TiffData/>
TiffData tiffData = new TiffData();
// Create <UUID/>
UUID uuid = new UUID();
uuid.setValue(InOutCurrentTest.TIFF_DATA_UUID);
tiffData.setUUID(uuid);
pixels.addTiffData(tiffData);
// Create <Channel/> under <Pixels/>
for (int i = 0; i < InOutCurrentTest.SIZE_C; i++) {
Channel channel = new Channel();
channel.setID("Channel:" + i);
if (i == 0) {
XMLAnnotation channelAnnotation = new XMLAnnotation();
channelAnnotation.setID(InOutCurrentTest.CHANNEL_ANNOTATION_ID);
channelAnnotation.setValue(InOutCurrentTest.CHANNEL_ANNOTATION_VALUE);
channelAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
channel.linkAnnotation(channelAnnotation);
annotations.addXMLAnnotation(channelAnnotation);
}
pixels.addChannel(channel);
}
// Put <Pixels/> under <Image/>
image.setPixels(pixels);
return image;
}
private Instrument makeInstrument() {
// Create <Instrument/>
Instrument instrument = new Instrument();
instrument.setID(InOutCurrentTest.INSTRUMENT_ID);
// Create <Detector/> under <Instrument/>
Detector detector = new Detector();
detector.setID(InOutCurrentTest.DETECTOR_ID);
detector.setModel(InOutCurrentTest.DETECTOR_MODEL);
CommentAnnotation detectorAnnotation = new CommentAnnotation();
detectorAnnotation.setID(InOutCurrentTest.DETECTOR_ANNOTATION_ID);
detectorAnnotation.setValue(InOutCurrentTest.DETECTOR_ANNOTATION_VALUE);
detectorAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
detector.linkAnnotation(detectorAnnotation);
annotations.addCommentAnnotation(detectorAnnotation);
instrument.addDetector(detector);
// Create <Laser/> under <Instrument/>
Laser laser = new Laser();
laser.setID(InOutCurrentTest.LIGHTSOURCE_LASER_ID);
laser.setModel(InOutCurrentTest.LIGHTSOURCE_LASER_MODEL);
laser.setType(InOutCurrentTest.LASER_TYPE);
laser.setPower(new Power(InOutCurrentTest.LIGHTSOURCE_LASER_POWER, UNITS.MW));
CommentAnnotation laserAnnotation = new CommentAnnotation();
laserAnnotation.setID(InOutCurrentTest.LIGHTSOURCE_LASER_ANNOTATION_ID);
laserAnnotation.setValue(InOutCurrentTest.LIGHTSOURCE_LASER_ANNOTATION_VALUE);
laserAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
laser.linkAnnotation(laserAnnotation);
annotations.addCommentAnnotation(laserAnnotation);
// with a <Pump/>
Laser laserPump = new Laser();
laserPump.setID(InOutCurrentTest.LIGHTSOURCE_PUMP_ID);
laserPump.setModel(InOutCurrentTest.LIGHTSOURCE_PUMP_MODEL);
laserPump.setType(InOutCurrentTest.LASER_TYPE);
laserPump.setPower(new Power(InOutCurrentTest.LIGHTSOURCE_PUMP_POWER, UNITS.MW));
laser.linkPump(laserPump);
instrument.addLightSource(laser);
instrument.addLightSource(laserPump);
// Create <Arc/> under <Instrument/>
Arc arc = new Arc();
arc.setID(InOutCurrentTest.LIGHTSOURCE_ARC_ID);
arc.setModel(InOutCurrentTest.LIGHTSOURCE_ARC_MODEL);
arc.setType(InOutCurrentTest.ARC_TYPE);
arc.setPower(new Power(InOutCurrentTest.LIGHTSOURCE_ARC_POWER, UNITS.MW));
CommentAnnotation arcAnnotation = new CommentAnnotation();
arcAnnotation.setID(InOutCurrentTest.LIGHTSOURCE_ARC_ANNOTATION_ID);
arcAnnotation.setValue(InOutCurrentTest.LIGHTSOURCE_ARC_ANNOTATION_VALUE);
arcAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
arc.linkAnnotation(arcAnnotation);
annotations.addCommentAnnotation(arcAnnotation);
instrument.addLightSource(arc);
// Create <Filament/> under <Instrument/>
Filament filament = new Filament();
filament.setID(InOutCurrentTest.LIGHTSOURCE_FILAMENT_ID);
filament.setModel(InOutCurrentTest.LIGHTSOURCE_FILAMENT_MODEL);
filament.setType(InOutCurrentTest.FILAMENT_TYPE);
filament.setPower(new Power(InOutCurrentTest.LIGHTSOURCE_FILAMENT_POWER, UNITS.MW));
CommentAnnotation filamentAnnotation = new CommentAnnotation();
filamentAnnotation.setID(InOutCurrentTest.LIGHTSOURCE_FILAMENT_ANNOTATION_ID);
filamentAnnotation.setValue(InOutCurrentTest.LIGHTSOURCE_FILAMENT_ANNOTATION_VALUE);
filamentAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
filament.linkAnnotation(filamentAnnotation);
annotations.addCommentAnnotation(filamentAnnotation);
instrument.addLightSource(filament);
// Create <LightEmittingDiode/> under <Instrument/>
LightEmittingDiode led = new LightEmittingDiode();
led.setID(InOutCurrentTest.LIGHTSOURCE_LED_ID);
led.setModel(InOutCurrentTest.LIGHTSOURCE_LED_MODEL);
led.setPower(new Power(InOutCurrentTest.LIGHTSOURCE_LED_POWER, UNITS.MW));
CommentAnnotation ledAnnotation = new CommentAnnotation();
ledAnnotation.setID(InOutCurrentTest.LIGHTSOURCE_LED_ANNOTATION_ID);
ledAnnotation.setValue(InOutCurrentTest.LIGHTSOURCE_LED_ANNOTATION_VALUE);
ledAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
led.linkAnnotation(ledAnnotation);
annotations.addCommentAnnotation(ledAnnotation);
instrument.addLightSource(led);
// Create <Dichroic/> under <Instrument/>
Dichroic dichroic = new Dichroic();
dichroic.setID(InOutCurrentTest.DICHROIC_ID);
dichroic.setSerialNumber(InOutCurrentTest.DICHROIC_SN);
CommentAnnotation dichroicAnnotation = new CommentAnnotation();
dichroicAnnotation.setID(InOutCurrentTest.DICHROIC_ANNOTATION_ID);
dichroicAnnotation.setValue(InOutCurrentTest.DICHROIC_ANNOTATION_VALUE);
dichroicAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
dichroic.linkAnnotation(dichroicAnnotation);
annotations.addCommentAnnotation(dichroicAnnotation);
// Create <FilterSet/> under <Dichroic/>
FilterSet filterSet = new FilterSet();
filterSet.setID(InOutCurrentTest.FILTERSET_ID);
filterSet.setLotNumber(InOutCurrentTest.FILTERSET_LOT);
filterSet.linkDichroic(dichroic);
Filter emFilter = new Filter();
Filter exFilter = new Filter();
// Create <Objective/> under <Instrument/>
Objective objective = new Objective();
objective.setID(InOutCurrentTest.OBJECTIVE_ID);
objective.setModel(InOutCurrentTest.OBJECTIVE_MODEL);
CommentAnnotation objectiveAnnotation = new CommentAnnotation();
objectiveAnnotation.setID(InOutCurrentTest.OBJECTIVE_ANNOTATION_ID);
objectiveAnnotation.setValue(InOutCurrentTest.OBJECTIVE_ANNOTATION_VALUE);
objectiveAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
objective.linkAnnotation(objectiveAnnotation);
annotations.addCommentAnnotation(objectiveAnnotation);
emFilter.setID(InOutCurrentTest.EM_FILTER_ID);
emFilter.setType(InOutCurrentTest.EM_FILTER_TYPE);
exFilter.setID(InOutCurrentTest.EX_FILTER_ID);
exFilter.setType(InOutCurrentTest.EX_FILTER_TYPE);
CommentAnnotation emFilterAnnotation = new CommentAnnotation();
emFilterAnnotation.setID(InOutCurrentTest.EM_FILTER_ANNOTATION_ID);
emFilterAnnotation.setValue(InOutCurrentTest.EM_FILTER_ANNOTATION_VALUE);
emFilterAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
emFilter.linkAnnotation(emFilterAnnotation);
annotations.addCommentAnnotation(emFilterAnnotation);
instrument.addFilter(emFilter);
instrument.addFilter(exFilter);
instrument.addObjective(objective);
filterSet.linkEmissionFilter(emFilter);
filterSet.linkExcitationFilter(exFilter);
filterSet.linkDichroic(dichroic);
instrument.addFilterSet(filterSet);
instrument.addDichroic(dichroic);
CommentAnnotation instrumentAnnotation = new CommentAnnotation();
instrumentAnnotation.setID(InOutCurrentTest.INSTRUMENT_ANNOTATION_ID);
instrumentAnnotation.setValue(InOutCurrentTest.INSTRUMENT_ANNOTATION_VALUE);
instrumentAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
instrument.linkAnnotation(instrumentAnnotation);
annotations.addCommentAnnotation(instrumentAnnotation);
// link Instrument to the first Image
Image image = ome.getImage(0);
image.linkInstrument(instrument);
return instrument;
}
private Plate makePlate() {
Plate plate = new Plate();
plate.setID(InOutCurrentTest.PLATE_ID);
plate.setRows(InOutCurrentTest.WELL_ROWS);
plate.setColumns(InOutCurrentTest.WELL_COLS);
plate.setRowNamingConvention(InOutCurrentTest.WELL_ROW);
plate.setColumnNamingConvention(InOutCurrentTest.WELL_COL);
TimestampAnnotation plateAnnotation = new TimestampAnnotation();
plateAnnotation.setID(InOutCurrentTest.PLATE_ANNOTATION_ID);
plateAnnotation.setValue(new Timestamp(InOutCurrentTest.PLATE_ANNOTATION_VALUE));
plateAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
plate.linkAnnotation(plateAnnotation);
annotations.addTimestampAnnotation(plateAnnotation);
int wellSampleIndex = 0;
for (int row=0; row<InOutCurrentTest.WELL_ROWS.getValue(); row++) {
for (int col=0; col<InOutCurrentTest.WELL_COLS.getValue(); col++) {
Well well = new Well();
well.setID(String.format("Well:%d_%d", row, col));
well.setRow(new NonNegativeInteger(row));
well.setColumn(new NonNegativeInteger(col));
if (row == 0 && col == 0) {
LongAnnotation annotation = new LongAnnotation();
annotation.setID(InOutCurrentTest.WELL_ANNOTATION_ID);
annotation.setValue(InOutCurrentTest.WELL_ANNOTATION_VALUE);
annotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
well.linkAnnotation(annotation);
annotations.addLongAnnotation(annotation);
}
WellSample sample = new WellSample();
sample.setID(String.format("WellSample:%d_%d", row, col));
sample.setIndex(new NonNegativeInteger(wellSampleIndex));
sample.linkImage(ome.getImage(0));
well.addWellSample(sample);
plate.addWell(well);
wellSampleIndex++;
}
}
return plate;
}
private ROI makeROI() {
ROI roi = new ROI();
roi.setID(InOutCurrentTest.ROI_ID);
CommentAnnotation roiAnnotation = new CommentAnnotation();
roiAnnotation.setID(InOutCurrentTest.ROI_ANNOTATION_ID);
roiAnnotation.setValue(InOutCurrentTest.ROI_ANNOTATION_VALUE);
roiAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
roi.linkAnnotation(roiAnnotation);
annotations.addCommentAnnotation(roiAnnotation);
Union shapeUnion = new Union();
Rectangle rect = new Rectangle();
rect.setID(InOutCurrentTest.SHAPE_ID);
rect.setX(InOutCurrentTest.RECTANGLE_X);
rect.setY(InOutCurrentTest.RECTANGLE_Y);
rect.setWidth(InOutCurrentTest.RECTANGLE_WIDTH);
rect.setHeight(InOutCurrentTest.RECTANGLE_HEIGHT);
shapeUnion.addShape(rect);
roi.setUnion(shapeUnion);
return roi;
}
}