*** APPLICATION DEPLOYMENT *** NOTES: It is assumed that Alice has the necessary privileges to deploy application on the EMS. In this description I use an "arg=value" command line syntax (e.g. % multisensor_ndvi arg1=value1 arg2=value2 ...). (MultiNDVI) STEP 1a: Alice develops the MultiNDVI application and bundles it into a Docker container. STEP 1b: Alice either manually or via some web/gui tool developes the OWC application package describing the MultiNDVI application (see DeployProcess_MNDVI.xml). STEP 1c: Alice POSTs this application package to the "/processes" end point of the EMS. I imagine that this would be done though some web form where Alice provides the relevant information BUT it could also be done with curl. curl -X POST \ -H "Authorization: Bearer Th34cc3ssTok3nFrom4lice" \ -d "@DeployProcess_MNDVI.xml" \ -i "http://www.someserver.com/2.0.0/ems/processes" The response should be an HTTP 201 Created and the "Location" header should contain the URI of the new process. The body of the response (see DeployProcess_MNDVI_Response.xml) should contain a wps:Process document describing the process. The wps:Process document in the response should also be modified by the server to add in the wps:AdditionalParameters element containing the access control information (i.e. that the process is currently "private" which would be the default state). Of course, Alice herself could include the access control information from the start in which case the server would simply echo what Alice had initially included. NOTES: The OPTIONS method can be used on the /processes path to get the list of supported represenations. In order to use the ATOM encoding for an OWS context document, the MIME type application/atom+xml must be present in the response. CLIENT SERVER | | | OPTIONS /2.0.0/ems/processes HTTP/1.1 | | Host: www.someserver.com | |------------------------------------------>| | | | HTTP/1.1 200 OK | | Allow: OPTIONS, GET, POST | | Accept: applcation/atom+xml, ... | |<------------------------------------------| (MultiNDVIStacker) STEP 1d: Alice then develops the MultiNDVIStacker workflow. NOTE: I imagine two scenarios here. Either Alice bundles the entire work flow and interpreter (e.g. cwl-runner) into a Docker container (my prefered approach) OR she simply uses the CWL as the execution unit relying on the fact that the EMS's and ADES's know how to run CWL work flows. STEP 1e: Alice either manually or via some web/gui tool developes the OWS application package describing the MultiNDVIStacker workflow (see DeployProcess_MNDVIS.xml). STEP 1f: See "STEP 1c". STEP 1g: Alice can switch the permissions of each application from "PRIVATE" to "PUBLIC" using the PATCH method. curl -X PATCH \ -H "Authorization: Bearer Th34cc3ssTok3nFrom4lice" \ -d "@ChangeVisibility_V1.xml" \ -i "http://www.someserver.com/2.0/ems/processes/multisensor_ndvi" The response should be HTTP 200 OK *** OR *** Alice can switch the permissions of each application from "PRIVATE" to "PUBLIC" using the PUT method using a complete representation of the process where just the access conteol elements have been changed. curl -X PATCH \ -H "Authorization: Bearer Th34cc3ssTok3nFrom4lice" \ -d "@ChangeVisibility_V2.xml" \ -i "http://www.someserver.com/2.0/ems/processes/multisensor_ndvi" The response should be HTTP 200 OK. *** APPLICATION DISCOVERY *** STEP 2a: Bob accesses the "/processes" endpoint using the GET method curl -H "Authorization: Bearer Th34cc3ssTok3nFrom4lice" \ http://www.someserver.com/2.0.0/ems/processes The response is an HTTP 200 OK with the body containing a wps:Content section with a list of process summaries (see ProcessSummary.xml). STEP 2b: Bob chooses the multisensor_ndvi_stacker application and requests a process description: curl -H "Authorization: Bearer Th34cc3ssTok3nFromBob" \ http://www.someserver.com/2.0/ems/processes/multisensor_ndvi_stacker The response is an HTTP 200 OK with the body containing the detailed process description (see DeployProcess_MNDVIS_Response.xml). NOTE: Bob only sees the processes that he has permission to execute *** APPLICATION EXECUTION *** STEP 3a: Bob (or an agent) composes a wps:Execute request for the multisensor_ndvi_stacker process (see Execute_MNDVIS.xml). STEP 3b: The wps:Execute request is posted to the execution end point at "/processes/multisensor_ndvi_stacker/jobs". curl -X POST \ -H "Authorization: Bearer Th34cc3ssTok3nFromBob" -d "@Execute_MNDVIS.xml" \ -i "http://www.someserver.com/ems/processes/multisensor_ndvi_stacker/jobs" The response will be an HTTP 202 Accepted. The body will contain a wps:StatusInfo document (see Execute_MNDVIS_Response_1.xml). This response contains "monitor" and "cancel" hypermedia controls. Accessing the "monitor" link will return the status of the running job (see Exexute_MNDVIS_Response_[2-4].xml). When the job has completed, Bob will receive an email notification at the specified addess (i.e. bob@gmail.com). NOTES: -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- / GET -> gets the service's landing page PUT -> N/A POST -> N/A DELETE -> N/A /api GET -> gets the OpenAPI document PUT -> N/A POST -> N/A DELETE -> N/A /conformance GET -> get the conformance document PUT -> N/A POST -> N/A DELETE -> N/A /processes GET -> gets the list of process offerings (i.e. wps:Contents section) PUT -> N/A POST -> deploys a new process (POST body contains process description) DELETE -> N/A /processes/{id} GET -> gets the process description (i.e. wps:DescribeProcess) PUT -> updates the existing process definition POST -> N/A DELETE -> undeploys the process /processes/{id}/jobs GET -> gets the list of jobs for the process PUT -> N/A POST -> executes the process (POST body contains wps:Execute) DELETE -> N/A /processes/{id}/jobs/{jobID} GET -> retrieves the job status (i.e. wps:GetStatus) PUT -> N/A POST -> N/A DELETE -> cancel a job /processes/{id}/jobs/{jobID}/results/{outputId} GET -> retrieves the specified result (i.e. wps:GetResults) PUT -> N/A POST -> N/A DELETE -> N/A /processes/{id}/quotations GET -> PUT -> POST -> DELETE -> /processes/{id}/quotations/{quotationID} GET -> PUT -> POST -> DELETE ->