/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2014-2015, 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.styling.builder;
import java.util.HashMap;
import java.util.Map;
import org.geotools.styling.ContrastEnhancement;
import org.opengis.filter.expression.Expression;
import org.opengis.style.ContrastMethod;
/**
*
*
* @source $URL$
*/
public class ContrastEnhancementBuilder extends AbstractStyleBuilder<ContrastEnhancement> {
private Expression gamma = null;
private ContrastMethod method;
private Map<String, Expression> options = new HashMap<>();
public ContrastEnhancementBuilder() {
this(null);
}
public ContrastEnhancementBuilder(AbstractStyleBuilder<?> parent) {
super(parent);
reset();
}
public ContrastEnhancementBuilder gamma(Expression gamma) {
this.gamma = gamma;
this.unset = false;
return this;
}
public ContrastEnhancementBuilder gamma(double gamma) {
return gamma(literal(gamma));
}
public ContrastEnhancementBuilder normalize(Map<String, Expression> constrastParameters) {
return contrastMethod("normalize", constrastParameters);
}
public ContrastEnhancementBuilder histogram(Map<String, Expression> constrastParameters) {
return contrastMethod("histogram", constrastParameters);
}
public ContrastEnhancementBuilder exponential(Map<String, Expression> constrastParameters) {
return contrastMethod("exponential", constrastParameters);
}
public ContrastEnhancementBuilder logarithmic(Map<String, Expression> constrastParameters) {
return contrastMethod("logarithm", constrastParameters);
}
private ContrastEnhancementBuilder contrastMethod(String name, Map<String, Expression> constrastParameters) {
/*if ("histogram".equals(name)) {
this.method = ContrastMethod.HISTOGRAM;
} else if ("normalize".equals(name)) {
this.method = ContrastMethod.NORMALIZE;
} else if ("logarithmic".equals(name)) {
this.method = ContrastMethod.LOGARITHMIC;
} else if ("exponential".equals(name)) {
this.method = ContrastMethod.EXPONENTIAL;
} else {
throw new IllegalArgumentException("Unexpected ContrastEnhamcement method " + name);
}*/
this.method = ContrastMethod.valueOf(name);
if(constrastParameters!=null) {
options = constrastParameters;
}
this.unset = false;
return this;
}
public ContrastEnhancementBuilder gamma(String cqlExpression) {
return gamma(cqlExpression(cqlExpression));
}
public ContrastEnhancement build() {
if (unset) {
return null;
}
ContrastEnhancement contrastEnhancement = sf.contrastEnhancement(gamma, method);
contrastEnhancement.setOptions(options);
return contrastEnhancement;
}
public ContrastEnhancementBuilder reset() {
gamma = null;
method = null;
unset = false;
return this;
}
public ContrastEnhancementBuilder reset(ContrastEnhancement contrastEnhancement) {
if (contrastEnhancement == null) {
return reset();
}
gamma = contrastEnhancement.getGammaValue();
method = contrastEnhancement.getMethod();
options = contrastEnhancement.getOptions();
unset = false;
return this;
}
public ContrastEnhancementBuilder unset() {
return (ContrastEnhancementBuilder) super.unset();
}
@Override
protected void buildStyleInternal(StyleBuilder sb) {
throw new UnsupportedOperationException(
"Cannot build a meaningful style out of a contrast enhancement alone");
}
/**
* @return
*/
public ContrastEnhancementBuilder normalize() {
return contrastMethod("normalize", null);
}
public ContrastEnhancementBuilder histogram() {
return contrastMethod("histogram", null);
}
public ContrastEnhancementBuilder logarithmic() {
return contrastMethod("logarithmic", null);
}
public ContrastEnhancementBuilder exponential() {
return contrastMethod("exponential", null);
}
}