/* * Copyright 2009 Glencoe Software, Inc. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.services.blitz.measurements; import omero.ServerError; import omero.ValidationException; import omero.grid.BoolColumn; import omero.grid.Column; import omero.grid.DoubleColumn; import omero.grid.FileColumn; import omero.grid.ImageColumn; import omero.grid.LongColumn; import omero.grid.RoiColumn; import omero.grid.StringColumn; import omero.grid.WellColumn; /** * Parallel type hierarchy to {@link omero.grid.Column} to facilitate (and * speed-up) working with columns without adding methods to the slice * definitions. * * @since Beta4.1 */ public abstract class Helper { /** * Factory method to generate Helper instances from the LSID of a given * column. * * @param lsid The lsid * @return See above. * @throws ServerError */ public static Helper fromLsid(String lsid) throws ServerError { if (lsid.contains("File")) { return new FileHelper(); } else if (lsid.contains("Roi")) { return new RoiHelper(); } else if (lsid.contains("Image")) { return new ImageHelper(); } else if (lsid.contains("Well")) { return new WellHelper(); } else { throw new ValidationException(null, null, "Unknown id type: " + lsid); } } /** * Factory method to generate Helper instances from the Class of a given * column. * * @param kls The class. * @return See above. * @throws ServerError */ public static Helper fromClass(Class kls) throws ServerError { if (Long.class.equals(kls)) { return new LongHelper(); } else if (Double.class.equals(kls)) { return new DoubleHelper(); } else if (Boolean.class.equals(kls)) { return new BoolHelper(); } else if (String.class.equals(kls)) { return new StringHelper(); } else { throw new ValidationException(null, null, "Unknown column type: " + kls.getName()); } } abstract Column newInstance(); abstract void setSize(Column col, int length); abstract void setValue(Column col, int rowIdx, Object object); static class FileHelper extends Helper { @Override Column newInstance() { return new FileColumn(); } @Override void setSize(Column col, int length) { ((FileColumn) col).values = new long[length]; } @Override void setValue(Column col, int rowIdx, Object value) { ((FileColumn) col).values[rowIdx] = ((Long) value).longValue(); } } static class RoiHelper extends Helper { @Override Column newInstance() { return new RoiColumn(); } @Override void setSize(Column col, int length) { ((RoiColumn) col).values = new long[length]; } @Override void setValue(Column col, int rowIdx, Object value) { ((RoiColumn) col).values[rowIdx] = ((Long) value).longValue(); } } static class ImageHelper extends Helper { @Override Column newInstance() { return new ImageColumn(); } @Override void setSize(Column col, int length) { ((ImageColumn) col).values = new long[length]; } @Override void setValue(Column col, int rowIdx, Object value) { ((ImageColumn) col).values[rowIdx] = ((Long) value).longValue(); } } static class WellHelper extends Helper { @Override Column newInstance() { return new WellColumn(); } @Override void setSize(Column col, int length) { ((WellColumn) col).values = new long[length]; } @Override void setValue(Column col, int rowIdx, Object value) { ((WellColumn) col).values[rowIdx] = ((Long) value).longValue(); } } static class BoolHelper extends Helper { @Override Column newInstance() { return new BoolColumn(); } @Override void setSize(Column col, int length) { ((BoolColumn) col).values = new boolean[length]; } @Override void setValue(Column col, int rowIdx, Object value) { ((BoolColumn) col).values[rowIdx] = ((Boolean) value) .booleanValue(); } } static class DoubleHelper extends Helper { @Override Column newInstance() { return new DoubleColumn(); } @Override void setSize(Column col, int length) { ((DoubleColumn) col).values = new double[length]; } @Override void setValue(Column col, int rowIdx, Object value) { ((DoubleColumn) col).values[rowIdx] = ((Double) value) .doubleValue(); } } static class LongHelper extends Helper { @Override Column newInstance() { return new LongColumn(); } @Override void setSize(Column col, int length) { ((LongColumn) col).values = new long[length]; } @Override void setValue(Column col, int rowIdx, Object value) { ((LongColumn) col).values[rowIdx] = ((Long) value).longValue(); } } static class StringHelper extends Helper { @Override Column newInstance() { return new StringColumn(); } @Override void setSize(Column col, int length) { ((StringColumn) col).values = new String[length]; } @Override void setValue(Column col, int rowIdx, Object value) { ((StringColumn) col).values[rowIdx] = (String) value; } } }