/*
* 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;
/**
* This class doubles as a filter and an identifier for colour palettes.
*
*
* @source $URL$
*/
public class PaletteType {
/** name of the type, if null this will match any name */
String name;
/** is the palette appropriate for numerical ranges? */
boolean suitableRanged;
/** is the palette appropriate for categorical data (unique values)? */
boolean suitableUnique;
/** interal flag for marking the type as UNKNOWN */
boolean isEmpty = false;
/**
* Creates an identifier for palettes
*
* @param name simple identifier
* @param suitableRanged
* @param suitableUnique
*/
public PaletteType(boolean suitableRanged, boolean suitableUnique, String name) {
this.name = name;
this.suitableRanged = suitableRanged;
this.suitableUnique = suitableUnique;
}
/**
*
* @param suitableRanged true, false, or null (for don't care)
* @param suitableUnique
*/
public PaletteType(boolean suitableRanged, boolean suitableUnique) {
this.name = null;
this.suitableRanged = suitableRanged;
this.suitableUnique = suitableUnique;
}
public PaletteType() {
this.name = null;
this.isEmpty = true;
}
public String getName() {
return name;
}
/**
* Deterines if this PaletteType instance is suitable ranged.
*
* @return a boolean, true if the paletteType is sutableRanged.
*/
public boolean isSuitableRanged() {
return suitableRanged;
}
public boolean isSuitableUnique() {
return suitableUnique;
}
public boolean isMatch(PaletteType filter) {
if (filter.equals(ColorBrewer.ALL)) {
return true; //wildcard
}
if (filter.isEmpty) {
return true; //wildcard (everything is null)
}
if (filter.getName() == null) { //generic filter
if (isEmpty) {
return false; //we know nothing about this item, so we assume it doesn't match
}
} else { //specific filter (exact name match + conditions)
if (!filter.getName().equals(name)) {
return false;
}
}
if (filter.isSuitableRanged() != suitableRanged) {
return false;
}
if (filter.isSuitableUnique() != suitableUnique) {
return false;
}
return true;
}
public boolean equals(Object arg0) {
if (!(arg0 instanceof PaletteType)) {
return false;
}
PaletteType arg = (PaletteType) arg0;
if (name == null) {
if (arg.getName() != null) {
return false;
}
} else {
if (arg.getName() == null) {
return false;
}
if (!arg.getName().equals(name)) {
return false;
}
}
if (arg.isSuitableRanged() != suitableRanged) {
return false;
}
if (arg.isSuitableUnique() != suitableUnique) {
return false;
}
return true;
}
}