Apache Airavata Thrift Interfaces - README
Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
--------------------------------------------------------------------------------

This file describes the organization of Apache Airavata Thrift Interfaces and Data Model

Airavata Data Model:

  Application Catalog
  |- Application Interface Descriptions
  |- Application Deployment Descriptions
  |- Computational Resource Descriptions

Gateway
  |
  |- Groups (Groups is explicitly defined with a set of users within it)
  |   |-Users
  |
  |-Workspace
  |   |- User
  |   |   |- Group Ids (A user can be in one or more groups)
  |   |   |-Project
  |   |   |   |- Experiment
  |   |   |   |   |- Summary (Derived Information)
  |   |   |   |   |- Name
  |   |   |   |   |- Description
  |   |   |   |   |- Application/Workflow Template Id
  |   |   |   |   |- Workflow Instance Id
  |   |   |   |   |- User Configuration Data
  |   |   |   |   |   |- Scheduling Information
  |   |   |   |   |   |- Quality of Service Parameters
  |   |   |   |   |- Experiment Inputs
  |   |   |   |   |- Experiment Outputs
  |   |   |   |   |- Experiment Status
  |   |   |   |   |- Workflow Nodes
  |   |   |   |   |   |- Node Inputs
  |   |   |   |   |   |- Node Outputs
  |   |   |   |   |   |- Node Status
  |   |   |   |   |   |- Tasks
  |   |   |   |   |   |   |- Application Id
  |   |   |   |   |   |   |- Application Inputs
  |   |   |   |   |   |   |- Application Outputs
  |   |   |   |   |   |- Intermediate Data
  |   |   |   |   |   |- Final Output Data
  |   |   |   |   |- Experiment Errors
  |   |   |   |   |   |- User Friendly Message
  |   |   |   |   |   |- Raw Exception
  |   |   |   |   |   |- Error Category
  |   |   |   |   |   |- Actionable Information (what action can be taken and by one of End User, Gateway Admins, Airavata Admins)
  |   |   |   |   |   |- Error Category




