ATLAS-4226: Add new model types to support Google Cloud Platform

Signed-off-by: Sarath Subramanian <sarath@apache.org>
diff --git a/addons/models/3000-Cloud/3060-gcp_typedefs.json b/addons/models/3000-Cloud/3060-gcp_typedefs.json
new file mode 100644
index 0000000..fbaed79
--- /dev/null
+++ b/addons/models/3000-Cloud/3060-gcp_typedefs.json
@@ -0,0 +1,232 @@
+{
+  "enumDefs": [],
+  "structDefs": [],
+  "classificationDefs": [],
+  "entityDefs": [
+    {
+      "name":        "gcp_storage_parent",
+      "description": "Atlas entity-type representing parent types (bucket, vitual directory) that can hold other objects in Google Cloud Storage",
+      "superTypes":  [
+      ],
+      "serviceType": "gcp",
+      "typeVersion": "1.0",
+      "attributeDefs": [
+      ]
+    },
+    {
+      "name":        "gcp_storage_child",
+      "description": "Atlas entity-type representing child types (virtual directory, blob) in Google Cloud Storage",
+      "superTypes":  [
+      ],
+      "serviceType": "gcp",
+      "typeVersion": "1.0",
+      "attributeDefs": [
+      ]
+    },
+    {
+      "name":        "gcp_storage_base",
+      "description": "Atlas Type representing base Type for all Google Cloud Storage Data Types",
+      "superTypes":  [
+        "DataSet"
+      ],
+      "serviceType": "gcp",
+      "typeVersion": "1.0",
+      "attributeDefs": [
+        {
+          "name":        "creationTime",
+          "typeName":    "date",
+          "cardinality": "SINGLE",
+          "isIndexable": true,
+          "isOptional":  true,
+          "isUnique":    false
+        },
+        {
+          "name":        "lastModifiedTime",
+          "typeName":    "date",
+          "cardinality": "SINGLE",
+          "isIndexable": true,
+          "isOptional":  true,
+          "isUnique":    false
+        },
+        {
+          "name":        "storageClass",
+          "typeName":    "string",
+          "cardinality": "SINGLE",
+          "isIndexable": true,
+          "isOptional":  true,
+          "isUnique":    false
+        },
+        {
+          "name":        "encryption",
+          "typeName":    "string",
+          "cardinality": "SINGLE",
+          "isIndexable": false,
+          "isOptional":  true,
+          "isUnique":    false
+        },
+        {
+          "name":        "publicAccess",
+          "typeName":    "string",
+          "cardinality": "SINGLE",
+          "isIndexable": true,
+          "isOptional":  true,
+          "isUnique":    false
+        }
+      ]
+    },
+    {
+      "name":        "gcp_storage_bucket",
+      "description": "Atlas Type representing a Bucket in Google Cloud Storage",
+      "superTypes":  [
+        "gcp_storage_parent",
+        "gcp_storage_base"
+      ],
+      "serviceType": "gcp",
+      "typeVersion": "1.0",
+      "attributeDefs": [
+        {
+          "name":        "location",
+          "typeName":    "string",
+          "cardinality": "SINGLE",
+          "isIndexable": true,
+          "isOptional":  true,
+          "isUnique":    false
+        },
+        {
+          "name":        "locationType",
+          "typeName":    "string",
+          "cardinality": "SINGLE",
+          "isIndexable": true,
+          "isOptional":  true,
+          "isUnique":    false
+        },
+        {
+          "name":        "accessControl",
+          "typeName":    "string",
+          "cardinality": "SINGLE",
+          "isIndexable": false,
+          "isOptional":  true,
+          "isUnique":    false
+        },
+        {
+          "name":        "lifecycleRules",
+          "typeName":    "string",
+          "cardinality": "SINGLE",
+          "isIndexable": false,
+          "isOptional":  true,
+          "isUnique":    false
+        },
+        {
+          "name":        "labels",
+          "typeName":    "string",
+          "cardinality": "SINGLE",
+          "isIndexable": false,
+          "isOptional":  true,
+          "isUnique":    false
+        },
+        {
+          "name":        "retentionPolicy",
+          "typeName":    "string",
+          "cardinality": "SINGLE",
+          "isIndexable": false,
+          "isOptional":  true,
+          "isUnique":    false
+        },
+        {
+          "name":        "requesterPays",
+          "typeName":    "boolean",
+          "cardinality": "SINGLE",
+          "isIndexable": false,
+          "isOptional":  true,
+          "isUnique":    false
+        }
+      ]
+    },
+    {
+      "name":        "gcp_storage_object",
+      "description": "Atlas Type representing an Object in Google Cloud Storage",
+      "superTypes":  [
+        "gcp_storage_child",
+        "gcp_storage_base"
+      ],
+      "serviceType": "gcp",
+      "typeVersion": "1.0",
+      "attributeDefs": [
+        {
+          "name":        "size",
+          "typeName":    "long",
+          "cardinality": "SINGLE",
+          "isIndexable": false,
+          "isOptional":  true,
+          "isUnique":    false
+        },
+        {
+          "name":        "type",
+          "typeName":    "string",
+          "cardinality": "SINGLE",
+          "isIndexable": true,
+          "isOptional":  true,
+          "isUnique":    false
+        },
+        {
+          "name":        "retentionExpirationDate",
+          "typeName":    "date",
+          "cardinality": "SINGLE",
+          "isIndexable": true,
+          "isOptional":  true,
+          "isUnique":    false
+        },
+        {
+          "name":        "holds",
+          "typeName":    "string",
+          "cardinality": "SINGLE",
+          "isIndexable": false,
+          "isOptional":  true,
+          "isUnique":    false
+        }
+      ]
+    },
+    {
+      "name":        "gcp_storage_virtual_directory",
+      "description": "Atlas Type representing a virtual directory in Google Cloud Storage",
+      "superTypes":  [
+        "gcp_storage_object",
+        "gcp_storage_parent",
+        "Path"
+      ],
+      "serviceType": "gcp",
+      "typeVersion": "1.0",
+      "attributeDefs": [
+        {
+          "name":        "objectPrefix",
+          "typeName":    "string",
+          "cardinality": "SINGLE",
+          "isIndexable": true,
+          "isOptional":  true,
+          "isUnique":    false
+        }
+      ]
+    }
+  ],
+  "relationshipDefs": [
+    {
+      "name":                 "gcp_storage_parent_children",
+      "serviceType":          "gcp",
+      "typeVersion":          "1.0",
+      "relationshipCategory": "COMPOSITION",
+      "endDef1": {
+        "type":               "gcp_storage_parent",
+        "name":               "children",
+        "isContainer":        true,
+        "cardinality":        "SET"
+      },
+      "endDef2": {
+        "type":               "gcp_storage_child",
+        "name":               "parent",
+        "isContainer":        false,
+        "cardinality":        "SINGLE"
+      },
+      "propagateTags": "NONE"
+    }
+  ]
+}