/**
* Copyright 2012 Universitat Pompeu Fabra.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*
*/
package org.onexus.website.api.widgets.tableviewer.decorators.scale;
import org.apache.commons.lang3.StringUtils;
import org.onexus.collection.api.Collection;
import org.onexus.collection.api.Field;
import org.onexus.resource.api.ParameterKey;
import org.onexus.resource.api.Parameters;
import org.onexus.website.api.widgets.tableviewer.decorators.IDecorator;
import org.onexus.website.api.widgets.tableviewer.decorators.IDecoratorCreator;
import org.onexus.website.api.widgets.tableviewer.decorators.scale.scales.HeatColorScale;
import org.onexus.website.api.widgets.tableviewer.formaters.DoubleFormater;
import java.awt.*;
public class HeatDecoratorCreator implements IDecoratorCreator {
@Override
public String getDecoratorId() {
return "HEAT";
}
@Override
public ParameterKey[] getParameterKeys() {
return HeatDecoratorParameters.values();
}
@Override
public IDecorator createDecorator(Collection collection, Field columnField, Parameters parameters) {
Boolean showValue = true;
double minValue = HeatColorScale.DEFAULT_MIN_VALUE;
double midValue = HeatColorScale.DEFAULT_MID_VALUE;
double maxValue = HeatColorScale.DEFAULT_MAX_VALUE;
// Show value parameter
String parameterValue = parameters.get(HeatDecoratorParameters.SHOW_VALUE);
if (!StringUtils.isEmpty(parameterValue)) {
showValue = Boolean.valueOf(parameterValue);
}
// Min value parameter
parameterValue = parameters.get(HeatDecoratorParameters.MIN_VALUE);
if (!StringUtils.isEmpty(parameterValue)) {
minValue = Double.valueOf(parameterValue);
}
// Mid value parameter
parameterValue = parameters.get(HeatDecoratorParameters.MID_VALUE);
if (!StringUtils.isEmpty(parameterValue)) {
midValue = Double.valueOf(parameterValue);
}
// Max value parameter
parameterValue = parameters.get(HeatDecoratorParameters.MAX_VALUE);
if (!StringUtils.isEmpty(parameterValue)) {
maxValue = Double.valueOf(parameterValue);
}
Color minColor = HeatColorScale.DEFAULT_MIN_COLOR;
Color midColor = HeatColorScale.DEFAULT_MID_COLOR;
Color maxColor = HeatColorScale.DEFAULT_MAX_COLOR;
// Min color parameter
parameterValue = parameters.get(HeatDecoratorParameters.MIN_COLOR);
if (!StringUtils.isEmpty(parameterValue)) {
minColor = parseColor(parameterValue);
}
// Mid color parameter
parameterValue = parameters.get(HeatDecoratorParameters.MID_COLOR);
if (!StringUtils.isEmpty(parameterValue)) {
midColor = parseColor(parameterValue);
}
// Max color parameter
parameterValue = parameters.get(HeatDecoratorParameters.MAX_COLOR);
if (!StringUtils.isEmpty(parameterValue)) {
maxColor = parseColor(parameterValue);
}
return new ColorDecorator(columnField, columnField, new HeatColorScale(minValue, minColor, midValue, midColor, maxValue, maxColor), null, showValue, DoubleFormater.INSTANCE, parameters.get(HeatDecoratorParameters.URL), parameters.get(HeatDecoratorParameters.URL_TITLE));
}
private static Color parseColor(String colorStr) {
colorStr = colorStr.replace("[", "");
colorStr = colorStr.replace("]", "");
String[] values = colorStr.trim().split("-");
int red = Integer.valueOf(values[0]);
int green = Integer.valueOf(values[1]);
int blue = Integer.valueOf(values[2]);
return new Color(red, green, blue);
}
}