/* * The MIT License (MIT) * * Copyright (c) 2007-2015 Broad Institute * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.broad.igv.renderer; import org.broad.igv.ui.color.ColorUtilities; import java.awt.*; import java.util.HashMap; import java.util.Map; /** * A simple lookup color scale backed by a map. * * @author jrobinso */ public class MappedColorScale extends AbstractColorScale { public static String serializationClassId = "MappedColorScale"; Map<String, Color> colorMap; boolean defaultCS = false; /** * Construct an instance from a serizled string representation. * * @param serializedInstance */ public MappedColorScale(String serializedInstance) { colorMap = new HashMap<String, Color>(); String[] tokens = serializedInstance.split(";"); // First token is class string -- todo, validate this? for (int i = 1; i < tokens.length; i++) { String[] keyValue = tokens[i].split(" "); if (keyValue.length == 2) { String key = keyValue[0].trim(); Color c = ColorUtilities.stringToColor(keyValue[1]); colorMap.put(key, c); } } } /** * Construct an instance from a color map * * @param colorMap */ public MappedColorScale(Map<String, Color> colorMap) { this.colorMap = new HashMap<String, Color>(); this.colorMap.putAll(colorMap); } public boolean isDefault() { return defaultCS; } /** * Return a string representing the state fo this instance * * @return */ public String asString() { StringBuffer buf = new StringBuffer(); buf.append(serializationClassId); for (Map.Entry<String, Color> mapEntry : colorMap.entrySet()) { buf.append(";"); buf.append(mapEntry.getKey() + " "); buf.append(ColorUtilities.colorToString(mapEntry.getValue())); } return buf.toString(); } /** * @return the number of entries in this instance */ public int getSize() { return colorMap.size(); } /** * Comparison method. Primary use is to support unit tests. * * @param anotherCS * @return */ public boolean isSame(MappedColorScale anotherCS) { if (this.getSize() != anotherCS.getSize()) { return false; } for (String key : colorMap.keySet()) { if (!this.getColor(key).equals(anotherCS.getColor(key))) { return false; } } return true; } @Override public Color getColor(String key) { return colorMap.containsKey(key) ? colorMap.get(key) : defaultColor; } public Color getNoDataColor() { return noDataColor; } }