/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.wms.web.publish;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.validation.validator.NumberValidator;
import org.geoserver.catalog.FeatureTypeInfo;
import org.geoserver.web.publish.LayerConfigurationPanel;
import org.geoserver.web.util.MapModel;
import org.opengis.feature.type.PropertyDescriptor;
/**
* Configures a layer KML related attributes (coming from metadata)
*/
@SuppressWarnings("serial")
public class KMLLayerConfigPanel extends LayerConfigurationPanel {
/**
* TODO: replace this with a list coming from the KML regionation classes
*/
static final List<String> KML_STRATEGIES = Arrays.asList("external-sorting", "geometry", "native-sorting", "random");
public KMLLayerConfigPanel(String id, IModel model){
super(id, model);
PropertyModel metadata = new PropertyModel(model, "resource.metadata");
add(new DropDownChoice("kml.regionateAttribute",
new MapModel(metadata, "kml.regionateAttribute"),
new AttributeNamesModel(new PropertyModel(model, "resource"))));
add(new DropDownChoice("kml.regionateStrategy",
new MapModel(metadata, "kml.regionateStrategy"), KML_STRATEGIES)
);
TextField maxFeatures = new TextField("kml.regionateFeatureLimit",
new MapModel(metadata, "kml.regionateFeatureLimit"), Integer.class);
maxFeatures.add(NumberValidator.minimum(1));
add(maxFeatures);
}
private static class AttributeNamesModel extends LoadableDetachableModel {
IModel featureTypeInfo;
public AttributeNamesModel(IModel featureTypeInfo) {
this.featureTypeInfo = featureTypeInfo;
}
@Override
protected Object load() {
try {
FeatureTypeInfo fti = (FeatureTypeInfo) featureTypeInfo.getObject();
List<String> result = new ArrayList<String>();
for (PropertyDescriptor property : fti.getFeatureType().getDescriptors()) {
result.add(property.getName().getLocalPart());
}
Collections.sort(result);
return result;
} catch(IOException e) {
throw new RuntimeException("Could not load feature type attribute list", e);
}
}
}
}