/*
* 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.io.IOException;
/**
* Contains the suitability information for a single palette with several colour schemes.
*
* @author Cory Horner, Refractions Research Inc.
* @source $URL$
*/
public class PaletteSuitability {
/** Suitability = GOOD */
public static final int QUALITY_GOOD = 3;
/** Suitability = UNKNOWN */
public static final int QUALITY_UNKNOWN = 2;
/** Suitability = DOUBTFUL */
public static final int QUALITY_DOUBTFUL = 1;
/** Suitability = BAD */
public static final int QUALITY_BAD = 0;
/** ViewerType = Suitable for the colorblind? */
public static final int VIEWER_COLORBLIND = 0;
/** ViewerType = Suitable for photocopiers? */
public static final int VIEWER_PHOTOCOPY = 1;
/** ViewerType = Suitable for overhead projectors (lcd)? */
public static final int VIEWER_PROJECTOR = 2;
/** ViewerType = Suitable for LCD monitors? */
public static final int VIEWER_LCD = 3;
/** ViewerType = Suitable for CRT monitors? */
public static final int VIEWER_CRT = 4;
/** ViewerType = Suitable for colour printing? */
public static final int VIEWER_PRINT = 5;
/**
* Contains the suitability data for this palette. First index is the
* number of colors - 2. Second index is the viewer type. Values are the
* suitability value.
*
* <p>
* Viewer Types: PaletteSuitability.COLORBLIND, PHOTOCOPY, PROJECTOR, LCD,
* CRT, or PRINT
* </p>
*
* <p>
* Suitability: PaletteSuitability.GOOD, UNKNOWN, DOUBTFUL, or BAD
* </p>
*/
private int[][] paletteSuitability = new int[11][6];
/**
* The maximum number of colors this palette can support (minimum is
* assumed to be 2).
*/
private int maxColors = 0;
public PaletteSuitability() {
}
/**
* Indexed getter for property paletteSuitability. For this palette, this
* returns an array containing the integer values for all 6 suitabilities.
*
* @param numClasses
* The number of colors to determine the suitability for
*
* @return int array; index = PaletteSuitability.VIEWER_COLORBLIND,
* VIEWER_PHOTOCOPY, VIEWER_PROJECTOR, VIEWER_LCD, VIEWER_CRT, or
* VIEWER_PRINT; values = PaletteSuitability.QUALITY_GOOD,
* QUALITY_UNKNOWN, QUALITY_DOUBTFUL, or QUALITY_BAD.
*/
public int[] getSuitability(int numClasses) {
return paletteSuitability[numClasses - 2];
}
/**
* Indexed getter for the property paletteSuitability. For the selected
* palette and viewerType, this returns the integer value of the
*
* @param numClasses
* number of colours in this palette
* @param viewerType
* PaletteSuitability.VIEWER_COLORBLIND, VIEWER_PHOTOCOPY,
* VIEWER_PROJECTOR, VIEWER_LCD, VIEWER_CRT, or VIEWER_PRINT.
*
* @return PaletteSuitability.QUALITY_GOOD, QUALITY_UNKNOWN,
* QUALITY_DOUBTFUL, or QUALITY_BAD.
*/
public int getSuitability(int numClasses, int viewerType) {
return paletteSuitability[numClasses - 2][viewerType];
}
/**
*
*
* @param numClasses Index of the property.
* @param suitability New value of the property at<CODE>index</CODE>.
*
* @throws IOException
*/
public void setSuitability(int numClasses, String[] suitability)
throws IOException {
//update max number of classes
if (numClasses > maxColors) {
maxColors = numClasses;
}
//convert G,D,B,? --> int
if (suitability.length == 6) {
for (int i = 0; i < 6; i++) {
if (suitability[i].equals("G")) {
paletteSuitability[numClasses - 2][i] = QUALITY_GOOD;
} else if (suitability[i].equals("D")) {
paletteSuitability[numClasses - 2][i] = QUALITY_DOUBTFUL;
} else if (suitability[i].equals("B")) {
paletteSuitability[numClasses - 2][i] = QUALITY_BAD;
} else {
paletteSuitability[numClasses - 2][i] = QUALITY_UNKNOWN;
}
}
} else {
throw new IOException("wrong number of items in suitability list");
}
}
public int getMaxColors() {
return maxColors;
}
}