The DeliveryService will provide a mechanism for transfering raw files between NDG services, however at the Use Case level I expect the DeliveryService to deal with CSMLInstances. The following outlines how I expect the DeliveryService will achieve this. Since I have so far been working on the low-level transfer mechanism these use cases are somewhat speculative and open to discussion.

I anticipate that NDG services will want to use the DeliveryService to both expose CSMLInstances already existing on the file system and upload CSMLInstances for exposure to other parties. I suggest a 2 layer interface:

  1. DeliveryService-HTTP provides an interface over HTTP (SOAP or ReST?) to high level functions including:
    1. Register CSMLInstanceURI: Bind a CSMLInstanceURI to an existing CSMLDocument on the DeliveryService's local machine.
    2. Unregister CSMLInstanceURI
    3. Monitor transfer in progress
    4. (Maybe) View CSMLDocument of a CSMLInstanceURI
    5. Transfer CSMLInstance to/from another DeliveryService
  2. DeliveryService-bbFTP provides a customised bbFTP interface with the standard FTP commands: send, retrieve, list, mkdir

Use Cases

A. Command line client downloads CSMLInstance

This is the simplest download use case.

  1. User executes client program passing it a CSMLInstanceURI, username, passphrase and NDGSessionManager URI.
  2. Client contacts NDGSessionManager and retrieves an AttributeCertificate? suitable for the DataProvider referenced in the CSMLInstanceURI.
  3. Client program establishes connection with the DeliveryService-bbFTP server passing it the AttributeCertificate? for authentication.
  4. Client retrieves the CSMLDocument describing the CSMLInstance using the CSMLInstanceURI. (DISCUSS: Alternatively the client could retrieve the CSMLInstance document via the DeliveryService-HTTP interface)
  5. Client parses the CSMLDocument to determine data URI(s).
  6. Client retrieves data referenced by the CSMLDocument.

B. Command line client downloads large CSMLInstance with monitoring

  1. Do A 1-3.
  2. Client retrieves a session URI from the DeliveryService-bbFTP server. This URI points to the DeliveryService-HTTP server.
  3. Client displays session URI to the user.
  4. User points browser at session URI.
  5. Fork
    1. Do A 4-6.
    2. DeliveryService-HTTP displays session status, including download progress.

DISCUSS: If we want to secure the session status information an HTTP-based NDG session would need to be established with the DeliveryService-bbFTP. This might require duplicate sign-on.

C. DataProviderAgent? publishes CSMLInstance

In this use case a DataProviderAgent? is anticipated to be either a tool operated by the user or a service.

  1. DataProvider has a CSMLDocument and associated data files on the local file system.
  2. DataProviderAgent? contacts the local NDGSessionManager and retrieves the local (i.e. not mapped) AttributeCertificate?.
  3. DataProviderAgent? contacts DeliveryService-HTTP sending the AttributeCertificate? as authentication
  4. DataProviderAgent? instructs DeliveryService-HTTP to bind a CSMLInstanceURI to a local CSMLDocument.

DISCUSS: Does the DataProviderAgent? need to be able to specify the CSMLInstanceURI or should the DeliveryService-HTTP specify it.

D. CSMLInstance transfered between 2 DataProviders?

The DeliveryServices? of two DataProviders? (DS1 and DS2) interact to copy a CSML instance from one to the other.

  1. User contacts NDGSessionManager and retrieves an AttributeCertificate?.
  2. User contacts DS1-HTTP with the AttributeCertificate? requesting the retrieval of CSMLInstanceURI from DS2.
  3. DS1-HTTP acts as a DeliveryService client, contacting DS2-bbFTP with the AttributeCertificate?.
    1. DS1-HTTP retrieves the CSMLDocument identified by the CSMLInstanceURI from DS2-bbFTP.
    2. DS1-HTTP parses the CSMLDocument for referenced data files.
    3. DS1-HTTP retrieves the datafiles from DS2-bbFTP.
  4. DS1-HTTP binds the copied CSMLDocument to a new CSMLInstanceURI and returns it to the user.

DISCUSS: Will we potentially need 2 AttributeCertificates? in this case (one for each DataProvider)?