/* * ome.util.Validator * * Copyright 2006 University of Dundee. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ome.model.IObject; import ome.model.acquisition.ImagingEnvironment; import ome.model.core.Channel; import ome.model.core.Pixels; /** * tests of model objects for validity. * * @author Josh Moore      <a * href="mailto:josh.moore@gmx.de">josh.moore@gmx.de</a> * @version 1.0 * @since 1.0 */ public abstract class Validator { protected static Logger log = LoggerFactory.getLogger(Validator.class); public static Validation validate(IObject obj) { return Validation.VALID(); } public static Validation validate(Channel channel) { Validation v = Validation.VALID(); /** * this needs to span multiple types. we need to be an attached graph so * we can check those relationships. Can be assume that? Non-Anemic * model? Do null tests count? */ // Pixels pixels = channel.getPixels (need inverse) String piType = channel.getLogicalChannel(). getPhotometricInterpretation().getValue(); // TODO // null // Safe? if (piType.equals("RGB") || piType.equals("ARGB") || piType.equals("CMYK") || piType.equals("HSV")) { if (channel.getRed() == null || channel.getGreen() == null || channel.getBlue() == null || channel.getAlpha() == null) { v.invalidate("Channel colors cannot be null if PiType == " + "{RGB|ARGB|CMYK|HSV}"); } } return v; } public static Validation validate(ImagingEnvironment imageEnvironment) { Validation v = Validation.VALID(); Double co2 = imageEnvironment.getCo2percent(); if (null != co2 && (co2.floatValue() < 0 || co2.floatValue() > 1)) { v.invalidate("ImageEnvironment.co2percent must be between 0 and 1"); } Double humidity = imageEnvironment.getHumidity(); if (null != humidity && (humidity.floatValue() < 0 || humidity.floatValue() > 1)) { v.invalidate("ImageEnvironment.humidity must be between 0 and 1"); } return v; } public static Validation valid(Pixels pixels) { Validation v = Validation.VALID(); /** careful; collections! */ int planeInfoSize = pixels.sizeOfPlaneInfo(); int sizeC = pixels.getSizeC().intValue(); // TODO and sizeX null // (excep? or invalidate?) int sizeT = pixels.getSizeT().intValue(); int sizeZ = pixels.getSizeZ().intValue(); if (!(planeInfoSize == 0 || planeInfoSize == sizeC * sizeT * sizeZ)) { v .invalidate("Size of planeInfo in Pixels should be 0 or sizeC*sizeT*sizeZ"); } return v; } }