# coding: utf-8
# Copyright (c) 2016, 2020, Oracle and/or its affiliates.  All rights reserved.
# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.

from .data_asset import DataAsset
from oci.util import formatted_flat_dict, NONE_SENTINEL, value_allowed_none_or_none_sentinel  # noqa: F401
from oci.decorators import init_model_state_from_kwargs


@init_model_state_from_kwargs
class DataAssetFromObjectStorageDetails(DataAsset):
    """
    The Object Storage data asset details.
    """

    def __init__(self, **kwargs):
        """
        Initializes a new DataAssetFromObjectStorageDetails object with values from keyword arguments. The default value of the :py:attr:`~oci.data_integration.models.DataAssetFromObjectStorageDetails.model_type` attribute
        of this class is ``ORACLE_OBJECT_STORAGE_DATA_ASSET`` and it should not be changed.
        The following keyword arguments are supported (corresponding to the getters/setters of this class):

        :param model_type:
            The value to assign to the model_type property of this DataAssetFromObjectStorageDetails.
            Allowed values for this property are: "ORACLE_DATA_ASSET", "ORACLE_OBJECT_STORAGE_DATA_ASSET", "ORACLE_ATP_DATA_ASSET", "ORACLE_ADWC_DATA_ASSET"
        :type model_type: str

        :param key:
            The value to assign to the key property of this DataAssetFromObjectStorageDetails.
        :type key: str

        :param model_version:
            The value to assign to the model_version property of this DataAssetFromObjectStorageDetails.
        :type model_version: str

        :param name:
            The value to assign to the name property of this DataAssetFromObjectStorageDetails.
        :type name: str

        :param description:
            The value to assign to the description property of this DataAssetFromObjectStorageDetails.
        :type description: str

        :param object_status:
            The value to assign to the object_status property of this DataAssetFromObjectStorageDetails.
        :type object_status: int

        :param identifier:
            The value to assign to the identifier property of this DataAssetFromObjectStorageDetails.
        :type identifier: str

        :param external_key:
            The value to assign to the external_key property of this DataAssetFromObjectStorageDetails.
        :type external_key: str

        :param asset_properties:
            The value to assign to the asset_properties property of this DataAssetFromObjectStorageDetails.
        :type asset_properties: dict(str, str)

        :param native_type_system:
            The value to assign to the native_type_system property of this DataAssetFromObjectStorageDetails.
        :type native_type_system: TypeSystem

        :param object_version:
            The value to assign to the object_version property of this DataAssetFromObjectStorageDetails.
        :type object_version: int

        :param parent_ref:
            The value to assign to the parent_ref property of this DataAssetFromObjectStorageDetails.
        :type parent_ref: ParentReference

        :param metadata:
            The value to assign to the metadata property of this DataAssetFromObjectStorageDetails.
        :type metadata: ObjectMetadata

        :param key_map:
            The value to assign to the key_map property of this DataAssetFromObjectStorageDetails.
        :type key_map: dict(str, str)

        :param url:
            The value to assign to the url property of this DataAssetFromObjectStorageDetails.
        :type url: str

        :param tenancy_id:
            The value to assign to the tenancy_id property of this DataAssetFromObjectStorageDetails.
        :type tenancy_id: str

        :param namespace:
            The value to assign to the namespace property of this DataAssetFromObjectStorageDetails.
        :type namespace: str

        :param default_connection:
            The value to assign to the default_connection property of this DataAssetFromObjectStorageDetails.
        :type default_connection: ConnectionFromObjectStorageDetails

        """
        self.swagger_types = {
            'model_type': 'str',
            'key': 'str',
            'model_version': 'str',
            'name': 'str',
            'description': 'str',
            'object_status': 'int',
            'identifier': 'str',
            'external_key': 'str',
            'asset_properties': 'dict(str, str)',
            'native_type_system': 'TypeSystem',
            'object_version': 'int',
            'parent_ref': 'ParentReference',
            'metadata': 'ObjectMetadata',
            'key_map': 'dict(str, str)',
            'url': 'str',
            'tenancy_id': 'str',
            'namespace': 'str',
            'default_connection': 'ConnectionFromObjectStorageDetails'
        }

        self.attribute_map = {
            'model_type': 'modelType',
            'key': 'key',
            'model_version': 'modelVersion',
            'name': 'name',
            'description': 'description',
            'object_status': 'objectStatus',
            'identifier': 'identifier',
            'external_key': 'externalKey',
            'asset_properties': 'assetProperties',
            'native_type_system': 'nativeTypeSystem',
            'object_version': 'objectVersion',
            'parent_ref': 'parentRef',
            'metadata': 'metadata',
            'key_map': 'keyMap',
            'url': 'url',
            'tenancy_id': 'tenancyId',
            'namespace': 'namespace',
            'default_connection': 'defaultConnection'
        }

        self._model_type = None
        self._key = None
        self._model_version = None
        self._name = None
        self._description = None
        self._object_status = None
        self._identifier = None
        self._external_key = None
        self._asset_properties = None
        self._native_type_system = None
        self._object_version = None
        self._parent_ref = None
        self._metadata = None
        self._key_map = None
        self._url = None
        self._tenancy_id = None
        self._namespace = None
        self._default_connection = None
        self._model_type = 'ORACLE_OBJECT_STORAGE_DATA_ASSET'

    @property
    def url(self):
        """
        Gets the url of this DataAssetFromObjectStorageDetails.
        url


        :return: The url of this DataAssetFromObjectStorageDetails.
        :rtype: str
        """
        return self._url

    @url.setter
    def url(self, url):
        """
        Sets the url of this DataAssetFromObjectStorageDetails.
        url


        :param url: The url of this DataAssetFromObjectStorageDetails.
        :type: str
        """
        self._url = url

    @property
    def tenancy_id(self):
        """
        Gets the tenancy_id of this DataAssetFromObjectStorageDetails.
        The OCI tenancy OCID.


        :return: The tenancy_id of this DataAssetFromObjectStorageDetails.
        :rtype: str
        """
        return self._tenancy_id

    @tenancy_id.setter
    def tenancy_id(self, tenancy_id):
        """
        Sets the tenancy_id of this DataAssetFromObjectStorageDetails.
        The OCI tenancy OCID.


        :param tenancy_id: The tenancy_id of this DataAssetFromObjectStorageDetails.
        :type: str
        """
        self._tenancy_id = tenancy_id

    @property
    def namespace(self):
        """
        Gets the namespace of this DataAssetFromObjectStorageDetails.
        Free form text without any restriction on permitted characters. Name can have letters, numbers, and special characters. The value can be edited by the user and it is restricted to 1000 characters


        :return: The namespace of this DataAssetFromObjectStorageDetails.
        :rtype: str
        """
        return self._namespace

    @namespace.setter
    def namespace(self, namespace):
        """
        Sets the namespace of this DataAssetFromObjectStorageDetails.
        Free form text without any restriction on permitted characters. Name can have letters, numbers, and special characters. The value can be edited by the user and it is restricted to 1000 characters


        :param namespace: The namespace of this DataAssetFromObjectStorageDetails.
        :type: str
        """
        self._namespace = namespace

    @property
    def default_connection(self):
        """
        Gets the default_connection of this DataAssetFromObjectStorageDetails.

        :return: The default_connection of this DataAssetFromObjectStorageDetails.
        :rtype: ConnectionFromObjectStorageDetails
        """
        return self._default_connection

    @default_connection.setter
    def default_connection(self, default_connection):
        """
        Sets the default_connection of this DataAssetFromObjectStorageDetails.

        :param default_connection: The default_connection of this DataAssetFromObjectStorageDetails.
        :type: ConnectionFromObjectStorageDetails
        """
        self._default_connection = default_connection

    def __repr__(self):
        return formatted_flat_dict(self)

    def __eq__(self, other):
        if other is None:
            return False

        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not self == other
