/* * org.openmicroscopy.shoola.env.rnd.RndProxyDef * *------------------------------------------------------------------------------ * Copyright (C) 2006-2014 University of Dundee. All rights reserved. * * * 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, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *------------------------------------------------------------------------------ */ package org.openmicroscopy.shoola.env.rnd; //Java imports import java.awt.Color; import java.sql.Timestamp; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import omero.model.RenderingDef; //Third-party libraries //Application-internal dependencies /** * Stores the rendering settings to speed-up the process. * * @author Jean-Marie Burel      * <a href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a> * @author Donald MacDonald      * <a href="mailto:donald@lifesci.dundee.ac.uk">donald@lifesci.dundee.ac.uk</a> * @version 3.0 * @since OME2.2 */ public class RndProxyDef { /** The default z-section. Cached value to speed up the process. */ private int defaultZ; /** The default timepoint. Cached value to speed up the process. */ private int defaultT; /** The bit resolution. Cached value to speed up the process. */ private int bitResolution; /** * The lower bound of the codomain interval. * Cached value to speed up the process. */ private int cdStart; /** * The upper bound of the codomain interval. * Cached value to speed up the process. */ private int cdEnd; /** The color model. Cached value to speed up the process. */ private String colorModel; /** The codomain the channel bindings. */ private Map<Integer, ChannelBindingsProxy> channels; /** Flag indicating is the pixels type is signed or not. */ private boolean typeSigned; /** The compression value. */ private double compression; /** Indicates when the settings was last modified. */ private Timestamp lastModified; /** The name associated to the rendering settings. */ private String name; /** The original object.*/ private RenderingDef data; /** * Creates a new instance. * * @param data The original object * */ RndProxyDef(RenderingDef data) { this.data = data; compression = 1.0; channels = new HashMap<Integer, ChannelBindingsProxy>(); name = ""; } /** * Sets the name associated to the rendering def. * * @param name The name to set. */ void setName(String name) { this.name = name; } /** * Returns the name. * * @return See above. */ String getName() { return name; } /** * Sets when the settings were last modified. * * @param lastModified The value to set. */ void setLastModified(Timestamp lastModified) { this.lastModified = lastModified; } /** * Returns the number of channels. * * @return See above. */ int getNumberOfChannels() { return channels.size(); } /** * Sets the bindings corresponding to the specified channel. * * @param index The channel index. * @param c The value to set. */ void setChannel(int index, ChannelBindingsProxy c) { channels.put(Integer.valueOf(index), c); } /** * Returns the bindings corresponding to the specified channel. * * @param index The channel index. * @return See above. */ ChannelBindingsProxy getChannel(int index) { return channels.get(Integer.valueOf(index)); } /** * Sets the selected z-section. * * @param z The value to set. */ void setDefaultZ(int z) { defaultZ = z; } /** * Sets the selected timepoint. * * @param t The value to set. */ void setDefaultT(int t) { defaultT = t; } /** * Returns the bit resolution. * * @return See above. */ int getBitResolution() { return bitResolution; } /** * Sets the bit resolution. * * @param bitResolution The value to set. */ void setBitResolution(int bitResolution) { this.bitResolution = bitResolution; } /** * Returns the upper bound of the codomain interval. * * @return See above. */ int getCdEnd() { return cdEnd; } /** * Sets the bounds of the codomain interval. * * @param cdStart The lower bound of the interval. * @param cdEnd The upper bound of the interval. */ void setCodomain(int cdStart, int cdEnd) { this.cdStart = cdStart; this.cdEnd = cdEnd; } /** * Returns the lower bound of the codomain interval. * * @return See above. */ int getCdStart() { return cdStart; } /** * Returns the selected color model. * * @return See above. */ String getColorModel() { return colorModel; } /** * Sets the color model. * * @param colorModel The value to set. */ void setColorModel(String colorModel) { this.colorModel = colorModel; } /** * Sets to <code>true</code> if the pixels type is signed, * <code>false</code> otherwise. * * @param b The value to set. */ void setTypeSigned(boolean b) { typeSigned = b; } /** * Returns <code>true</code> if the pixels type is signed, * <code>false</code> otherwise. * * @return See above. */ boolean isTypeSigned() { return typeSigned; } /** * Returns the compression, a value in the interval ]0, 1]. * * @return See above. */ double getCompression() { return compression; } /** * Sets the compression, a value in the interval ]0, 1]. * * @param compression See above. */ void setCompression(double compression) { if (compression <= 0) compression = 0.1; else if (compression > 1) compression = 1.0; this.compression = compression; } /** * Creates and returns a copy of the element. * * @return See above. */ RndProxyDef copy() { RndProxyDef copy = new RndProxyDef(this.data); copy.setLastModified(this.getLastModified()); copy.setCompression(this.getCompression()); copy.setTypeSigned(this.isTypeSigned()); copy.setDefaultZ(this.getDefaultZ()); copy.setDefaultT(this.getDefaultT()); copy.setBitResolution(this.getBitResolution()); copy.setColorModel(this.getColorModel()); copy.setCodomain(this.getCdStart(), this.getCdEnd()); Iterator<Integer> i = channels.keySet().iterator(); int index; while (i.hasNext()) { index = i.next(); copy.setChannel(index, this.getChannel(index).copy()); } return copy; } /** * Returns the currently selected time-point. * * @return See above. */ public int getDefaultT() { return defaultT; } /** * Returns the currently selected z-section. * * @return See above. */ public int getDefaultZ() { return defaultZ; } /** * Returns the color associated to channel. * * @param index The index of the channel. * @return See above. */ public Color getChannelColor(int index) { ChannelBindingsProxy channel = getChannel(index); if (channel == null) return null; int[] rgba = channel.getRGBA(); return new Color(rgba[0], rgba[1], rgba[2], rgba[3]); } /** * Returns when the settings were last modified. * * @return See above. */ public Timestamp getLastModified() { return lastModified; } /** * Returns the owner's identifier of the rendering settings. * * @return See above. */ public long getOwnerID() { return data.getDetails().getOwner().getId().getValue(); } /** * Returns the identifier of the settings. * * @return See above. */ public long getDataID() { return data.getId().getValue(); } /** * Returns the data hosted by this class. * * @return See above. */ public RenderingDef getData() { return data; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(getName() + "\n"); Iterator<Integer> i = channels.keySet().iterator(); int index; while (i.hasNext()) { index = i.next(); ChannelBindingsProxy channel = this.getChannel(index); int[] rgba = channel.getRGBA(); if (channel.isActive()) sb.append("* "); else sb.append(" "); sb.append("[" + rgba[0] + "," + rgba[1] + "," + rgba[2] + "," + rgba[3] + "] "); sb.append(" start=" + channel.getInputStart() + ", end=" + channel.getInputEnd() + " \n"); } return sb.toString(); } }