package org.geoserver.geopkg.wps; import java.io.InputStream; import java.io.OutputStream; import org.apache.commons.io.IOUtils; import org.geoserver.util.EntityResolverProvider; import org.geoserver.wps.ppio.ComplexPPIO; import org.geotools.geopkg.wps.GeoPackageProcessRequest; import org.geotools.geopkg.wps.xml.GPKGConfiguration; import org.geotools.ows.ServiceException; import org.geotools.xml.Configuration; import org.geotools.xml.Parser; public class GeoPackageProcessRequestPPIO extends ComplexPPIO { Configuration config = new GPKGConfiguration(); EntityResolverProvider resolverProvider; protected GeoPackageProcessRequestPPIO(EntityResolverProvider resolverProvider) { super(GeoPackageProcessRequest.class, GeoPackageProcessRequest.class, "text/xml; subtype=geoserver/geopackage"); this.resolverProvider = resolverProvider; } @Override public Object decode(InputStream input) throws Exception { Parser p = new Parser(config); p.validate(input); p.setEntityResolver(resolverProvider.getEntityResolver()); if (!p.getValidationErrors().isEmpty()) { throw new ServiceException("Errors were encountered while parsing GeoPackage contents: " + p.getValidationErrors()); } input.reset(); return p.parse(input); } @Override public Object decode(Object input) throws Exception { if(input == null) { return null; } else if(input instanceof GeoPackageProcessRequest) { return input; } else if(input instanceof String) { return decode(IOUtils.toInputStream((String) input)); } else { throw new IllegalArgumentException("Cannot convert " + input + " into a GeoPackageProcessRequest object"); } } @Override public void encode(Object value, OutputStream os) throws Exception { throw new UnsupportedOperationException(); } @Override public String getFileExtension() { return null; } }