This is an automated email from the ASF dual-hosted git repository.

yasith pushed a commit to branch feat/thrift-server-extraction
in repository https://gitbox.apache.org/repos/asf/airavata.git

commit e98b569f96cdbe44123ad78e2f8fd750cf43b753
Author: yasithdev <[email protected]>
AuthorDate: Thu Mar 26 14:13:17 2026 -0500

    feat: add proto definitions mirroring all thrift IDL data models
    
    33 proto3 files covering all thrift data-models, API commons, security,
    errors, messaging, and db events. Mechanical 1:1 translation preserving
    field numbers and structure.
---
 .../accountprovisioning/account_provisioning.proto |  43 ++++
 .../appcatalog/appdeployment/app_deployment.proto  | 103 ++++++++
 .../appcatalog/appinterface/app_interface.proto    |  52 +++++
 .../computeresource/compute_resource.proto         | 259 +++++++++++++++++++++
 .../appcatalog/gatewaygroups/gateway_groups.proto  |  30 +++
 .../gatewayprofile/gateway_profile.proto           |  62 +++++
 .../group_resource_profile.proto                   | 114 +++++++++
 .../airavata/model/appcatalog/parser/parser.proto  |  88 +++++++
 .../storageresource/storage_resource.proto         |  79 +++++++
 .../user_resource_profile.proto                    |  54 +++++
 .../model/application/io/application_io.proto      |  90 +++++++
 .../apache/airavata/model/commons/commons.proto    |  46 ++++
 .../model/credential/store/credential_store.proto  |  81 +++++++
 .../model/data/movement/data_movement.proto        | 113 +++++++++
 .../model/data/replica/replica_catalog.proto       |  73 ++++++
 .../apache/airavata/model/dbevent/db_event.proto   |  84 +++++++
 .../org/apache/airavata/model/error/errors.proto   | 132 +++++++++++
 .../airavata/model/experiment/experiment.proto     | 156 +++++++++++++
 .../airavata/model/group/group_manager.proto       |  51 ++++
 .../proto/org/apache/airavata/model/job/job.proto  |  40 ++++
 .../model/messaging/messaging_events.proto         | 142 +++++++++++
 .../airavata/model/parallelism/parallelism.proto   |  41 ++++
 .../apache/airavata/model/process/process.proto    |  73 ++++++
 .../airavata/model/scheduling/scheduling.proto     |  39 ++++
 .../apache/airavata/model/security/security.proto  |  32 +++
 .../apache/airavata/model/sharing/sharing.proto    | 254 ++++++++++++++++++++
 .../org/apache/airavata/model/status/status.proto  | 122 ++++++++++
 .../org/apache/airavata/model/task/task.proto      | 111 +++++++++
 .../airavata/model/tenant/tenant_profile.proto     |  63 +++++
 .../apache/airavata/model/user/user_profile.proto  | 137 +++++++++++
 .../model/workflow/data/workflow_data.proto        |  95 ++++++++
 .../apache/airavata/model/workflow/workflow.proto  | 162 +++++++++++++
 .../airavata/model/workspace/workspace.proto       | 111 +++++++++
 33 files changed, 3132 insertions(+)

diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/accountprovisioning/account_provisioning.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/accountprovisioning/account_provisioning.proto
new file mode 100644
index 0000000000..6c5e3e8b17
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/accountprovisioning/account_provisioning.proto
@@ -0,0 +1,43 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.appcatalog.accountprovisioning;
+
+option java_package = 
"org.apache.airavata.model.appcatalog.accountprovisioning";
+option java_multiple_files = true;
+
+enum SSHAccountProvisionerConfigParamType {
+  SSH_ACCOUNT_PROVISIONER_CONFIG_PARAM_TYPE_UNKNOWN = 0;
+  STRING = 1;
+  CRED_STORE_PASSWORD_TOKEN = 2;
+}
+
+message SSHAccountProvisionerConfigParam {
+  string name = 1;
+  SSHAccountProvisionerConfigParamType type = 2;
+  bool is_optional = 3;
+  string description = 4;
+}
+
+message SSHAccountProvisioner {
+  string name = 1;
+  bool can_create_account = 2;
+  bool can_install_ssh_key = 3;
+  repeated SSHAccountProvisionerConfigParam config_params = 4;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/appdeployment/app_deployment.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/appdeployment/app_deployment.proto
new file mode 100644
index 0000000000..9a3038f410
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/appdeployment/app_deployment.proto
@@ -0,0 +1,103 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+// This file describes the definitions of the Data Structures related to
+// deployment of Application on computational resources.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.appcatalog.appdeployment;
+
+option java_package = "org.apache.airavata.model.appcatalog.appdeployment";
+option java_multiple_files = true;
+
+import "org/apache/airavata/model/parallelism/parallelism.proto";
+
+// Key Value pairs to be used to set environments.
+//
+// name: Name of the environment variable such as PATH, LD_LIBRARY_PATH, 
NETCDF_HOME.
+// value: Value of the environment variable to set.
+// env_path_order: The order of the setting of the env variables when there are
+//   multiple env variables.
+message SetEnvPaths {
+  string name = 1;
+  string value = 2;
+  int32 env_path_order = 3;
+}
+
+// Job commands to be used in Pre Job, Post Job and Module Load Commands.
+//
+// command: The actual command in string format.
+// command_order: Order of the command in the multiple command situation.
+message CommandObject {
+  string command = 1;
+  int32 command_order = 2;
+}
+
+// Application Module Information. A module has to be registered before
+// registering a deployment.
+//
+// app_module_id: Airavata Internal Unique Job ID. This is set by the registry.
+// app_module_name: Name of the application module.
+// app_module_version: Version of the application.
+// app_module_description: Description of the Module.
+message ApplicationModule {
+  string app_module_id = 1;
+  string app_module_name = 2;
+  string app_module_version = 3;
+  string app_module_description = 4;
+}
+
+// Application Deployment Description.
+//
+// app_deployment_id: Airavata Internal Unique Job ID. This is set by the 
registry.
+// app_module_id: Application Module Id.
+// compute_host_id: This ID maps application deployment to a particular 
resource
+//   previously described within Airavata.
+// executable_path: Path to the executable.
+// parallelism: Parallelism type of the application.
+// app_deployment_description: Description of the deployment.
+// module_load_cmds: Command string to load modules.
+// lib_prepend_paths: Prepend to a path variable the value.
+// lib_append_paths: Append to a path variable the value.
+// set_environment: Assigns to the environment variable "NAME" the value.
+// pre_job_commands: Commands to run before the job.
+// post_job_commands: Commands to run after the job.
+// default_queue_name: Default queue name.
+// default_node_count: Default node count.
+// default_cpu_count: Default CPU count.
+// default_walltime: Default walltime.
+// editable_by_user: Whether the deployment is editable by the user.
+message ApplicationDeploymentDescription {
+  string app_deployment_id = 1;
+  string app_module_id = 2;
+  string compute_host_id = 3;
+  string executable_path = 4;
+  org.apache.airavata.model.parallelism.ApplicationParallelismType parallelism 
= 5;
+  string app_deployment_description = 6;
+  repeated CommandObject module_load_cmds = 7;
+  repeated SetEnvPaths lib_prepend_paths = 8;
+  repeated SetEnvPaths lib_append_paths = 9;
+  repeated SetEnvPaths set_environment = 10;
+  repeated CommandObject pre_job_commands = 11;
+  repeated CommandObject post_job_commands = 12;
+  string default_queue_name = 13;
+  int32 default_node_count = 14;
+  int32 default_cpu_count = 15;
+  int32 default_walltime = 16;
+  bool editable_by_user = 17;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/appinterface/app_interface.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/appinterface/app_interface.proto
new file mode 100644
index 0000000000..2e5c665e8e
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/appinterface/app_interface.proto
@@ -0,0 +1,52 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+// This file describes the definitions of the Data Structures of Application
+// interfaces. These interfaces are mapped to application mapping on various 
resources.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.appcatalog.appinterface;
+
+option java_package = "org.apache.airavata.model.appcatalog.appinterface";
+option java_multiple_files = true;
+
+import "org/apache/airavata/model/application/io/application_io.proto";
+
+// Application Interface Description.
+//
+// application_interface_id: Airavata Internal Unique ID. This is set by the 
registry.
+// application_name: Name of the application interface.
+// application_description: Optional description.
+// application_modules: Associate all application modules with versions which
+//   interface is applicable to.
+// application_inputs: Inputs to be passed to the application.
+// application_outputs: Outputs generated from the application.
+// archive_working_directory: Whether to archive the working directory.
+// has_optional_file_inputs: Whether the application has optional file inputs.
+// clean_after_staged: Whether to clean up after staging.
+message ApplicationInterfaceDescription {
+  string application_interface_id = 1;
+  string application_name = 2;
+  string application_description = 3;
+  repeated string application_modules = 4;
+  repeated org.apache.airavata.model.application.io.InputDataObjectType 
application_inputs = 5;
+  repeated org.apache.airavata.model.application.io.OutputDataObjectType 
application_outputs = 6;
+  bool archive_working_directory = 7;
+  bool has_optional_file_inputs = 8;
+  bool clean_after_staged = 9;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/computeresource/compute_resource.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/computeresource/compute_resource.proto
new file mode 100644
index 0000000000..5f4e8390ed
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/computeresource/compute_resource.proto
@@ -0,0 +1,259 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.appcatalog.computeresource;
+
+option java_package = "org.apache.airavata.model.appcatalog.computeresource";
+option java_multiple_files = true;
+
+import "org/apache/airavata/model/parallelism/parallelism.proto";
+import "org/apache/airavata/model/data/movement/data_movement.proto";
+
+// Enumeration of local resource job manager types supported by Airavata.
+//
+// FORK: Forking of commands without any job manager.
+// PBS: Job manager supporting the Portal Batch System (PBS) protocol.
+// SLURM: The Simple Linux Utility for Resource Management.
+// UGE: Univa Grid Engine, a variation of PBS implementation.
+// LSF: IBM Platform Load Sharing Facility.
+enum ResourceJobManagerType {
+  RESOURCE_JOB_MANAGER_TYPE_UNKNOWN = 0;
+  FORK = 1;
+  PBS = 2;
+  SLURM = 3;
+  LSF = 4;
+  UGE = 5;
+  CLOUD = 6;
+  AIRAVATA_CUSTOM = 7;
+  HTCONDOR = 8;
+}
+
+// Enumeration of resource job manager commands.
+//
+// SUBMISSION: Ex: qsub, sbatch.
+// JOB_MONITORING: Ex: qstat, squeue.
+// DELETION: Ex: qdel, scancel.
+// CHECK_JOB: Detailed Status about the Job. Ex: checkjob.
+// SHOW_QUEUE: List of Queued Job by the scheduler. Ex: showq.
+// SHOW_RESERVATION: List all reservations. Ex: showres.
+// SHOW_START: Display the start time of the specified job. Ex: showstart.
+enum JobManagerCommand {
+  JOB_MANAGER_COMMAND_UNKNOWN = 0;
+  SUBMISSION = 1;
+  JOB_MONITORING = 2;
+  DELETION = 3;
+  CHECK_JOB = 4;
+  SHOW_QUEUE = 5;
+  SHOW_RESERVATION = 6;
+  SHOW_START = 7;
+  SHOW_CLUSTER_INFO = 8;
+  SHOW_NO_OF_RUNNING_JOBS = 9;
+  SHOW_NO_OF_PENDING_JOBS = 10;
+}
+
+// Resource Job Manager Information.
+//
+// resource_job_manager_id: Airavata Internal Unique ID.
+// resource_job_manager_type: A typical HPC cluster has a single Job Manager.
+// push_monitoring_endpoint: If the job manager pushes out state changes to a
+//   database or bus, specify the service endpoint.
+// job_manager_bin_path: Path to the Job Manager Installation Binary directory.
+// job_manager_commands: An enumeration of commonly used manager commands.
+// parallelism_prefix: Prefix to use for each parallelism type.
+message ResourceJobManager {
+  string resource_job_manager_id = 1;
+  ResourceJobManagerType resource_job_manager_type = 2;
+  string push_monitoring_endpoint = 3;
+  string job_manager_bin_path = 4;
+  map<int32, string> job_manager_commands = 5;
+  map<int32, string> parallelism_prefix = 6;
+}
+
+// Enumeration of file systems on the resource.
+enum FileSystems {
+  FILE_SYSTEMS_UNKNOWN = 0;
+  HOME = 1;
+  WORK = 2;
+  LOCALTMP = 3;
+  SCRATCH = 4;
+  ARCHIVE = 5;
+}
+
+// Batch Queue Information on SuperComputers.
+//
+// max_run_time: Maximum allowed run time in hours.
+message BatchQueue {
+  string queue_name = 1;
+  string queue_description = 2;
+  int32 max_run_time = 3;
+  int32 max_nodes = 4;
+  int32 max_processors = 5;
+  int32 max_jobs_in_queue = 6;
+  int32 max_memory = 7;
+  int32 cpu_per_node = 8;
+  int32 default_node_count = 9;
+  int32 default_cpu_count = 10;
+  int32 default_walltime = 11;
+  string queue_specific_macros = 12;
+  bool is_default_queue = 13;
+}
+
+// Enumeration of Airavata supported Job Submission Mechanisms for HPC 
clusters.
+//
+// SSH: Execute remote job submission commands via secure shell protocol.
+// GLOBUS: Execute remote jobs via Globus GRAM service.
+// UNICORE: Execute remote jobs via Unicore services.
+enum JobSubmissionProtocol {
+  JOB_SUBMISSION_PROTOCOL_UNKNOWN = 0;
+  LOCAL = 1;
+  SSH = 2;
+  GLOBUS = 3;
+  UNICORE = 4;
+  CLOUD = 5;
+  SSH_FORK = 6;
+  LOCAL_FORK = 7;
+}
+
+// Monitoring modes.
+//
+// POLL_JOB_MANAGER: GFac needs to pull job status changes.
+// XSEDE_AMQP_SUBSCRIBE: Server will publish job status changes to AMQP server.
+enum MonitorMode {
+  MONITOR_MODE_UNKNOWN = 0;
+  POLL_JOB_MANAGER = 1;
+  CLOUD_JOB_MONITOR = 2;
+  JOB_EMAIL_NOTIFICATION_MONITOR = 3;
+  XSEDE_AMQP_SUBSCRIBE = 4;
+  MONITOR_FORK = 5;
+  MONITOR_LOCAL = 6;
+}
+
+enum DMType {
+  DM_TYPE_UNKNOWN = 0;
+  COMPUTE_RESOURCE = 1;
+  STORAGE_RESOURCE = 2;
+}
+
+// Locally Fork Jobs as OS processes.
+//
+// job_submission_interface_id: Airavata Internal Unique ID.
+// resource_job_manager: Resource job manager configuration.
+// security_protocol: Security protocol.
+message LOCALSubmission {
+  string job_submission_interface_id = 1;
+  ResourceJobManager resource_job_manager = 2;
+  org.apache.airavata.model.data.movement.SecurityProtocol security_protocol = 
3;
+}
+
+// Authenticate using Secured Shell.
+//
+// job_submission_interface_id: Airavata Internal Unique ID.
+// security_protocol: Security protocol.
+// resource_job_manager: Resource job manager configuration.
+// alternative_ssh_host_name: If the login to ssh is different than the 
hostname.
+// ssh_port: If a non-default port needs to be used.
+// monitor_mode: Job monitoring mode.
+// batch_queue_email_senders: Full email addresses for batch queue monitoring.
+message SSHJobSubmission {
+  string job_submission_interface_id = 1;
+  org.apache.airavata.model.data.movement.SecurityProtocol security_protocol = 
2;
+  ResourceJobManager resource_job_manager = 3;
+  string alternative_ssh_host_name = 4;
+  int32 ssh_port = 5;
+  MonitorMode monitor_mode = 6;
+  repeated string batch_queue_email_senders = 7;
+}
+
+message GlobusJobSubmission {
+  string job_submission_interface_id = 1;
+  org.apache.airavata.model.data.movement.SecurityProtocol security_protocol = 
2;
+  repeated string globus_gate_keeper_end_point = 3;
+}
+
+// Unicore Job Submission.
+//
+// unicore_end_point_url: unicoreGateway End Point.
+// security_protocol: The authenticationMode defines the way certificate is 
fetched.
+message UnicoreJobSubmission {
+  string job_submission_interface_id = 1;
+  org.apache.airavata.model.data.movement.SecurityProtocol security_protocol = 
2;
+  string unicore_end_point_url = 3;
+}
+
+// Cloud provider name.
+enum ProviderName {
+  PROVIDER_NAME_UNKNOWN = 0;
+  EC2 = 1;
+  AWSEC2 = 2;
+  RACKSPACE = 3;
+}
+
+// Cloud Job Submission.
+message CloudJobSubmission {
+  string job_submission_interface_id = 1;
+  org.apache.airavata.model.data.movement.SecurityProtocol security_protocol = 
2;
+  string node_id = 3;
+  string executable_type = 4;
+  ProviderName provider_name = 5;
+  string user_account_name = 6;
+}
+
+// Job Submission Interfaces.
+//
+// job_submission_interface_id: The Job Submission Interface has to be 
previously
+//   registered and referenced here.
+// priority_order: For resources with multiple interfaces, the priority order
+//   should be selected. Lower the numerical number, higher the priority.
+message JobSubmissionInterface {
+  string job_submission_interface_id = 1;
+  JobSubmissionProtocol job_submission_protocol = 2;
+  int32 priority_order = 3;
+}
+
+// Computational Resource Description.
+//
+// compute_resource_id: Airavata Internal Unique Identifier to distinguish
+//   Compute Resource.
+// host_name: Fully Qualified Host Name.
+// host_aliases: Aliases if any.
+// ip_addresses: IP Addresses of the Resource.
+// resource_description: A user friendly description of the resource.
+// job_submission_interfaces: All available mechanisms to interact with the 
resource.
+// data_movement_interfaces: Available data movement interfaces.
+// file_systems: Map of file systems type and the path.
+message ComputeResourceDescription {
+  string compute_resource_id = 1;
+  string host_name = 2;
+  repeated string host_aliases = 3;
+  repeated string ip_addresses = 4;
+  string resource_description = 5;
+  bool enabled = 6;
+  repeated BatchQueue batch_queues = 7;
+  map<int32, string> file_systems = 8;
+  repeated JobSubmissionInterface job_submission_interfaces = 9;
+  repeated org.apache.airavata.model.data.movement.DataMovementInterface 
data_movement_interfaces = 10;
+  int32 max_memory_per_node = 11;
+  bool gateway_usage_reporting = 12;
+  string gateway_usage_module_load_command = 13;
+  string gateway_usage_executable = 14;
+  int32 cpus_per_node = 15;
+  int32 default_node_count = 16;
+  int32 default_cpu_count = 17;
+  int32 default_walltime = 18;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/gatewaygroups/gateway_groups.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/gatewaygroups/gateway_groups.proto
new file mode 100644
index 0000000000..dd6c7a0363
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/gatewaygroups/gateway_groups.proto
@@ -0,0 +1,30 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.appcatalog.gatewaygroups;
+
+option java_package = "org.apache.airavata.model.appcatalog.gatewaygroups";
+option java_multiple_files = true;
+
+message GatewayGroups {
+  string gateway_id = 1;
+  string admins_group_id = 2;
+  string read_only_admins_group_id = 3;
+  string default_gateway_users_group_id = 4;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/gatewayprofile/gateway_profile.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/gatewayprofile/gateway_profile.proto
new file mode 100644
index 0000000000..31634076ea
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/gatewayprofile/gateway_profile.proto
@@ -0,0 +1,62 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.appcatalog.gatewayprofile;
+
+option java_package = "org.apache.airavata.model.appcatalog.gatewayprofile";
+option java_multiple_files = true;
+
+import 
"org/apache/airavata/model/appcatalog/computeresource/compute_resource.proto";
+import "org/apache/airavata/model/data/movement/data_movement.proto";
+
+message ComputeResourcePreference {
+  string compute_resource_id = 1;
+  bool override_by_airavata = 2;
+  string login_user_name = 3;
+  org.apache.airavata.model.appcatalog.computeresource.JobSubmissionProtocol 
preferred_job_submission_protocol = 4;
+  org.apache.airavata.model.data.movement.DataMovementProtocol 
preferred_data_movement_protocol = 5;
+  string preferred_batch_queue = 6;
+  string scratch_location = 7;
+  string allocation_project_number = 8;
+  string resource_specific_credential_store_token = 9;
+  string usage_reporting_gateway_id = 10;
+  string quality_of_service = 11;
+  string reservation = 12;
+  int64 reservation_start_time = 13;
+  int64 reservation_end_time = 14;
+  string ssh_account_provisioner = 15;
+  map<string, string> ssh_account_provisioner_config = 16;
+  string ssh_account_provisioner_additional_info = 17;
+}
+
+message StoragePreference {
+  string storage_resource_id = 1;
+  string login_user_name = 2;
+  string file_system_root_location = 3;
+  string resource_specific_credential_store_token = 4;
+}
+
+message GatewayResourceProfile {
+  string gateway_id = 1;
+  string credential_store_token = 2;
+  repeated ComputeResourcePreference compute_resource_preferences = 3;
+  repeated StoragePreference storage_preferences = 4;
+  string identity_server_tenant = 5;
+  string identity_server_pwd_cred_token = 6;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/groupresourceprofile/group_resource_profile.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/groupresourceprofile/group_resource_profile.proto
new file mode 100644
index 0000000000..7320b42d48
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/groupresourceprofile/group_resource_profile.proto
@@ -0,0 +1,114 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.appcatalog.groupresourceprofile;
+
+option java_package = 
"org.apache.airavata.model.appcatalog.groupresourceprofile";
+option java_multiple_files = true;
+
+import 
"org/apache/airavata/model/appcatalog/computeresource/compute_resource.proto";
+import "org/apache/airavata/model/data/movement/data_movement.proto";
+
+enum ResourceType {
+  RESOURCE_TYPE_UNKNOWN = 0;
+  SLURM = 1;
+  AWS = 2;
+}
+
+message GroupAccountSSHProvisionerConfig {
+  string resource_id = 1;
+  string group_resource_profile_id = 2;
+  string config_name = 3;
+  string config_value = 4;
+}
+
+message ComputeResourceReservation {
+  string reservation_id = 1;
+  string reservation_name = 2;
+  repeated string queue_names = 3;
+  int64 start_time = 4;
+  int64 end_time = 5;
+}
+
+message SlurmComputeResourcePreference {
+  string allocation_project_number = 1;
+  string preferred_batch_queue = 2;
+  string quality_of_service = 3;
+  string usage_reporting_gateway_id = 4;
+  string ssh_account_provisioner = 5;
+  repeated GroupAccountSSHProvisionerConfig 
group_ssh_account_provisioner_configs = 6;
+  string ssh_account_provisioner_additional_info = 7;
+  repeated ComputeResourceReservation reservations = 8;
+}
+
+message AwsComputeResourcePreference {
+  string region = 1;
+  string preferred_ami_id = 2;
+  string preferred_instance_type = 3;
+}
+
+// Thrift union — represented as a oneof message wrapper
+message EnvironmentSpecificPreferences {
+  oneof preferences {
+    SlurmComputeResourcePreference slurm = 1;
+    AwsComputeResourcePreference aws = 2;
+  }
+}
+
+message GroupComputeResourcePreference {
+  string compute_resource_id = 1;
+  string group_resource_profile_id = 2;
+  bool override_by_airavata = 3;
+  string login_user_name = 4;
+  string scratch_location = 5;
+  org.apache.airavata.model.appcatalog.computeresource.JobSubmissionProtocol 
preferred_job_submission_protocol = 6;
+  org.apache.airavata.model.data.movement.DataMovementProtocol 
preferred_data_movement_protocol = 7;
+  string resource_specific_credential_store_token = 8;
+  ResourceType resource_type = 9;
+  EnvironmentSpecificPreferences specific_preferences = 10;
+}
+
+message ComputeResourcePolicy {
+  string resource_policy_id = 1;
+  string compute_resource_id = 2;
+  string group_resource_profile_id = 3;
+  repeated string allowed_batch_queues = 4;
+}
+
+message BatchQueueResourcePolicy {
+  string resource_policy_id = 1;
+  string compute_resource_id = 2;
+  string group_resource_profile_id = 3;
+  string queuename = 4;
+  int32 max_allowed_nodes = 5;
+  int32 max_allowed_cores = 6;
+  int32 max_allowed_walltime = 7;
+}
+
+message GroupResourceProfile {
+  string gateway_id = 1;
+  string group_resource_profile_id = 2;
+  string group_resource_profile_name = 3;
+  repeated GroupComputeResourcePreference compute_preferences = 4;
+  repeated ComputeResourcePolicy compute_resource_policies = 5;
+  repeated BatchQueueResourcePolicy batch_queue_resource_policies = 6;
+  int64 creation_time = 7;
+  int64 updated_time = 8;
+  string default_credential_store_token = 9;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/parser/parser.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/parser/parser.proto
new file mode 100644
index 0000000000..9221be7826
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/parser/parser.proto
@@ -0,0 +1,88 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.appcatalog.parser;
+
+option java_package = "org.apache.airavata.model.appcatalog.parser";
+option java_multiple_files = true;
+
+enum IOType {
+  IO_TYPE_UNKNOWN = 0;
+  FILE = 1;
+  PROPERTY = 2;
+}
+
+message ParserInput {
+  string id = 1;
+  string name = 2;
+  bool required_input = 3;
+  string parser_id = 4;
+  IOType type = 5;
+}
+
+message ParserOutput {
+  string id = 1;
+  string name = 2;
+  bool required_output = 3;
+  string parser_id = 4;
+  IOType type = 5;
+}
+
+message Parser {
+  string id = 1;
+  string image_name = 2;
+  string output_dir_path = 3;
+  string input_dir_path = 4;
+  string execution_command = 5;
+  repeated ParserInput input_files = 6;
+  repeated ParserOutput output_files = 7;
+  string gateway_id = 8;
+}
+
+message ParserConnectorInput {
+  string id = 1;
+  string input_id = 2;
+  string parent_output_id = 3;
+  string value = 4;
+  string parser_connector_id = 5;
+}
+
+message ParserConnector {
+  string id = 1;
+  string parent_parser_id = 2;
+  string child_parser_id = 3;
+  repeated ParserConnectorInput connector_inputs = 4;
+  string parsing_template_id = 5;
+}
+
+message ParsingTemplateInput {
+  string id = 1;
+  string target_input_id = 2;
+  string application_output_name = 3;
+  string value = 4;
+  string parsing_template_id = 5;
+}
+
+message ParsingTemplate {
+  string id = 1;
+  string application_interface = 2;
+  repeated ParsingTemplateInput initial_inputs = 3;
+  repeated ParserConnector parser_connections = 4;
+  string gateway_id = 5;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/storageresource/storage_resource.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/storageresource/storage_resource.proto
new file mode 100644
index 0000000000..59d0998e2e
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/storageresource/storage_resource.proto
@@ -0,0 +1,79 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.appcatalog.storageresource;
+
+option java_package = "org.apache.airavata.model.appcatalog.storageresource";
+option java_multiple_files = true;
+
+import "org/apache/airavata/model/data/movement/data_movement.proto";
+
+// Storage Resource Description.
+//
+// storage_resource_id: Airavata Internal Unique Identifier to distinguish
+//   Storage Resource.
+// host_name: Fully Qualified Host Name.
+// storage_resource_description: A user friendly description of the resource.
+// enabled: Whether the resource is enabled.
+// data_movement_interfaces: Available data movement interfaces.
+// creation_time: Creation time of the resource.
+// update_time: Last update time of the resource.
+message StorageResourceDescription {
+  string storage_resource_id = 1;
+  string host_name = 2;
+  string storage_resource_description = 3;
+  bool enabled = 4;
+  repeated org.apache.airavata.model.data.movement.DataMovementInterface 
data_movement_interfaces = 5;
+  int64 creation_time = 6;
+  int64 update_time = 7;
+}
+
+// Storage Volume Information.
+//
+// Contains disk usage information for a filesystem/mount point.
+//
+// total_size: Total size in human-readable format (e.g., "100G", "500M").
+// used_size: Used size in human-readable format.
+// available_size: Available size in human-readable format.
+// total_size_bytes: Total size in bytes.
+// used_size_bytes: Used size in bytes.
+// available_size_bytes: Available size in bytes.
+// percentage_used: Percentage used.
+// mount_point: Mount point/filesystem path.
+// filesystem_type: Filesystem type if available.
+message StorageVolumeInfo {
+  string total_size = 1;
+  string used_size = 2;
+  string available_size = 3;
+  int64 total_size_bytes = 4;
+  int64 used_size_bytes = 5;
+  int64 available_size_bytes = 6;
+  double percentage_used = 7;
+  string mount_point = 8;
+  string filesystem_type = 9;
+}
+
+// Provides Directory Size Information of a given storage.
+//
+// total_size: Total size in human-readable format (e.g., "100G", "500M").
+// total_size_bytes: Total size in bytes.
+message StorageDirectoryInfo {
+  string total_size = 1;
+  int64 total_size_bytes = 2;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/userresourceprofile/user_resource_profile.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/userresourceprofile/user_resource_profile.proto
new file mode 100644
index 0000000000..5821966b35
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/appcatalog/userresourceprofile/user_resource_profile.proto
@@ -0,0 +1,54 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.appcatalog.userresourceprofile;
+
+option java_package = 
"org.apache.airavata.model.appcatalog.userresourceprofile";
+option java_multiple_files = true;
+
+message UserComputeResourcePreference {
+  string compute_resource_id = 1;
+  string login_user_name = 2;
+  string preferred_batch_queue = 3;
+  string scratch_location = 4;
+  string allocation_project_number = 5;
+  string resource_specific_credential_store_token = 6;
+  string quality_of_service = 7;
+  string reservation = 8;
+  int64 reservation_start_time = 9;
+  int64 reservation_end_time = 10;
+  bool validated = 11;
+}
+
+message UserStoragePreference {
+  string storage_resource_id = 1;
+  string login_user_name = 2;
+  string file_system_root_location = 3;
+  string resource_specific_credential_store_token = 4;
+}
+
+message UserResourceProfile {
+  string user_id = 1;
+  string gateway_id = 2;
+  string credential_store_token = 3;
+  repeated UserComputeResourcePreference user_compute_resource_preferences = 4;
+  repeated UserStoragePreference user_storage_preferences = 5;
+  string identity_server_tenant = 6;
+  string identity_server_pwd_cred_token = 7;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/application/io/application_io.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/application/io/application_io.proto
new file mode 100644
index 0000000000..3c8eaf960c
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/application/io/application_io.proto
@@ -0,0 +1,90 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.application.io;
+
+option java_package = "org.apache.airavata.model.application.io";
+option java_multiple_files = true;
+
+// Data Types supported in Airavata. The primitive data types.
+enum DataType {
+  DATA_TYPE_UNKNOWN = 0;
+  STRING = 1;
+  INTEGER = 2;
+  FLOAT = 3;
+  URI = 4;
+  URI_COLLECTION = 5;
+  STDOUT = 6;
+  STDERR = 7;
+}
+
+// Application Inputs. The parameters describe how inputs are passed to the
+// application.
+//
+// name: Name of the parameter.
+// value: Value of the parameter. A default value could be set during 
registration.
+// type: Data type of the parameter.
+// application_argument: The argument flag sent to the application. Such as -p 
pressure.
+// standard_input: When this value is set, the parameter is sent as standard 
input
+//   rather than a parameter. Typically this is passed using redirection 
operator ">".
+// user_friendly_description: Description to be displayed at the user 
interface.
+// meta_data: Any metadata. This is typically ignored by Airavata and is used 
by
+//   gateways for application configuration.
+// override_filename: Rename input file to given value when staging to compute 
resource.
+message InputDataObjectType {
+  string name = 1;
+  string value = 2;
+  DataType type = 3;
+  string application_argument = 4;
+  bool standard_input = 5;
+  string user_friendly_description = 6;
+  string meta_data = 7;
+  int32 input_order = 8;
+  bool is_required = 9;
+  bool required_to_added_to_command_line = 10;
+  bool data_staged = 11;
+  string storage_resource_id = 12;
+  bool is_read_only = 13;
+  string override_filename = 14;
+}
+
+// Application Outputs. The parameters describe how outputs are generated by
+// the application.
+//
+// name: Name of the parameter.
+// value: Value of the parameter.
+// type: Data type of the parameter.
+// application_argument: The argument flag sent to the application. Such as -p 
pressure.
+// user_friendly_description: Description to be displayed at the user 
interface.
+// meta_data: Any metadata. This is typically ignored by Airavata and is used 
by
+//   gateways for application configuration.
+message OutputDataObjectType {
+  string name = 1;
+  string value = 2;
+  DataType type = 3;
+  string application_argument = 4;
+  bool is_required = 5;
+  bool required_to_added_to_command_line = 6;
+  bool data_movement = 7;
+  string location = 8;
+  string search_query = 9;
+  bool output_streaming = 10;
+  string storage_resource_id = 11;
+  string meta_data = 12;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/commons/commons.proto 
b/airavata-api/src/main/proto/org/apache/airavata/model/commons/commons.proto
new file mode 100644
index 0000000000..36e1afd7be
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/commons/commons.proto
@@ -0,0 +1,46 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.commons;
+
+option java_package = "org.apache.airavata.model.commons";
+option java_multiple_files = true;
+
+message ErrorModel {
+  string error_id = 1;
+  int64 creation_time = 2;
+  string actual_error_message = 3;
+  string user_friendly_message = 4;
+  bool transient_or_persistent = 5;
+  repeated string root_cause_error_id_list = 6;
+}
+
+// This data structure can be used to store the validation results
+// captured during validation step and during the launchExperiment
+// operation it can be easily checked to see the errors occurred
+// during the experiment launch operation.
+message ValidatorResult {
+  bool result = 1;
+  string error_details = 2;
+}
+
+message ValidationResults {
+  bool validation_state = 1;
+  repeated ValidatorResult validation_result_list = 2;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/credential/store/credential_store.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/credential/store/credential_store.proto
new file mode 100644
index 0000000000..6fd50a3663
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/credential/store/credential_store.proto
@@ -0,0 +1,81 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.credential.store;
+
+option java_package = "org.apache.airavata.model.credential.store";
+option java_multiple_files = true;
+
+message SSHCredential {
+  string gateway_id = 1;
+  string username = 2;
+  string passphrase = 3;
+  string public_key = 4;
+  string private_key = 5;
+  int64 persisted_time = 6;
+  string token = 7;
+  string description = 8;
+}
+
+// Data Types supported in Airavata. The primitive data types.
+enum SummaryType {
+  SUMMARY_TYPE_UNKNOWN = 0;
+  SSH = 1;
+  PASSWD = 2;
+  CERT = 3;
+}
+
+message CredentialSummary {
+  SummaryType type = 1;
+  string gateway_id = 2;
+  // The username corresponds to the Credential's portalUserName which is the
+  // username of the user that created the credential.
+  string username = 3;
+  string public_key = 4;
+  int64 persisted_time = 5;
+  string token = 6;
+  string description = 7;
+}
+
+message CommunityUser {
+  string gateway_name = 1;
+  string username = 2;
+  string user_email = 3;
+}
+
+message CertificateCredential {
+  CommunityUser community_user = 1;
+  string x509_cert = 2;
+  string not_after = 3;
+  string private_key = 4;
+  int64 life_time = 5;
+  string not_before = 6;
+  int64 persisted_time = 7;
+  string token = 8;
+}
+
+message PasswordCredential {
+  string gateway_id = 1;
+  string portal_user_name = 2;
+  string login_user_name = 3;
+  string password = 4;
+  string description = 5;
+  int64 persisted_time = 6;
+  string token = 7;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/data/movement/data_movement.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/data/movement/data_movement.proto
new file mode 100644
index 0000000000..fd9b32f2c2
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/data/movement/data_movement.proto
@@ -0,0 +1,113 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.data.movement;
+
+option java_package = "org.apache.airavata.model.data.movement";
+option java_multiple_files = true;
+
+enum DMType {
+  DM_TYPE_UNKNOWN = 0;
+  COMPUTE_RESOURCE = 1;
+  STORAGE_RESOURCE = 2;
+}
+
+// Enumeration of security authentication and authorization mechanisms 
supported
+// by Airavata. This enumeration just describes the supported mechanism. The
+// corresponding security credentials are registered with Airavata Credential 
store.
+//
+// USERNAME_PASSWORD: A User Name.
+// SSH_KEYS: SSH Keys
+enum SecurityProtocol {
+  SECURITY_PROTOCOL_UNKNOWN = 0;
+  USERNAME_PASSWORD = 1;
+  SSH_KEYS = 2;
+  GSI = 3;
+  KERBEROS = 4;
+  OAUTH = 5;
+  LOCAL = 6;
+}
+
+// Enumeration of data movement supported by Airavata.
+//
+// SCP: Job manager supporting the Portal Batch System (PBS) protocol.
+// SFTP: The Simple Linux Utility for Resource Management is an open source 
workload manager.
+// GridFTP: Globus File Transfer Protocol.
+// UNICORE_STORAGE_SERVICE: Storage Service Provided by Unicore.
+enum DataMovementProtocol {
+  DATA_MOVEMENT_PROTOCOL_UNKNOWN = 0;
+  DATA_MOVEMENT_PROTOCOL_LOCAL = 1;
+  SCP = 2;
+  SFTP = 3;
+  GRID_FTP = 4;
+  UNICORE_STORAGE_SERVICE = 5;
+}
+
+// Data Movement through Secured Copy.
+//
+// alternative_scp_host_name: If the login to scp is different than the 
hostname
+//   itself, specify it here.
+// ssh_port: If a non-default port needs to be used, specify it.
+message SCPDataMovement {
+  string data_movement_interface_id = 1;
+  SecurityProtocol security_protocol = 2;
+  string alternative_scp_host_name = 3;
+  int32 ssh_port = 4;
+}
+
+// Data Movement through GridFTP.
+//
+// alternative_scp_host_name: If the login to scp is different than the 
hostname
+//   itself, specify it here.
+// ssh_port: If a non-default port needs to be used, specify it.
+message GridFTPDataMovement {
+  string data_movement_interface_id = 1;
+  SecurityProtocol security_protocol = 2;
+  repeated string grid_ftp_end_points = 3;
+}
+
+// Data Movement through UnicoreStorage.
+//
+// unicore_end_point_url: unicoreGateway End Point. The provider will query 
this
+//   service to fetch required service end points.
+message UnicoreDataMovement {
+  string data_movement_interface_id = 1;
+  SecurityProtocol security_protocol = 2;
+  string unicore_end_point_url = 3;
+}
+
+// LOCAL data movement.
+message LOCALDataMovement {
+  string data_movement_interface_id = 1;
+}
+
+// Data Movement Interfaces.
+//
+// data_movement_interface_id: The Data Movement Interface has to be previously
+//   registered and referenced here.
+// priority_order: For resources with multiple interfaces, the priority order
+//   should be selected. Lower the numerical number, higher the priority.
+message DataMovementInterface {
+  string data_movement_interface_id = 1;
+  DataMovementProtocol data_movement_protocol = 2;
+  int32 priority_order = 3;
+  int64 creation_time = 4;
+  int64 update_time = 5;
+  string storage_resource_id = 6;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/data/replica/replica_catalog.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/data/replica/replica_catalog.proto
new file mode 100644
index 0000000000..80ac5146ec
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/data/replica/replica_catalog.proto
@@ -0,0 +1,73 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.data.replica;
+
+option java_package = "org.apache.airavata.model.data.replica";
+option java_multiple_files = true;
+
+enum ReplicaLocationCategory {
+  REPLICA_LOCATION_CATEGORY_UNKNOWN = 0;
+  GATEWAY_DATA_STORE = 1;
+  COMPUTE_RESOURCE = 2;
+  LONG_TERM_STORAGE_RESOURCE = 3;
+  OTHER = 4;
+}
+
+enum ReplicaPersistentType {
+  REPLICA_PERSISTENT_TYPE_UNKNOWN = 0;
+  TRANSIENT = 1;
+  PERSISTENT = 2;
+}
+
+enum DataProductType {
+  DATA_PRODUCT_TYPE_UNKNOWN = 0;
+  FILE = 1;
+  COLLECTION = 2;
+}
+
+message DataReplicaLocationModel {
+  string replica_id = 1;
+  string product_uri = 2;
+  string replica_name = 3;
+  string replica_description = 4;
+  int64 creation_time = 5;
+  int64 last_modified_time = 6;
+  int64 valid_until_time = 7;
+  ReplicaLocationCategory replica_location_category = 8;
+  ReplicaPersistentType replica_persistent_type = 9;
+  string storage_resource_id = 10;
+  string file_path = 11;
+  map<string, string> replica_metadata = 12;
+}
+
+message DataProductModel {
+  string product_uri = 1;
+  string gateway_id = 2;
+  string parent_product_uri = 3;
+  string product_name = 4;
+  string product_description = 5;
+  string owner_name = 6;
+  DataProductType data_product_type = 7;
+  int32 product_size = 8;
+  int64 creation_time = 9;
+  int64 last_modified_time = 10;
+  map<string, string> product_metadata = 11;
+  repeated DataReplicaLocationModel replica_locations = 12;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/dbevent/db_event.proto 
b/airavata-api/src/main/proto/org/apache/airavata/model/dbevent/db_event.proto
new file mode 100644
index 0000000000..9944aaf8b6
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/dbevent/db_event.proto
@@ -0,0 +1,84 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.dbevent;
+
+option java_package = "org.apache.airavata.model.dbevent";
+option java_multiple_files = true;
+
+// Type of db-crud operation needed for replication
+enum CrudType {
+  CRUD_TYPE_UNKNOWN = 0;
+  CREATE = 1;
+  READ = 2;
+  UPDATE = 3;
+  DELETE = 4;
+}
+
+// Type of db-entity being replicated
+enum EntityType {
+  ENTITY_TYPE_UNKNOWN = 0;
+  USER_PROFILE = 1;
+  TENANT = 2;
+  GROUP = 3;
+  PROJECT = 4;
+  EXPERIMENT = 5;
+  APPLICATION = 6;
+  SHARING = 7;
+  REGISTRY = 8;
+}
+
+// Type of db-replication event
+enum DBEventType {
+  DB_EVENT_TYPE_UNKNOWN = 0;
+  PUBLISHER = 1;
+  SUBSCRIBER = 2;
+}
+
+// Details pertaining to publish event-type
+message DBEventPublisherContext {
+  CrudType crud_type = 1;
+  EntityType entity_type = 2;
+  bytes entity_data_model = 3;
+}
+
+// Context set by publisher
+message DBEventPublisher {
+  DBEventPublisherContext publisher_context = 1;
+}
+
+// Details pertaining to subscribe event-type
+message DBEventSubscriber {
+  string subscriber_service = 1;
+}
+
+// Either variable set, depending on event-type (Thrift union → oneof)
+message DBEventMessageContext {
+  oneof context {
+    DBEventPublisher publisher = 1;
+    DBEventSubscriber subscriber = 2;
+  }
+}
+
+// Actual db-event message transmitted
+message DBEventMessage {
+  DBEventType db_event_type = 1;
+  DBEventMessageContext message_context = 2;
+  string publisher_service = 3;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/error/errors.proto 
b/airavata-api/src/main/proto/org/apache/airavata/model/error/errors.proto
new file mode 100644
index 0000000000..9a1981b4cb
--- /dev/null
+++ b/airavata-api/src/main/proto/org/apache/airavata/model/error/errors.proto
@@ -0,0 +1,132 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+// This file describes the definitions of the Error Messages that can occur
+// when invoking Apache Airavata Services through the API.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.error;
+
+option java_package = "org.apache.airavata.model.error";
+option java_multiple_files = true;
+
+// A list of Airavata API Error Message Types
+//
+// AIRAVATA_ERROR_TYPE_UNKNOWN: No information available about the error
+// PERMISSION_DENIED: Not permitted to perform action
+// INTERNAL_ERROR: Unexpected problem with the service
+// AUTHENTICATION_FAILURE: The client failed to authenticate.
+// INVALID_AUTHORIZATION: Security Token and/or Username and/or password is 
incorrect
+// AUTHORIZATION_EXPIRED: Authentication token expired
+// UNKNOWN_GATEWAY_ID: The gateway is not registered with Airavata.
+// UNSUPPORTED_OPERATION: Operation denied because it is currently unsupported.
+enum AiravataErrorType {
+  AIRAVATA_ERROR_TYPE_UNKNOWN = 0;
+  PERMISSION_DENIED = 1;
+  INTERNAL_ERROR = 2;
+  AUTHENTICATION_FAILURE = 3;
+  INVALID_AUTHORIZATION = 4;
+  AUTHORIZATION_EXPIRED = 5;
+  UNKNOWN_GATEWAY_ID = 6;
+  UNSUPPORTED_OPERATION = 7;
+}
+
+// This exception is thrown when a client asks to perform an operation on an
+// experiment that does not exist.
+message ExperimentNotFoundException {
+  string message = 1;
+}
+
+message ProjectNotFoundException {
+  string message = 1;
+}
+
+// This exception is thrown for invalid requests that occur from any reasons 
like
+// required input parameters are missing, or a parameter is malformed.
+//
+// message: contains the associated error message.
+message InvalidRequestException {
+  string message = 1;
+}
+
+// This exception is thrown when RPC timeout gets exceeded.
+message TimedOutException {
+}
+
+// This exception is thrown for invalid sshKeyAuthentication requests.
+//
+// message: contains the cause of the authorization failure.
+message AuthenticationException {
+  string message = 1;
+}
+
+// This exception is thrown for invalid authorization requests such as user 
does
+// not have access to an application or resource.
+//
+// message: contains the authorization failure message
+message AuthorizationException {
+  string message = 1;
+}
+
+// This exception is thrown when you try to save a duplicate entity that 
already
+// exists in the database.
+//
+// message: contains the associated error message
+message DuplicateEntryException {
+  string message = 1;
+}
+
+// This exception is thrown by Airavata Services when a call fails as a result 
of
+// a problem that a client may be able to resolve.
+//
+// airavata_error_type: The message type indicating the error that occurred.
+//   Must be one of the values of AiravataErrorType.
+//
+// parameter: If the error applied to a particular input parameter, this will
+//   indicate which parameter.
+message AiravataClientException {
+  AiravataErrorType airavata_error_type = 1;
+  string parameter = 2;
+}
+
+message ValidatorResult {
+  bool result = 1;
+  string error_details = 2;
+}
+
+message ValidationResults {
+  bool validation_state = 1;
+  repeated ValidatorResult validation_result_list = 2;
+}
+
+message LaunchValidationException {
+  ValidationResults validation_result = 1;
+  string error_message = 2;
+}
+
+// This exception is thrown by Airavata Services when a call fails as a result 
of
+// a problem in the service that could not be changed through client's action.
+//
+// airavata_error_type: The message type indicating the error that occurred.
+//   Must be one of the values of AiravataErrorType.
+//
+// message: This may contain additional information about the error
+message AiravataSystemException {
+  AiravataErrorType airavata_error_type = 1;
+  string message = 2;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/experiment/experiment.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/experiment/experiment.proto
new file mode 100644
index 0000000000..b04625b597
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/experiment/experiment.proto
@@ -0,0 +1,156 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.experiment;
+
+option java_package = "org.apache.airavata.model.experiment";
+option java_multiple_files = true;
+
+import "org/apache/airavata/model/commons/commons.proto";
+import "org/apache/airavata/model/application/io/application_io.proto";
+import "org/apache/airavata/model/scheduling/scheduling.proto";
+import "org/apache/airavata/model/status/status.proto";
+import "org/apache/airavata/model/process/process.proto";
+import "org/apache/airavata/model/workflow/workflow.proto";
+
+enum ExperimentType {
+  EXPERIMENT_TYPE_UNKNOWN = 0;
+  SINGLE_APPLICATION = 1;
+  WORKFLOW = 2;
+}
+
+enum ExperimentSearchFields {
+  EXPERIMENT_SEARCH_FIELDS_UNKNOWN = 0;
+  EXPERIMENT_NAME = 1;
+  EXPERIMENT_DESC = 2;
+  APPLICATION_ID = 3;
+  FROM_DATE = 4;
+  TO_DATE = 5;
+  STATUS = 6;
+  PROJECT_ID = 7;
+  USER_NAME = 8;
+  JOB_ID = 9;
+}
+
+enum ProjectSearchFields {
+  PROJECT_SEARCH_FIELDS_UNKNOWN = 0;
+  PROJECT_NAME = 1;
+  PROJECT_DESCRIPTION = 2;
+}
+
+// UserConfigurationDataModel: A structure holding the experiment 
configuration.
+//
+// airavata_auto_schedule: Whether Airavata should auto schedule.
+// override_manual_scheduled_params: Whether to override manually scheduled 
params.
+// share_experiment_publicly: Whether to share the experiment publicly.
+// computational_resource_scheduling: Computational resource scheduling model.
+// throttle_resources: Whether to throttle resources.
+// user_dn: User DN for certificate generation.
+// generate_cert: Whether to generate a certificate.
+// input_storage_resource_id: Input storage resource id.
+// output_storage_resource_id: Output storage resource id.
+// experiment_data_dir: Experiment data directory.
+// use_user_cr_pref: Whether to use user compute resource preferences.
+// group_resource_profile_id: Group resource profile id.
+// auto_scheduled_comp_resource_scheduling_list: Auto-scheduled resource 
scheduling list.
+message UserConfigurationDataModel {
+  bool airavata_auto_schedule = 1;
+  bool override_manual_scheduled_params = 2;
+  bool share_experiment_publicly = 3;
+  org.apache.airavata.model.scheduling.ComputationalResourceSchedulingModel 
computational_resource_scheduling = 4;
+  bool throttle_resources = 5;
+  string user_dn = 6;
+  bool generate_cert = 7;
+  string input_storage_resource_id = 8;
+  string output_storage_resource_id = 9;
+  string experiment_data_dir = 10;
+  bool use_user_cr_pref = 11;
+  string group_resource_profile_id = 12;
+  repeated 
org.apache.airavata.model.scheduling.ComputationalResourceSchedulingModel 
auto_scheduled_comp_resource_scheduling_list = 13;
+}
+
+enum ExperimentCleanupStrategy {
+  EXPERIMENT_CLEANUP_STRATEGY_UNKNOWN = 0;
+  NONE = 1;
+  ALWAYS = 2;
+  ONLY_COMPLETED = 3;
+  ONLY_FAILED = 4;
+}
+
+// ExperimentModel: A structure holding the experiment metadata and its child 
models.
+//
+// experiment_id: Unique identifier for the experiment.
+// project_id: Project the experiment belongs to.
+// gateway_id: Gateway identifier.
+// experiment_type: Type of the experiment.
+// user_name: The user name of the targeted gateway end user.
+// experiment_name: The name of the experiment as defined by the user.
+// description: The verbose description of the experiment.
+message ExperimentModel {
+  string experiment_id = 1;
+  string project_id = 2;
+  string gateway_id = 3;
+  ExperimentType experiment_type = 4;
+  string user_name = 5;
+  string experiment_name = 6;
+  int64 creation_time = 7;
+  string description = 8;
+  string execution_id = 9;
+  string gateway_execution_id = 10;
+  string gateway_instance_id = 11;
+  bool enable_email_notification = 12;
+  repeated string email_addresses = 13;
+  UserConfigurationDataModel user_configuration_data = 14;
+  repeated org.apache.airavata.model.application.io.InputDataObjectType 
experiment_inputs = 15;
+  repeated org.apache.airavata.model.application.io.OutputDataObjectType 
experiment_outputs = 16;
+  repeated org.apache.airavata.model.status.ExperimentStatus experiment_status 
= 17;
+  repeated org.apache.airavata.model.commons.ErrorModel errors = 18;
+  repeated org.apache.airavata.model.process.ProcessModel processes = 19;
+  org.apache.airavata.model.workflow.AiravataWorkflow workflow = 20;
+  ExperimentCleanupStrategy clean_up_strategy = 21;
+}
+
+message ExperimentSummaryModel {
+  string experiment_id = 1;
+  string project_id = 2;
+  string gateway_id = 3;
+  int64 creation_time = 4;
+  string user_name = 5;
+  string name = 6;
+  string description = 7;
+  string execution_id = 8;
+  string resource_host_id = 9;
+  string experiment_status = 10;
+  int64 status_update_time = 12;
+}
+
+message ExperimentStatistics {
+  int32 all_experiment_count = 1;
+  int32 completed_experiment_count = 2;
+  int32 cancelled_experiment_count = 3;
+  int32 failed_experiment_count = 4;
+  int32 created_experiment_count = 5;
+  int32 running_experiment_count = 6;
+  repeated ExperimentSummaryModel all_experiments = 7;
+  repeated ExperimentSummaryModel completed_experiments = 8;
+  repeated ExperimentSummaryModel failed_experiments = 9;
+  repeated ExperimentSummaryModel cancelled_experiments = 10;
+  repeated ExperimentSummaryModel created_experiments = 11;
+  repeated ExperimentSummaryModel running_experiments = 12;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/group/group_manager.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/group/group_manager.proto
new file mode 100644
index 0000000000..408fc273cc
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/group/group_manager.proto
@@ -0,0 +1,51 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.group;
+
+option java_package = "org.apache.airavata.model.group";
+option java_multiple_files = true;
+
+enum ResourceType {
+  RESOURCE_TYPE_UNKNOWN = 0;
+  PROJECT = 1;
+  EXPERIMENT = 2;
+  DATA = 3;
+  APPLICATION_DEPLOYMENT = 4;
+  GROUP_RESOURCE_PROFILE = 5;
+  CREDENTIAL_TOKEN = 6;
+  OTHER = 7;
+}
+
+enum ResourcePermissionType {
+  RESOURCE_PERMISSION_TYPE_UNKNOWN = 0;
+  WRITE = 1;
+  READ = 2;
+  OWNER = 3;
+  MANAGE_SHARING = 4;
+}
+
+message GroupModel {
+  string id = 1;
+  string name = 2;
+  string owner_id = 3;
+  string description = 4;
+  repeated string members = 5;
+  repeated string admins = 6;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/job/job.proto 
b/airavata-api/src/main/proto/org/apache/airavata/model/job/job.proto
new file mode 100644
index 0000000000..7d21579a5f
--- /dev/null
+++ b/airavata-api/src/main/proto/org/apache/airavata/model/job/job.proto
@@ -0,0 +1,40 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.job;
+
+option java_package = "org.apache.airavata.model.job";
+option java_multiple_files = true;
+
+import "org/apache/airavata/model/status/status.proto";
+
+message JobModel {
+  string job_id = 1;
+  string task_id = 2;
+  string process_id = 3;
+  string job_description = 4;
+  int64 creation_time = 5;
+  repeated org.apache.airavata.model.status.JobStatus job_statuses = 6;
+  string compute_resource_consumed = 7;
+  string job_name = 8;
+  string working_dir = 9;
+  string std_out = 10;
+  string std_err = 11;
+  int32 exit_code = 12;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/messaging/messaging_events.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/messaging/messaging_events.proto
new file mode 100644
index 0000000000..441d78acec
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/messaging/messaging_events.proto
@@ -0,0 +1,142 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.messaging.event;
+
+option java_package = "org.apache.airavata.model.messaging.event";
+option java_multiple_files = true;
+
+import "org/apache/airavata/model/status/status.proto";
+import "org/apache/airavata/model/application/io/application_io.proto";
+
+enum MessageLevel {
+  MESSAGE_LEVEL_UNKNOWN = 0;
+  INFO = 1;
+  DEBUG = 2;
+  ERROR = 3;
+  ACK = 4;
+}
+
+enum MessageType {
+  MESSAGE_TYPE_UNKNOWN = 0;
+  EXPERIMENT = 1;
+  EXPERIMENT_CANCEL = 2;
+  TASK = 3;
+  PROCESS = 4;
+  JOB = 5;
+  LAUNCHPROCESS = 6;
+  TERMINATEPROCESS = 7;
+  PROCESSOUTPUT = 8;
+  DB_EVENT = 9;
+  INTERMEDIATE_OUTPUTS = 10;
+}
+
+message ExperimentStatusChangeEvent {
+  org.apache.airavata.model.status.ExperimentState state = 1;
+  string experiment_id = 2;
+  string gateway_id = 3;
+}
+
+message ProcessIdentifier {
+  string process_id = 1;
+  string experiment_id = 2;
+  string gateway_id = 3;
+}
+
+message TaskIdentifier {
+  string task_id = 1;
+  string process_id = 2;
+  string experiment_id = 3;
+  string gateway_id = 4;
+}
+
+message TaskStatusChangeEvent {
+  org.apache.airavata.model.status.TaskState state = 1;
+  TaskIdentifier task_identity = 2;
+}
+
+message TaskStatusChangeRequestEvent {
+  org.apache.airavata.model.status.TaskState state = 1;
+  TaskIdentifier task_identity = 2;
+}
+
+message ProcessStatusChangeEvent {
+  org.apache.airavata.model.status.ProcessState state = 1;
+  ProcessIdentifier process_identity = 2;
+}
+
+message ProcessStatusChangeRequestEvent {
+  org.apache.airavata.model.status.ProcessState state = 1;
+  ProcessIdentifier process_identity = 2;
+}
+
+message TaskOutputChangeEvent {
+  repeated org.apache.airavata.model.application.io.OutputDataObjectType 
output = 1;
+  TaskIdentifier task_identity = 2;
+}
+
+message JobIdentifier {
+  string job_id = 1;
+  string task_id = 2;
+  string process_id = 3;
+  string experiment_id = 4;
+  string gateway_id = 5;
+}
+
+message ExperimentSubmitEvent {
+  string experiment_id = 1;
+  string gateway_id = 2;
+}
+
+message ProcessSubmitEvent {
+  string process_id = 1;
+  string gateway_id = 2;
+  string experiment_id = 3;
+  string token_id = 4;
+}
+
+message ProcessTerminateEvent {
+  string process_id = 1;
+  string gateway_id = 2;
+  string token_id = 3;
+}
+
+message JobStatusChangeEvent {
+  org.apache.airavata.model.status.JobState state = 1;
+  JobIdentifier job_identity = 2;
+}
+
+message JobStatusChangeRequestEvent {
+  org.apache.airavata.model.status.JobState state = 1;
+  JobIdentifier job_identity = 2;
+}
+
+message ExperimentIntermediateOutputsEvent {
+  string experiment_id = 1;
+  string gateway_id = 2;
+  repeated string output_names = 3;
+}
+
+message Message {
+  bytes event = 1;
+  string message_id = 2;
+  MessageType message_type = 3;
+  int64 updated_time = 4;
+  MessageLevel message_level = 5;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/parallelism/parallelism.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/parallelism/parallelism.proto
new file mode 100644
index 0000000000..26b4403d1b
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/parallelism/parallelism.proto
@@ -0,0 +1,41 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+// Application Parallelism Enumerations.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.parallelism;
+
+option java_package = "org.apache.airavata.model.parallelism";
+option java_multiple_files = true;
+
+// Enumeration of application parallelism supported by Airavata.
+//
+// SERIAL: Single processor applications without any parallelization.
+// MPI: Messaging Passing Interface.
+// OPENMP: Shared Memory Implementation.
+// OPENMP_MPI: Hybrid Applications.
+enum ApplicationParallelismType {
+  APPLICATION_PARALLELISM_TYPE_UNKNOWN = 0;
+  SERIAL = 1;
+  MPI = 2;
+  OPENMP = 3;
+  OPENMP_MPI = 4;
+  CCM = 5;
+  CRAY_MPI = 6;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/process/process.proto 
b/airavata-api/src/main/proto/org/apache/airavata/model/process/process.proto
new file mode 100644
index 0000000000..e8938ccfa8
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/process/process.proto
@@ -0,0 +1,73 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.process;
+
+option java_package = "org.apache.airavata.model.process";
+option java_multiple_files = true;
+
+import "org/apache/airavata/model/commons/commons.proto";
+import "org/apache/airavata/model/application/io/application_io.proto";
+import "org/apache/airavata/model/scheduling/scheduling.proto";
+import "org/apache/airavata/model/status/status.proto";
+import "org/apache/airavata/model/task/task.proto";
+
+message ProcessWorkflow {
+  string process_id = 1;
+  string workflow_id = 2;
+  int64 creation_time = 3;
+  string type = 4;
+}
+
+// ProcessModel: A structure holding the process details. The information is
+// derived based on user provided configuration data or system inferred
+// information from scheduling and QoS parameters.
+//
+// process_id: Unique identifier for the process.
+// experiment_id: Parent experiment id.
+// process_detail: A friendly description of the process.
+message ProcessModel {
+  string process_id = 1;
+  string experiment_id = 2;
+  int64 creation_time = 3;
+  int64 last_update_time = 4;
+  repeated org.apache.airavata.model.status.ProcessStatus process_statuses = 5;
+  string process_detail = 6;
+  string application_interface_id = 7;
+  string application_deployment_id = 8;
+  string compute_resource_id = 9;
+  repeated org.apache.airavata.model.application.io.InputDataObjectType 
process_inputs = 10;
+  repeated org.apache.airavata.model.application.io.OutputDataObjectType 
process_outputs = 11;
+  org.apache.airavata.model.scheduling.ComputationalResourceSchedulingModel 
process_resource_schedule = 12;
+  repeated org.apache.airavata.model.task.TaskModel tasks = 13;
+  string task_dag = 14;
+  repeated org.apache.airavata.model.commons.ErrorModel process_errors = 15;
+  string gateway_execution_id = 16;
+  bool enable_email_notification = 17;
+  repeated string email_addresses = 18;
+  string input_storage_resource_id = 19;
+  string output_storage_resource_id = 20;
+  string user_dn = 21;
+  bool generate_cert = 22;
+  string experiment_data_dir = 23;
+  string user_name = 24;
+  bool use_user_cr_pref = 25;
+  string group_resource_profile_id = 26;
+  repeated ProcessWorkflow process_workflows = 27;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/scheduling/scheduling.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/scheduling/scheduling.proto
new file mode 100644
index 0000000000..1298d2821f
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/scheduling/scheduling.proto
@@ -0,0 +1,39 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.scheduling;
+
+option java_package = "org.apache.airavata.model.scheduling";
+option java_multiple_files = true;
+
+message ComputationalResourceSchedulingModel {
+  string resource_host_id = 1;
+  int32 total_cpu_count = 2;
+  int32 node_count = 3;
+  int32 number_of_threads = 4;
+  string queue_name = 5;
+  int32 wall_time_limit = 6;
+  int32 total_physical_memory = 7;
+  string chessis_number = 8;
+  string static_working_dir = 9;
+  string override_login_user_name = 10;
+  string override_scratch_location = 11;
+  string override_allocation_project_number = 12;
+  int32 m_group_count = 13;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/security/security.proto 
b/airavata-api/src/main/proto/org/apache/airavata/model/security/security.proto
new file mode 100644
index 0000000000..5638e6d98a
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/security/security.proto
@@ -0,0 +1,32 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.security;
+
+option java_package = "org.apache.airavata.model.security";
+option java_multiple_files = true;
+
+// This file describes the definitions of the security model which encapsulates
+// the information that needs to be passed to the API methods in order to
+// authenticate and authorize the users.
+
+message AuthzToken {
+  string access_token = 1;
+  map<string, string> claims_map = 2;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/sharing/sharing.proto 
b/airavata-api/src/main/proto/org/apache/airavata/model/sharing/sharing.proto
new file mode 100644
index 0000000000..babd045e46
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/sharing/sharing.proto
@@ -0,0 +1,254 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.sharing.registry.models;
+
+option java_package = "org.apache.airavata.sharing.registry.models";
+option java_multiple_files = true;
+
+// Domain is the entity that enables multi-tenancy in this component. Every
+// tenant will be operating separately in its own silo which is identified by
+// the domain id.
+//
+// domain_id: Will be generated by the server based on the domain name.
+// name: A single word name that identifies the domain e.g seagrid, ultrascan.
+// description: A short description for the domain.
+// created_time: Will be set by the system.
+// updated_time: Will be set by the system.
+// initial_user_group_id: New users will automatically be added to this group.
+message Domain {
+  string domain_id = 1;
+  string name = 2;
+  string description = 3;
+  int64 created_time = 4;
+  int64 updated_time = 5;
+  string initial_user_group_id = 6;
+}
+
+// User is the model used to register a user in the system.
+//
+// user_id: User id provided by the client.
+// domain_id: Domain id for that user.
+// user_name: User name for the user.
+// first_name: First name of the user.
+// last_name: Last name of the user.
+// email: Email address of the user.
+// icon: A binary field for storing the user icon.
+// created_time: If client provides this value then the system will use it,
+//   otherwise the current time will be set.
+// updated_time: If client provides this value then the system will use it,
+//   otherwise the current time will be set.
+message User {
+  string user_id = 1;
+  string domain_id = 2;
+  string user_name = 3;
+  string first_name = 4;
+  string last_name = 5;
+  string email = 6;
+  bytes icon = 7;
+  int64 created_time = 8;
+  int64 updated_time = 9;
+}
+
+// Admin user for a group. Admin will have access to add or remove users from
+// the group.
+message GroupAdmin {
+  string group_id = 1;
+  string domain_id = 2;
+  string admin_id = 3;
+}
+
+// System internal enum used to define single user groups and multi-user 
groups.
+// Every user is also considered as a group in its own right for 
implementation ease.
+enum GroupCardinality {
+  GROUP_CARDINALITY_UNKNOWN = 0;
+  SINGLE_USER = 1;
+  MULTI_USER = 2;
+}
+
+// Group types can be either user level or domain level groups.
+enum GroupType {
+  GROUP_TYPE_UNKNOWN = 0;
+  DOMAIN_LEVEL_GROUP = 1;
+  USER_LEVEL_GROUP = 2;
+}
+
+// User group is a collection of users.
+//
+// group_id: Group id provided by the client.
+// domain_id: Domain id for this user group.
+// name: Name for the user group. Should be one word.
+// description: Short description for the group.
+// owner_id: Owner id of this group.
+// group_type: Group type (DOMAIN_LEVEL_GROUP, USER_LEVEL_GROUP).
+// group_cardinality: Group cardinality (SINGLE_USER, MULTI_USER).
+// created_time: Will be set by the system.
+// updated_time: Will be set by the system.
+// group_admins: Admins for the group.
+message UserGroup {
+  string group_id = 1;
+  string domain_id = 2;
+  string name = 3;
+  string description = 4;
+  string owner_id = 5;
+  GroupType group_type = 6;
+  GroupCardinality group_cardinality = 7;
+  int64 created_time = 8;
+  int64 updated_time = 9;
+  repeated GroupAdmin group_admins = 10;
+}
+
+// System internal data type to match group child types.
+enum GroupChildType {
+  GROUP_CHILD_TYPE_UNKNOWN = 0;
+  USER = 1;
+  GROUP = 2;
+}
+
+// System internal data type to map group memberships.
+message GroupMembership {
+  string parent_id = 1;
+  string child_id = 2;
+  string domain_id = 3;
+  GroupChildType child_type = 4;
+  int64 created_time = 5;
+  int64 updated_time = 6;
+}
+
+// Client defined entity types.
+//
+// entity_type_id: Entity type id provided by the client.
+// domain_id: Domain id of the domain.
+// name: Name for the entity type. Should be a single word.
+// description: Short description for the entity type.
+// created_time: Will be set by the system.
+// updated_time: Will be set by the system.
+message EntityType {
+  string entity_type_id = 1;
+  string domain_id = 2;
+  string name = 3;
+  string description = 4;
+  int64 created_time = 5;
+  int64 updated_time = 6;
+}
+
+// Fields that can be used to search entities.
+enum EntitySearchField {
+  ENTITY_SEARCH_FIELD_UNKNOWN = 0;
+  NAME = 1;
+  DESCRIPTION = 2;
+  FULL_TEXT = 3;
+  PARRENT_ENTITY_ID = 4;
+  OWNER_ID = 5;
+  PERMISSION_TYPE_ID = 6;
+  CREATED_TIME = 7;
+  UPDATED_TIME = 8;
+  ENTITY_TYPE_ID = 9;
+  SHARED_COUNT = 10;
+}
+
+// Different search operators that can be used with the entity search fields.
+enum SearchCondition {
+  SEARCH_CONDITION_UNKNOWN = 0;
+  EQUAL = 1;
+  LIKE = 2;
+  FULL_TEXT_SEARCH = 3;
+  GTE = 4;
+  LTE = 5;
+  NOT = 6;
+}
+
+// Container object for search criteria.
+//
+// search_field: Entity search field.
+// value: Search value.
+// search_condition: EQUAL, LIKE etc.
+message SearchCriteria {
+  EntitySearchField search_field = 1;
+  string value = 2;
+  SearchCondition search_condition = 3;
+}
+
+// Entity object which is used to register an entity in the system.
+//
+// entity_id: Entity id provided by the client.
+// domain_id: Domain id.
+// entity_type_id: Entity type id.
+// owner_id: Owner id.
+// parent_entity_id: Parent entity id.
+// name: Name.
+// description: Short description for the entity.
+// binary_data: Any information stored in binary format.
+// full_text: A string which will be considered for full text search.
+// original_entity_creation_time: When registering old records, what is the
+//   original entity creation time. If not set will default to current time.
+// created_time: Will be set by the system.
+// updated_time: Will be set by the system.
+message Entity {
+  string entity_id = 1;
+  string domain_id = 2;
+  string entity_type_id = 3;
+  string owner_id = 4;
+  string parent_entity_id = 5;
+  string name = 6;
+  string description = 7;
+  bytes binary_data = 8;
+  string full_text = 9;
+  int64 shared_count = 10;
+  int64 original_entity_creation_time = 11;
+  int64 created_time = 12;
+  int64 updated_time = 13;
+}
+
+// Object for creating client defined permission type.
+//
+// permission_type_id: Permission type id provided by the client.
+// domain_id: Domain id.
+// name: Single word name for the permission.
+// description: Short description for the permission type.
+// created_time: Will be set by the system.
+// updated_time: Will be set by the system.
+message PermissionType {
+  string permission_type_id = 1;
+  string domain_id = 2;
+  string name = 3;
+  string description = 4;
+  int64 created_time = 5;
+  int64 updated_time = 6;
+}
+
+// Internal enum type for managing sharings.
+enum SharingType {
+  SHARING_TYPE_UNKNOWN = 0;
+  DIRECT_NON_CASCADING = 1;
+  DIRECT_CASCADING = 2;
+  INDIRECT_CASCADING = 3;
+}
+
+// Internal data type for managing sharings.
+message Sharing {
+  string permission_type_id = 1;
+  string entity_id = 2;
+  string group_id = 3;
+  SharingType sharing_type = 4;
+  string domain_id = 5;
+  string inherited_parent_id = 6;
+  int64 created_time = 7;
+  int64 updated_time = 8;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/status/status.proto 
b/airavata-api/src/main/proto/org/apache/airavata/model/status/status.proto
new file mode 100644
index 0000000000..6bf3abee17
--- /dev/null
+++ b/airavata-api/src/main/proto/org/apache/airavata/model/status/status.proto
@@ -0,0 +1,122 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.status;
+
+option java_package = "org.apache.airavata.model.status";
+option java_multiple_files = true;
+
+enum ExperimentState {
+  EXPERIMENT_STATE_UNKNOWN = 0;
+  EXPERIMENT_STATE_CREATED = 1;
+  EXPERIMENT_STATE_VALIDATED = 2;
+  EXPERIMENT_STATE_SCHEDULED = 3;
+  EXPERIMENT_STATE_LAUNCHED = 4;
+  EXPERIMENT_STATE_EXECUTING = 5;
+  EXPERIMENT_STATE_CANCELING = 6;
+  EXPERIMENT_STATE_CANCELED = 7;
+  EXPERIMENT_STATE_COMPLETED = 8;
+  EXPERIMENT_STATE_FAILED = 9;
+}
+
+enum TaskState {
+  TASK_STATE_UNKNOWN = 0;
+  TASK_STATE_CREATED = 1;
+  TASK_STATE_EXECUTING = 2;
+  TASK_STATE_COMPLETED = 3;
+  TASK_STATE_FAILED = 4;
+  TASK_STATE_CANCELED = 5;
+}
+
+enum ProcessState {
+  PROCESS_STATE_UNKNOWN = 0;
+  PROCESS_STATE_CREATED = 1;
+  PROCESS_STATE_VALIDATED = 2;
+  PROCESS_STATE_STARTED = 3;
+  PROCESS_STATE_PRE_PROCESSING = 4;
+  PROCESS_STATE_CONFIGURING_WORKSPACE = 5;
+  PROCESS_STATE_INPUT_DATA_STAGING = 6;
+  PROCESS_STATE_EXECUTING = 7;
+  PROCESS_STATE_MONITORING = 8;
+  PROCESS_STATE_OUTPUT_DATA_STAGING = 9;
+  PROCESS_STATE_POST_PROCESSING = 10;
+  PROCESS_STATE_COMPLETED = 11;
+  PROCESS_STATE_FAILED = 12;
+  PROCESS_STATE_CANCELLING = 13;
+  PROCESS_STATE_CANCELED = 14;
+  PROCESS_STATE_QUEUED = 15;
+  PROCESS_STATE_DEQUEUING = 16;
+  PROCESS_STATE_REQUEUED = 17;
+}
+
+enum JobState {
+  JOB_STATE_UNKNOWN = 0;
+  SUBMITTED = 1;
+  QUEUED = 2;
+  ACTIVE = 3;
+  COMPLETE = 4;
+  CANCELED = 5;
+  FAILED = 6;
+  SUSPENDED = 7;
+  NON_CRITICAL_FAIL = 8;
+}
+
+// Status: A generic status object.
+//
+// state: State.
+// time_of_state_change: time the status was last updated.
+// reason: User friendly reason on how the state is inferred.
+
+message ExperimentStatus {
+  ExperimentState state = 1;
+  int64 time_of_state_change = 2;
+  string reason = 3;
+  string status_id = 4;
+}
+
+message ProcessStatus {
+  ProcessState state = 1;
+  int64 time_of_state_change = 2;
+  string reason = 3;
+  string status_id = 4;
+  string process_id = 5;
+}
+
+message TaskStatus {
+  TaskState state = 1;
+  int64 time_of_state_change = 2;
+  string reason = 3;
+  string status_id = 4;
+}
+
+message JobStatus {
+  JobState job_state = 1;
+  int64 time_of_state_change = 2;
+  string reason = 3;
+  string status_id = 4;
+}
+
+message QueueStatusModel {
+  string host_name = 1;
+  string queue_name = 2;
+  bool queue_up = 3;
+  int32 running_jobs = 4;
+  int32 queued_jobs = 5;
+  int64 time = 6;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/task/task.proto 
b/airavata-api/src/main/proto/org/apache/airavata/model/task/task.proto
new file mode 100644
index 0000000000..19eed52b1c
--- /dev/null
+++ b/airavata-api/src/main/proto/org/apache/airavata/model/task/task.proto
@@ -0,0 +1,111 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.task;
+
+option java_package = "org.apache.airavata.model.task";
+option java_multiple_files = true;
+
+import "org/apache/airavata/model/commons/commons.proto";
+import "org/apache/airavata/model/application/io/application_io.proto";
+import 
"org/apache/airavata/model/appcatalog/computeresource/compute_resource.proto";
+import "org/apache/airavata/model/data/movement/data_movement.proto";
+import "org/apache/airavata/model/job/job.proto";
+import "org/apache/airavata/model/status/status.proto";
+
+// TaskTypes: An enumerated list of TaskTypes. Task being generic, the task 
type
+// will provide the concrete interpretation.
+enum TaskTypes {
+  TASK_TYPES_UNKNOWN = 0;
+  ENV_SETUP = 1;
+  DATA_STAGING = 2;
+  JOB_SUBMISSION = 3;
+  ENV_CLEANUP = 4;
+  MONITORING = 5;
+  OUTPUT_FETCHING = 6;
+}
+
+// TaskModel: A structure holding the generic task details.
+//
+// task_id: Unique identifier for the task.
+// task_type: Type of the task.
+// parent_process_id: Process id that owns this task.
+// creation_time: Task creation time.
+// last_update_time: Last update time of the task.
+// task_statuses: List of task status objects.
+// task_detail: A friendly description of the task.
+// sub_task_model: A generic byte object for the Task developer to store 
internal
+//   serialized data into registry catalogs.
+// task_errors: List of error models.
+// jobs: List of jobs spawned by this task.
+// max_retry: Maximum retry count.
+// current_retry: Current retry count.
+message TaskModel {
+  string task_id = 1;
+  TaskTypes task_type = 2;
+  string parent_process_id = 3;
+  int64 creation_time = 4;
+  int64 last_update_time = 5;
+  repeated org.apache.airavata.model.status.TaskStatus task_statuses = 6;
+  string task_detail = 7;
+  bytes sub_task_model = 8;
+  repeated org.apache.airavata.model.commons.ErrorModel task_errors = 9;
+  repeated org.apache.airavata.model.job.JobModel jobs = 10;
+  int32 max_retry = 11;
+  int32 current_retry = 12;
+}
+
+// DataStageType: Type of data staging operation.
+enum DataStageType {
+  DATA_STAGE_TYPE_UNKNOWN = 0;
+  INPUT = 1;
+  OUPUT = 2;
+  ARCHIVE_OUTPUT = 3;
+}
+
+// DataStagingTaskModel: A structure holding the data staging task details.
+//
+// Source and Destination locations include standard representation of 
protocol,
+// host, port and path.
+message DataStagingTaskModel {
+  string source = 1;
+  string destination = 2;
+  DataStageType type = 3;
+  int64 transfer_start_time = 4;
+  int64 transfer_end_time = 5;
+  string transfer_rate = 6;
+  org.apache.airavata.model.application.io.InputDataObjectType process_input = 
7;
+  org.apache.airavata.model.application.io.OutputDataObjectType process_output 
= 8;
+}
+
+// EnvironmentSetupTaskModel: A structure holding the environment creation 
task details.
+message EnvironmentSetupTaskModel {
+  string location = 1;
+  org.apache.airavata.model.data.movement.SecurityProtocol protocol = 2;
+}
+
+message JobSubmissionTaskModel {
+  org.apache.airavata.model.appcatalog.computeresource.JobSubmissionProtocol 
job_submission_protocol = 1;
+  org.apache.airavata.model.appcatalog.computeresource.MonitorMode 
monitor_mode = 2;
+  int32 wall_time = 3;
+}
+
+message MonitorTaskModel {
+  org.apache.airavata.model.appcatalog.computeresource.MonitorMode 
monitor_mode = 1;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/tenant/tenant_profile.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/tenant/tenant_profile.proto
new file mode 100644
index 0000000000..47e597ab8e
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/tenant/tenant_profile.proto
@@ -0,0 +1,63 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.tenant;
+
+option java_package = "org.apache.airavata.model.tenant";
+option java_multiple_files = true;
+
+enum TenantApprovalStatus {
+  TENANT_APPROVAL_STATUS_UNKNOWN = 0;
+  REQUESTED = 1;
+  APPROVED = 2;
+  ACTIVE = 3;
+  DEACTIVATED = 4;
+  CANCELLED = 5;
+  DENIED = 6;
+  CREATED = 7;
+  DEPLOYED = 8;
+}
+
+message TenantPreferences {
+  string tenant_admin_first_name = 10;
+  string tenant_admin_last_name = 11;
+  string tenant_admin_email = 12;
+}
+
+message TenantConfig {
+  string oauth_client_id = 16;
+  string oauth_client_secret = 17;
+  string identity_server_user_name = 13;
+  string identity_server_password_token = 14;
+}
+
+message Tenant {
+  string tenant_id = 1;
+  TenantApprovalStatus tenant_approval_status = 2;
+  string tenant_name = 3;
+  string domain = 4;
+  string email_address = 5;
+  string tenant_acronym = 6;
+  string tenant_url = 7;
+  string tenant_public_abstract = 8;
+  string review_proposal_description = 9;
+  string declined_reason = 15;
+  int64 request_creation_time = 18;
+  string requester_username = 19;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/user/user_profile.proto 
b/airavata-api/src/main/proto/org/apache/airavata/model/user/user_profile.proto
new file mode 100644
index 0000000000..ead71d5e37
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/user/user_profile.proto
@@ -0,0 +1,137 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.user;
+
+option java_package = "org.apache.airavata.model.user";
+option java_multiple_files = true;
+
+enum Status {
+  STATUS_UNKNOWN = 0;
+  ACTIVE = 1;
+  CONFIRMED = 2;
+  APPROVED = 3;
+  DELETED = 4;
+  DUPLICATE = 5;
+  GRACE_PERIOD = 6;
+  INVITED = 7;
+  DENIED = 8;
+  PENDING = 9;
+  PENDING_APPROVAL = 10;
+  PENDING_CONFIRMATION = 11;
+  SUSPENDED = 12;
+  DECLINED = 13;
+  EXPIRED = 14;
+}
+
+enum USCitizenship {
+  US_CITIZENSHIP_UNKNOWN = 0;
+  US_CITIZEN = 1;
+  US_PERMANENT_RESIDENT = 2;
+  OTHER_NON_US_CITIZEN = 3;
+}
+
+enum Ethnicity {
+  ETHNICITY_UNKNOWN = 0;
+  HISPANIC_LATINO = 1;
+  NOT_HISPANIC_LATINO = 2;
+}
+
+enum Race {
+  RACE_UNKNOWN = 0;
+  ASIAN = 1;
+  AMERICAN_INDIAN_OR_ALASKAN_NATIVE = 2;
+  BLACK_OR_AFRICAN_AMERICAN = 3;
+  NATIVE_HAWAIIAN_OR_PACIFIC_ISLANDER = 4;
+  WHITE = 5;
+}
+
+enum Disability {
+  DISABILITY_UNKNOWN = 0;
+  HEARING_IMAPAIRED = 1;
+  VISUAL_IMPAIRED = 2;
+  MOBILITY_OR_ORTHOPEDIC_IMPAIRMENT = 3;
+  OTHER_IMPAIRMENT = 4;
+}
+
+message NSFDemographics {
+  string airavata_internal_user_id = 1;
+  string gender = 2;
+  USCitizenship us_citizenship = 3;
+  repeated Ethnicity ethnicities = 4;
+  repeated Race races = 5;
+  repeated Disability disabilities = 6;
+}
+
+message CustomDashboard {
+  string airavata_internal_user_id = 1;
+  string experiment_id = 2;
+  string name = 3;
+  string description = 4;
+  string project = 5;
+  string owner = 6;
+  string application = 7;
+  string compute_resource = 8;
+  string job_name = 9;
+  string job_id = 10;
+  string job_status = 11;
+  string job_creation_time = 12;
+  string notifications_to = 13;
+  string working_dir = 14;
+  string job_description = 15;
+  string creation_time = 16;
+  string last_modified_time = 17;
+  string wall_time = 18;
+  string cpu_count = 19;
+  string node_count = 20;
+  string queue = 21;
+  string inputs = 22;
+  string outputs = 23;
+  string storage_dir = 24;
+  string errors = 25;
+}
+
+message UserProfile {
+  string user_model_version = 1;
+  string airavata_internal_user_id = 2;
+  string user_id = 3;
+  string gateway_id = 4;
+  repeated string emails = 5;
+  string first_name = 6;
+  string last_name = 7;
+  string middle_name = 8;
+  string name_prefix = 9;
+  string name_suffix = 10;
+  string orcid_id = 11;
+  repeated string phones = 12;
+  string country = 13;
+  repeated string nationality = 14;
+  string home_organization = 15;
+  string origination_affiliation = 16;
+  int64 creation_time = 17;
+  int64 last_access_time = 18;
+  int64 valid_until = 19;
+  Status state = 20;
+  string comments = 21;
+  repeated string labeled_uri = 22;
+  string gpg_key = 23;
+  string time_zone = 24;
+  NSFDemographics nsf_demographics = 25;
+  CustomDashboard custom_dashboard = 26;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/workflow/data/workflow_data.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/workflow/data/workflow_data.proto
new file mode 100644
index 0000000000..20901babf7
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/workflow/data/workflow_data.proto
@@ -0,0 +1,95 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model;
+
+option java_package = "org.apache.airavata.model";
+option java_multiple_files = true;
+
+import "org/apache/airavata/model/application/io/application_io.proto";
+
+enum WorkflowState {
+  WORKFLOW_STATE_UNKNOWN = 0;
+  CREATED = 1;
+  STARTED = 2;
+  EXECUTING = 3;
+  COMPLETED = 4;
+  FAILED = 5;
+  CANCELLING = 6;
+  CANCELED = 7;
+}
+
+enum ComponentState {
+  COMPONENT_STATE_UNKNOWN = 0;
+  COMPONENT_CREATED = 1;
+  WAITING = 2;
+  READY = 3;
+  RUNNING = 4;
+  COMPONENT_COMPLETED = 5;
+  COMPONENT_FAILED = 6;
+  COMPONENT_CANCELED = 7;
+}
+
+message ComponentStatus {
+  ComponentState state = 1;
+  string reason = 2;
+  int64 timeof_state_change = 3;
+}
+
+message WorkflowStatus {
+  WorkflowState state = 1;
+  int64 time_of_state_change = 2;
+  string reason = 3;
+}
+
+message WorkflowModel {
+  string template_id = 1;
+  string name = 2;
+  string graph = 3;
+  string gateway_id = 4;
+  string created_user = 5;
+  bytes image = 6;
+  repeated org.apache.airavata.model.application.io.InputDataObjectType 
workflow_inputs = 7;
+  repeated org.apache.airavata.model.application.io.OutputDataObjectType 
workflow_outputs = 8;
+  int64 creation_time = 9;
+}
+
+message EdgeModel {
+  string edge_id = 1;
+  string name = 2;
+  ComponentStatus status = 3;
+  string description = 4;
+}
+
+message PortModel {
+  string port_id = 1;
+  string name = 2;
+  ComponentStatus status = 3;
+  string value = 4;
+  string description = 5;
+}
+
+message NodeModel {
+  string node_id = 1;
+  string name = 2;
+  string application_id = 3;
+  string application_name = 4;
+  ComponentStatus status = 5;
+  string description = 6;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/workflow/workflow.proto 
b/airavata-api/src/main/proto/org/apache/airavata/model/workflow/workflow.proto
new file mode 100644
index 0000000000..5dd3113d11
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/workflow/workflow.proto
@@ -0,0 +1,162 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.workflow;
+
+option java_package = "org.apache.airavata.model.workflow";
+option java_multiple_files = true;
+
+import "org/apache/airavata/model/commons/commons.proto";
+import "org/apache/airavata/model/application/io/application_io.proto";
+
+enum ApplicationState {
+  APPLICATION_STATE_UNKNOWN = 0;
+  APPLICATION_STATE_CREATED = 1;
+  APPLICATION_STATE_VALIDATED = 2;
+  APPLICATION_STATE_SCHEDULED = 3;
+  APPLICATION_STATE_LAUNCHED = 4;
+  APPLICATION_STATE_EXECUTING = 5;
+  APPLICATION_STATE_CANCELING = 6;
+  APPLICATION_STATE_CANCELED = 7;
+  APPLICATION_STATE_COMPLETED = 8;
+  APPLICATION_STATE_FAILED = 9;
+}
+
+message ApplicationStatus {
+  string id = 1;
+  ApplicationState state = 2;
+  string description = 3;
+  int64 updated_at = 4;
+}
+
+message WorkflowApplication {
+  string id = 1;
+  string process_id = 2;
+  string application_interface_id = 3;
+  string compute_resource_id = 4;
+  string queue_name = 5;
+  int32 node_count = 6;
+  int32 core_count = 7;
+  int32 wall_time_limit = 8;
+  int32 physical_memory = 9;
+  repeated ApplicationStatus statuses = 10;
+  repeated org.apache.airavata.model.commons.ErrorModel errors = 11;
+  int64 created_at = 12;
+  int64 updated_at = 13;
+}
+
+message DataBlock {
+  string id = 1;
+  string value = 2;
+  org.apache.airavata.model.application.io.DataType type = 3;
+  int64 created_at = 4;
+  int64 updated_at = 5;
+}
+
+enum ComponentType {
+  COMPONENT_TYPE_UNKNOWN = 0;
+  APPLICATION = 1;
+  HANDLER = 2;
+}
+
+message WorkflowConnection {
+  string id = 1;
+  DataBlock data_block = 2;
+  ComponentType from_type = 3;
+  string from_id = 4;
+  string from_output_name = 5;
+  ComponentType to_type = 6;
+  string to_id = 7;
+  string to_input_name = 8;
+  int64 created_at = 9;
+  int64 updated_at = 10;
+}
+
+enum HandlerType {
+  HANDLER_TYPE_UNKNOWN = 0;
+  FLOW_STARTER = 1;
+  FLOW_TERMINATOR = 2;
+}
+
+enum HandlerState {
+  HANDLER_STATE_UNKNOWN = 0;
+  HANDLER_STATE_CREATED = 1;
+  HANDLER_STATE_VALIDATED = 2;
+  HANDLER_STATE_SCHEDULED = 3;
+  HANDLER_STATE_LAUNCHED = 4;
+  HANDLER_STATE_EXECUTING = 5;
+  HANDLER_STATE_CANCELING = 6;
+  HANDLER_STATE_CANCELED = 7;
+  HANDLER_STATE_COMPLETED = 8;
+  HANDLER_STATE_FAILED = 9;
+}
+
+message HandlerStatus {
+  string id = 1;
+  HandlerState state = 2;
+  string description = 3;
+  int64 updated_at = 4;
+}
+
+message WorkflowHandler {
+  string id = 1;
+  HandlerType type = 2;
+  repeated org.apache.airavata.model.application.io.InputDataObjectType inputs 
= 3;
+  repeated org.apache.airavata.model.application.io.OutputDataObjectType 
outputs = 4;
+  repeated HandlerStatus statuses = 5;
+  repeated org.apache.airavata.model.commons.ErrorModel errors = 6;
+  int64 created_at = 7;
+  int64 updated_at = 8;
+}
+
+enum WorkflowState {
+  WORKFLOW_STATE_UNKNOWN = 0;
+  WORKFLOW_STATE_CREATED = 1;
+  WORKFLOW_STATE_VALIDATED = 2;
+  WORKFLOW_STATE_SCHEDULED = 3;
+  WORKFLOW_STATE_LAUNCHED = 4;
+  WORKFLOW_STATE_EXECUTING = 5;
+  WORKFLOW_STATE_PAUSING = 6;
+  WORKFLOW_STATE_PAUSED = 7;
+  WORKFLOW_STATE_RESTARTING = 8;
+  WORKFLOW_STATE_CANCELING = 9;
+  WORKFLOW_STATE_CANCELED = 10;
+  WORKFLOW_STATE_COMPLETED = 11;
+  WORKFLOW_STATE_FAILED = 12;
+}
+
+message WorkflowStatus {
+  string id = 1;
+  WorkflowState state = 2;
+  string description = 3;
+  int64 updated_at = 4;
+}
+
+message AiravataWorkflow {
+  string id = 1;
+  string experiment_id = 2;
+  string description = 3;
+  repeated WorkflowApplication applications = 4;
+  repeated WorkflowHandler handlers = 5;
+  repeated WorkflowConnection connections = 6;
+  repeated WorkflowStatus statuses = 7;
+  repeated org.apache.airavata.model.commons.ErrorModel errors = 8;
+  int64 created_at = 9;
+  int64 updated_at = 10;
+}
diff --git 
a/airavata-api/src/main/proto/org/apache/airavata/model/workspace/workspace.proto
 
b/airavata-api/src/main/proto/org/apache/airavata/model/workspace/workspace.proto
new file mode 100644
index 0000000000..bdb5cff764
--- /dev/null
+++ 
b/airavata-api/src/main/proto/org/apache/airavata/model/workspace/workspace.proto
@@ -0,0 +1,111 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+// This file describes the definitions of the Airavata Workspace. The workspace
+// is a container for all user data organized as Projects and Experiments 
within
+// them.
+
+syntax = "proto3";
+
+package org.apache.airavata.model.workspace;
+
+option java_package = "org.apache.airavata.model.workspace";
+option java_multiple_files = true;
+
+message Group {
+  string group_name = 1;
+  string description = 2;
+}
+
+message Project {
+  string project_id = 1;
+  string owner = 2;
+  string gateway_id = 3;
+  string name = 4;
+  string description = 5;
+  int64 creation_time = 6;
+  repeated string shared_users = 7;
+  repeated string shared_groups = 8;
+}
+
+message User {
+  string airavata_internal_user_id = 1;
+  string user_name = 2;
+  string gateway_id = 3;
+  string first_name = 4;
+  string last_name = 5;
+  string email = 6;
+}
+
+enum GatewayApprovalStatus {
+  GATEWAY_APPROVAL_STATUS_UNKNOWN = 0;
+  REQUESTED = 1;
+  APPROVED = 2;
+  ACTIVE = 3;
+  DEACTIVATED = 4;
+  CANCELLED = 5;
+  DENIED = 6;
+  CREATED = 7;
+  DEPLOYED = 8;
+}
+
+message Gateway {
+  string airavata_internal_gateway_id = 1;
+  string gateway_id = 2;
+  GatewayApprovalStatus gateway_approval_status = 3;
+  string gateway_name = 4;
+  string domain = 5;
+  string email_address = 6;
+  string gateway_acronym = 7;
+  string gateway_url = 8;
+  string gateway_public_abstract = 9;
+  string review_proposal_description = 10;
+  string gateway_admin_first_name = 11;
+  string gateway_admin_last_name = 12;
+  string gateway_admin_email = 13;
+  string identity_server_user_name = 14;
+  string identity_server_password_token = 15;
+  string declined_reason = 16;
+  string oauth_client_id = 17;
+  string oauth_client_secret = 18;
+  int64 request_creation_time = 19;
+  string requester_username = 20;
+}
+
+message GatewayUsageReportingCommand {
+  string gateway_id = 1;
+  string compute_resource_id = 2;
+  string command = 3;
+}
+
+enum NotificationPriority {
+  NOTIFICATION_PRIORITY_UNKNOWN = 0;
+  LOW = 1;
+  NORMAL = 2;
+  HIGH = 3;
+}
+
+message Notification {
+  string notification_id = 1;
+  string gateway_id = 2;
+  string title = 3;
+  string notification_message = 4;
+  int64 creation_time = 5;
+  int64 published_time = 6;
+  int64 expiration_time = 7;
+  NotificationPriority priority = 8;
+}

Reply via email to