/* (c) 2015 - 2016 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.gwc.web.layer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.Component;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.util.convert.ConversionException;
import org.apache.wicket.util.convert.IConverter;
import org.geowebcache.filter.parameters.IntegerParameterFilter;
/**
* Subform that allows editing of an IntegerParameterFilter
* @author Kevin Smith, OpenGeo
*
*/
public class IntegerParameterFilterSubform extends AbstractParameterFilterSubform<IntegerParameterFilter> {
private static final long serialVersionUID = 4625052381807389891L;
private static final IConverter<Integer> INTEGER = new IConverter<Integer>() {
private static final long serialVersionUID = -998131942023964739L;
@Override
public Integer convertToObject(String value, Locale locale) {
if(value==null || value.isEmpty()) return null;
try {
return Integer.parseInt(value);
} catch (NumberFormatException ex) {
throw new ConversionException(ex)
.setConverter(this)
.setLocale(locale)
.setTargetType(Integer.class)
.setSourceValue(value)
.setResourceKey("notAValidNumber");
}
}
@Override
public String convertToString(Integer value, Locale locale) {
return Integer.toString(value);
}
};
private static final IConverter<List<Integer>> CONVERT = new IConverter<List<Integer>>() {
/** serialVersionUID */
private static final long serialVersionUID = 1L;
@Override
public List<Integer> convertToObject(String value, Locale locale) {
if(value==null) {
return null;
} else {
String[] strings = StringUtils.split(value, "\r\n");
List<Integer> floats = new ArrayList<Integer>(strings.length);
for(String s: strings) {
floats.add((Integer)INTEGER.convertToObject(s, locale));
}
return floats;
}
}
@Override
public String convertToString(List<Integer> value, Locale locale) {
Iterator<Integer> i = value.iterator();
StringBuilder sb = new StringBuilder();
if(i.hasNext()) {
sb.append(INTEGER.convertToString(i.next(), locale));
}
while(i.hasNext()){
sb.append("\r\n");
sb.append(INTEGER.convertToString(i.next(), locale));
}
return sb.toString();
}
};
public IntegerParameterFilterSubform(String id,
IModel<IntegerParameterFilter> model) {
super(id, model);
final Component defaultValue;
defaultValue = new TextField<String>("defaultValue", new PropertyModel<String>(model, "defaultValue"));
add(defaultValue);
final TextArea<List<Integer>> values;
values = new TextArea<List<Integer>>("values", new PropertyModel<List<Integer>>(model, "values")) {
private static final long serialVersionUID = 1397063859210766872L;
@SuppressWarnings("unchecked")
@Override
public <S> IConverter<S> getConverter(Class<S> type) {
if (List.class.isAssignableFrom(type)) {
return (IConverter<S>) CONVERT;
}
return super.getConverter(type);
}
};
values.setConvertEmptyInputStringToNull(false);
add(values);
final Component threshold;
threshold = new TextField<Integer>("threshold", new PropertyModel<Integer>(model, "threshold")) {
private static final long serialVersionUID = -3975284862791672686L;
@SuppressWarnings("unchecked")
@Override
public <S> IConverter<S> getConverter(Class<S> type) {
if (Integer.class.isAssignableFrom(type)) {
return (IConverter<S>) INTEGER;
}
return super.getConverter(type);
}
};
add(threshold);
}
}