/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2005-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library 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
* Lesser General Public License for more details.
*/
package org.geotools.brewer.color;
import java.awt.Color;
/**
* A ColorPalette with additional ColorBrewer information (suitability data and colour selection).
*
* @author James Macgill
* @author Cory Horner, Refractions Research Inc.
* @source $URL$
*/
public class BrewerPalette extends ColorPalette {
private PaletteSuitability suitability;
private SampleScheme sampler;
private PaletteType type;
/**
* Creates a new instance of BrewerPalette
*/
public BrewerPalette() {
}
/**
* Getter for property type.
*
* @return Value of property type.
*/
public PaletteType getType() {
return this.type;
}
/**
* Sets the type of palette.
*
* @param type new palette type
*/
public void setType(PaletteType type) {
this.type = type;
}
public Color getColor(int index, int length) {
return getColors(length)[index];
}
/**
* Getter for the colour count
*
* @return the most colours this palette currently supports
*/
public int getMaxColors() {
int countSampler = sampler.getMaxCount();
int numColors = getCount();
//return the lesser of countSampler and numColors
if (countSampler < numColors) {
return countSampler;
} else {
return numColors;
}
}
/**
* Getter for the colour count
*
* @return the minimum number of colours this palette currently supports
*/
public int getMinColors() {
return sampler.getMinCount();
}
/**
* Obtains a set of colours from the palette.
*/
public Color[] getColors(int length) {
if (length < 2) {
length = 2; //if they ask for 1 colour, give them 2 instead of crashing
}
int[] lookup = sampler.getSampleScheme(length);
Color[] colors = getColors();
Color[] result = new Color[length];
for (int i = 0; i < length; i++) {
result[i] = colors[lookup[i]];
}
return result;
}
public PaletteSuitability getPaletteSuitability() {
return suitability;
}
public void setPaletteSuitability(PaletteSuitability suitability) {
this.suitability = suitability;
}
public SampleScheme getColorScheme() {
return sampler;
}
public void setColorScheme(SampleScheme scheme) {
this.sampler = scheme;
}
}