/* (c) 2014 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.wps.response; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.apache.commons.io.IOUtils; import org.geoserver.ows.Response; import org.geoserver.platform.Operation; import org.geoserver.platform.resource.Resource; import org.geoserver.wps.GetExecutionResultType; import org.geoserver.wps.GetExecutionStatusType; import org.geoserver.wps.WPSException; import org.geoserver.wps.resource.WPSResourceManager; /** * Returns a response already computed and stored in an output * * @author Andrea Aime - GeoSolutions */ public class StoredResourceResponse extends Response { WPSResourceManager manager; public StoredResourceResponse(WPSResourceManager manager) { super(Resource.class); this.manager = manager; } @Override public boolean canHandle(Operation operation) { String operationId = operation.getId(); return ("GetExecutionStatus".equalsIgnoreCase(operationId) || "GetExecutionResult" .equalsIgnoreCase(operationId)) && operation.getService().getId().equals("wps"); } public String getMimeType(Object value, Operation operation) { Object request = operation.getParameters()[0]; if(request instanceof GetExecutionStatusType) { return "text/xml"; } else if(request instanceof GetExecutionResultType) { GetExecutionResultType ger = (GetExecutionResultType) request; if(ger.getMimeType() != null) { return ger.getMimeType(); } else { // generic binary output... return "application/octet-stream"; } } else { throw new WPSException("Trying to get a mime type for a unknown operation, " + "we should not have got here in the first place"); } } @Override public String getAttachmentFileName(Object value, Operation operation) { Object request = operation.getParameters()[0]; if(request instanceof GetExecutionStatusType) { return "text/xml"; } else if(request instanceof GetExecutionResultType) { GetExecutionResultType ger = (GetExecutionResultType) request; if(ger.getOutputId() != null) { return ger.getOutputId(); } else { // we should really never get here, the request should fail before return "result.dat"; } } else { throw new WPSException("Trying to get a file name for a unknown operation, " + "we should not have got here in the first place"); } } public void write(Object value, OutputStream output, Operation operation) throws IOException { Resource resource = (Resource) value; try (InputStream is = resource.in()) { IOUtils.copy(is, output); } } }