package org.mapfish.print.processor.map;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.mapfish.print.attribute.FeaturesAttribute.FeaturesAttributeValues;
import org.mapfish.print.attribute.map.GenericMapAttribute.GenericMapAttributeValues;
import org.mapfish.print.attribute.map.MapLayer;
import org.mapfish.print.config.Configuration;
import org.mapfish.print.map.geotools.AbstractFeatureSourceLayer;
import org.mapfish.print.processor.AbstractProcessor;
import org.mapfish.print.processor.InputOutputValue;
import org.mapfish.print.processor.http.MfClientHttpRequestFactoryProvider;
import java.util.List;
/**
* <p>Processor to set features on vector layers.</p>
* [[examples=report]]
*/
public class SetFeaturesProcessor extends
AbstractProcessor<SetFeaturesProcessor.Input, Void> {
/**
* Constructor.
*/
protected SetFeaturesProcessor() {
super(Void.class);
}
@Override
public final Input createInputParameter() {
return new Input();
}
@Override
public final Void execute(final Input values, final ExecutionContext context) throws Exception {
for (MapLayer layer : values.map.getLayers()) {
checkCancelState(context);
if (layer instanceof AbstractFeatureSourceLayer) {
final SimpleFeatureCollection features = values.features.getFeatures(
values.clientHttpRequestFactoryProvider.get());
((AbstractFeatureSourceLayer) layer).setFeatureCollection(features);
}
}
return null;
}
@Override
protected void extraValidation(final List<Throwable> validationErrors, final Configuration configuration) {
// no checks needed
}
/**
* The input parameter object for {@link SetFeaturesProcessor}.
*/
public static final class Input {
/**
* The factory to use for making http requests.
*/
public MfClientHttpRequestFactoryProvider clientHttpRequestFactoryProvider;
/**
* The map to update.
*/
@InputOutputValue
public GenericMapAttributeValues map;
/**
* The features.
*/
public FeaturesAttributeValues features;
}
}