package kg.apc.charting.colors; import kg.apc.charting.ColorsDispatcher; import org.apache.jorphan.logging.LoggingManager; import org.apache.log.Logger; import java.awt.Color; import java.util.ArrayList; import java.util.List; /** * Custom Color Palette * * Define custom palette by setting the following in jmeter.properties or user.properties: * <li><code>jmeterPlugin.customColorsDispatcher = custompalette</code></li> * <li><code>jmeterPlugin.customColorsDispatcher.options = 112233,aabbff</code></li> * * Where options are a comma separated list of color hex values */ public class CustomPalette implements ColorsDispatcher { List<Color> customPalette = new ArrayList<Color>(16); private static final Logger log = LoggingManager.getLoggerForClass(); int i = 0; /** * Implements ColorDispatcher using user supplied custom palette list * @param options comma delimited list of colors in hex, e.g. 112233,aa00ff */ public CustomPalette(String options) { buildCustomPalette(options); reset(); } private void buildCustomPalette(String palette) { try { String[] colors = palette.split(","); if (palette.trim().length() == 0 || colors.length == 0) { log.warn("Empty palette, using static palette"); useStaticPalette(); return; } for (String color : colors) { try { Color c = new Color(Integer.parseInt(color, 16)); log.debug("Adding to custom palette color: " + c); customPalette.add(c); } catch (Exception e) { log.warn("Exception " + e.getClass().getName() + " adding color: " + color + " ...skipping"); } } } catch (Exception e) { log.error("Error building custom palette, using static palette: " + e.getClass().getName() + ": " + e.getMessage()); useStaticPalette(); } } private void useStaticPalette() { customPalette.add(new Color(0xb02727)); customPalette.add(new Color(0xb05e27)); customPalette.add(new Color(0xb09627)); customPalette.add(new Color(0x93b027)); customPalette.add(new Color(0x5bb027)); customPalette.add(new Color(0x27b02a)); customPalette.add(new Color(0x27b062)); customPalette.add(new Color(0x27b099)); customPalette.add(new Color(0x2790b0)); customPalette.add(new Color(0x2758b0)); customPalette.add(new Color(0x2d27b0)); customPalette.add(new Color(0x6527b0)); customPalette.add(new Color(0x9c27b0)); customPalette.add(new Color(0x000)); customPalette.add(new Color(0x333333)); customPalette.add(new Color(0x666666)); } @Override public void reset() { i = 0; } @Override public Color getNextColor() { if (i+1 > customPalette.size()) { reset(); return getNextColor(); } else { Color c = customPalette.get(i); log.debug("Custom color c next: " + c); i++; return c; } } }