package org.codemap.util; import java.util.ArrayList; import java.util.TreeMap; public class ColorBrewer { private ArrayList<MColor> colors; private int currentPosition; private TreeMap<String,MColor> forPackage; // disabled for scheme with higher contrast // int[][] rgb = { { 141, 211, 199 }, // { 255, 255, 179 }, // { 190, 186, 218 }, // { 254, 128, 114 }, // { 128, 177, 211 }, // { 253, 180, 98 }, // { 179, 222, 105 }, // { 252, 205, 229 }, // { 217, 217, 217 }, // { 188, 128, 189 }, // { 204, 235, 197 }, // { 255, 237, 111 } }; // used for color by package private static int[][] diverging = { { 106, 61, 154 }, { 255, 255, 153 }, { 166, 206, 227 }, { 31, 120, 180 }, { 178, 223, 138 }, { 51, 160, 44 }, { 251, 154, 153 }, { 227, 26, 28 }, { 253, 191, 111 }, { 255, 127, 0 }, { 202, 178, 214 } }; public static ColorBrewer divergingColors() { return new ColorBrewer().withColors(diverging); } private ColorBrewer withColors(int[][] rgb) { for (int[] color: rgb) { addColor(color); } return this; } /** * Color codes according to http://www.personal.psu.edu/cab38/ColorBrewer/ColorBrewer.html */ public ColorBrewer() { currentPosition = 0; colors = new ArrayList<MColor>(); forPackage = new TreeMap<String,MColor>(); } private void addColor(int[] color) { colors.add(new MColor(color[0], color[1], color[2])); } private MColor nextColor() { if (currentPosition >= colors.size()) { currentPosition = 0; } return colors.get(currentPosition++); } public MColor forPackage(String packageName) { MColor packageColor = forPackage.get(packageName); if (packageColor == null) { packageColor = nextColor(); forPackage.put(packageName, packageColor); } return packageColor; } public MColor next() { return nextColor(); } }