/* Copyright (c) 2001 - 2013 OpenPlans - 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.wps; import java.util.Date; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import net.opengis.wps10.ExecuteResponseType; import net.opengis.wps10.ExecuteType; import net.opengis.wps10.OutputDefinitionType; import net.opengis.wps10.ResponseDocumentType; import org.geoserver.wps.executor.ExecuteResponseBuilder; import org.geoserver.wps.executor.ExecuteRequest; import org.geoserver.wps.executor.WPSExecutionManager; import org.geotools.util.logging.Logging; import org.springframework.context.ApplicationContext; /** * Main class used to handle Execute requests * * @author Lucas Reed, Refractions Research Inc * @author Andrea Aime, OpenGeo */ public class Execute { static final Logger LOGGER = Logging.getLogger(Execute.class); int connectionTimeout; WPSInfo wps; ApplicationContext context; WPSExecutionManager executionManager; public Execute(WPSExecutionManager executionManager, ApplicationContext context) { this.context = context; this.executionManager = executionManager; } /** * Main method for performing decoding, execution, and response * * @param object * @param output * @throws IllegalArgumentException */ public ExecuteResponseType run(ExecuteType execute) { ResponseDocumentType responseDocument = null; OutputDefinitionType rawDataOutput = null; if (execute.getResponseForm() != null) { responseDocument = execute.getResponseForm().getResponseDocument(); rawDataOutput = execute.getResponseForm().getRawDataOutput(); } if (responseDocument != null && rawDataOutput != null) { throw new WPSException("Invalid request, only one of the raw data output or the " + "response document should be specified in the request"); } ExecuteRequest request = new ExecuteRequest(execute); // TODO: get the startup time from the execution status ExecuteResponseBuilder builder = new ExecuteResponseBuilder(execute, context, new Date()); String executionId = executionManager.submit(request, !request.isAsynchronous()); builder.setExecutionId(executionId); if (!request.isAsynchronous()) { try { Map<String, Object> outputs = executionManager.getOutput(executionId, -1); builder.setOutputs(outputs); } catch (Exception e) { LOGGER.log(Level.SEVERE, "Process execution failed", e); builder.setException(e); } } return builder.build(); } }