# coding: utf-8

"""
    Intersight REST API

    This is Intersight REST API 

    OpenAPI spec version: 1.0.9-255
    
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""


from pprint import pformat
from six import iteritems
import re


class AssetDeviceRegistration(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """


    """
    Attributes:
      swagger_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    swagger_types = {
        'account_moid': 'str',
        'ancestors': 'list[MoBaseMoRef]',
        'create_time': 'datetime',
        'mod_time': 'datetime',
        'moid': 'str',
        'object_type': 'str',
        'owners': 'list[str]',
        'parent': 'MoBaseMoRef',
        'tags': 'list[MoTag]',
        'version_context': 'MoVersionContext',
        'api_version': 'int',
        'app_partition_number': 'int',
        'connection_id': 'str',
        'connection_reason': 'str',
        'connection_status': 'str',
        'connection_status_last_change_time': 'datetime',
        'connector_version': 'str',
        'device_external_ip_address': 'str',
        'proxy_app': 'str',
        'access_key_id': 'str',
        'account': 'IamAccountRef',
        'claimed_by_user': 'IamUserRef',
        'claimed_by_user_name': 'str',
        'claimed_time': 'datetime',
        'cluster_members': 'list[AssetClusterMemberRef]',
        'device_claim': 'AssetDeviceClaimRef',
        'device_configuration': 'AssetDeviceConfigurationRef',
        'device_hostname': 'list[str]',
        'device_ip_address': 'list[str]',
        'domain_group': 'IamDomainGroupRef',
        'execution_mode': 'str',
        'pid': 'list[str]',
        'platform_type': 'str',
        'public_access_key': 'str',
        'read_only': 'bool',
        'security_token': 'AssetSecurityTokenRef',
        'serial': 'list[str]',
        'vendor': 'str'
    }

    attribute_map = {
        'account_moid': 'AccountMoid',
        'ancestors': 'Ancestors',
        'create_time': 'CreateTime',
        'mod_time': 'ModTime',
        'moid': 'Moid',
        'object_type': 'ObjectType',
        'owners': 'Owners',
        'parent': 'Parent',
        'tags': 'Tags',
        'version_context': 'VersionContext',
        'api_version': 'ApiVersion',
        'app_partition_number': 'AppPartitionNumber',
        'connection_id': 'ConnectionId',
        'connection_reason': 'ConnectionReason',
        'connection_status': 'ConnectionStatus',
        'connection_status_last_change_time': 'ConnectionStatusLastChangeTime',
        'connector_version': 'ConnectorVersion',
        'device_external_ip_address': 'DeviceExternalIpAddress',
        'proxy_app': 'ProxyApp',
        'access_key_id': 'AccessKeyId',
        'account': 'Account',
        'claimed_by_user': 'ClaimedByUser',
        'claimed_by_user_name': 'ClaimedByUserName',
        'claimed_time': 'ClaimedTime',
        'cluster_members': 'ClusterMembers',
        'device_claim': 'DeviceClaim',
        'device_configuration': 'DeviceConfiguration',
        'device_hostname': 'DeviceHostname',
        'device_ip_address': 'DeviceIpAddress',
        'domain_group': 'DomainGroup',
        'execution_mode': 'ExecutionMode',
        'pid': 'Pid',
        'platform_type': 'PlatformType',
        'public_access_key': 'PublicAccessKey',
        'read_only': 'ReadOnly',
        'security_token': 'SecurityToken',
        'serial': 'Serial',
        'vendor': 'Vendor'
    }

    def __init__(self, account_moid=None, ancestors=None, create_time=None, mod_time=None, moid=None, object_type=None, owners=None, parent=None, tags=None, version_context=None, api_version=None, app_partition_number=None, connection_id=None, connection_reason=None, connection_status='null', connection_status_last_change_time=None, connector_version=None, device_external_ip_address=None, proxy_app=None, access_key_id=None, account=None, claimed_by_user=None, claimed_by_user_name=None, claimed_time=None, cluster_members=None, device_claim=None, device_configuration=None, device_hostname=None, device_ip_address=None, domain_group=None, execution_mode='null', pid=None, platform_type='null', public_access_key=None, read_only=None, security_token=None, serial=None, vendor=None):
        """
        AssetDeviceRegistration - a model defined in Swagger
        """

        self._account_moid = None
        self._ancestors = None
        self._create_time = None
        self._mod_time = None
        self._moid = None
        self._object_type = None
        self._owners = None
        self._parent = None
        self._tags = None
        self._version_context = None
        self._api_version = None
        self._app_partition_number = None
        self._connection_id = None
        self._connection_reason = None
        self._connection_status = None
        self._connection_status_last_change_time = None
        self._connector_version = None
        self._device_external_ip_address = None
        self._proxy_app = None
        self._access_key_id = None
        self._account = None
        self._claimed_by_user = None
        self._claimed_by_user_name = None
        self._claimed_time = None
        self._cluster_members = None
        self._device_claim = None
        self._device_configuration = None
        self._device_hostname = None
        self._device_ip_address = None
        self._domain_group = None
        self._execution_mode = None
        self._pid = None
        self._platform_type = None
        self._public_access_key = None
        self._read_only = None
        self._security_token = None
        self._serial = None
        self._vendor = None

        if account_moid is not None:
          self.account_moid = account_moid
        if ancestors is not None:
          self.ancestors = ancestors
        if create_time is not None:
          self.create_time = create_time
        if mod_time is not None:
          self.mod_time = mod_time
        if moid is not None:
          self.moid = moid
        if object_type is not None:
          self.object_type = object_type
        if owners is not None:
          self.owners = owners
        if parent is not None:
          self.parent = parent
        if tags is not None:
          self.tags = tags
        if version_context is not None:
          self.version_context = version_context
        if api_version is not None:
          self.api_version = api_version
        if app_partition_number is not None:
          self.app_partition_number = app_partition_number
        if connection_id is not None:
          self.connection_id = connection_id
        if connection_reason is not None:
          self.connection_reason = connection_reason
        if connection_status is not None:
          self.connection_status = connection_status
        if connection_status_last_change_time is not None:
          self.connection_status_last_change_time = connection_status_last_change_time
        if connector_version is not None:
          self.connector_version = connector_version
        if device_external_ip_address is not None:
          self.device_external_ip_address = device_external_ip_address
        if proxy_app is not None:
          self.proxy_app = proxy_app
        if access_key_id is not None:
          self.access_key_id = access_key_id
        if account is not None:
          self.account = account
        if claimed_by_user is not None:
          self.claimed_by_user = claimed_by_user
        if claimed_by_user_name is not None:
          self.claimed_by_user_name = claimed_by_user_name
        if claimed_time is not None:
          self.claimed_time = claimed_time
        if cluster_members is not None:
          self.cluster_members = cluster_members
        if device_claim is not None:
          self.device_claim = device_claim
        if device_configuration is not None:
          self.device_configuration = device_configuration
        if device_hostname is not None:
          self.device_hostname = device_hostname
        if device_ip_address is not None:
          self.device_ip_address = device_ip_address
        if domain_group is not None:
          self.domain_group = domain_group
        if execution_mode is not None:
          self.execution_mode = execution_mode
        if pid is not None:
          self.pid = pid
        if platform_type is not None:
          self.platform_type = platform_type
        if public_access_key is not None:
          self.public_access_key = public_access_key
        if read_only is not None:
          self.read_only = read_only
        if security_token is not None:
          self.security_token = security_token
        if serial is not None:
          self.serial = serial
        if vendor is not None:
          self.vendor = vendor

    @property
    def account_moid(self):
        """
        Gets the account_moid of this AssetDeviceRegistration.
        The Account ID for this managed object.  

        :return: The account_moid of this AssetDeviceRegistration.
        :rtype: str
        """
        return self._account_moid

    @account_moid.setter
    def account_moid(self, account_moid):
        """
        Sets the account_moid of this AssetDeviceRegistration.
        The Account ID for this managed object.  

        :param account_moid: The account_moid of this AssetDeviceRegistration.
        :type: str
        """

        self._account_moid = account_moid

    @property
    def ancestors(self):
        """
        Gets the ancestors of this AssetDeviceRegistration.
        Ancestors is an array containing the MO references of the ancestors in the object containment hierarchy. 

        :return: The ancestors of this AssetDeviceRegistration.
        :rtype: list[MoBaseMoRef]
        """
        return self._ancestors

    @ancestors.setter
    def ancestors(self, ancestors):
        """
        Sets the ancestors of this AssetDeviceRegistration.
        Ancestors is an array containing the MO references of the ancestors in the object containment hierarchy. 

        :param ancestors: The ancestors of this AssetDeviceRegistration.
        :type: list[MoBaseMoRef]
        """

        self._ancestors = ancestors

    @property
    def create_time(self):
        """
        Gets the create_time of this AssetDeviceRegistration.
        The time when this managed object was created.  

        :return: The create_time of this AssetDeviceRegistration.
        :rtype: datetime
        """
        return self._create_time

    @create_time.setter
    def create_time(self, create_time):
        """
        Sets the create_time of this AssetDeviceRegistration.
        The time when this managed object was created.  

        :param create_time: The create_time of this AssetDeviceRegistration.
        :type: datetime
        """

        self._create_time = create_time

    @property
    def mod_time(self):
        """
        Gets the mod_time of this AssetDeviceRegistration.
        The time when this managed object was last modified.  

        :return: The mod_time of this AssetDeviceRegistration.
        :rtype: datetime
        """
        return self._mod_time

    @mod_time.setter
    def mod_time(self, mod_time):
        """
        Sets the mod_time of this AssetDeviceRegistration.
        The time when this managed object was last modified.  

        :param mod_time: The mod_time of this AssetDeviceRegistration.
        :type: datetime
        """

        self._mod_time = mod_time

    @property
    def moid(self):
        """
        Gets the moid of this AssetDeviceRegistration.
        A unique identifier of this Managed Object instance.  

        :return: The moid of this AssetDeviceRegistration.
        :rtype: str
        """
        return self._moid

    @moid.setter
    def moid(self, moid):
        """
        Sets the moid of this AssetDeviceRegistration.
        A unique identifier of this Managed Object instance.  

        :param moid: The moid of this AssetDeviceRegistration.
        :type: str
        """

        self._moid = moid

    @property
    def object_type(self):
        """
        Gets the object_type of this AssetDeviceRegistration.
        The fully-qualified type of this managed object, e.g. the class name.  

        :return: The object_type of this AssetDeviceRegistration.
        :rtype: str
        """
        return self._object_type

    @object_type.setter
    def object_type(self, object_type):
        """
        Sets the object_type of this AssetDeviceRegistration.
        The fully-qualified type of this managed object, e.g. the class name.  

        :param object_type: The object_type of this AssetDeviceRegistration.
        :type: str
        """

        self._object_type = object_type

    @property
    def owners(self):
        """
        Gets the owners of this AssetDeviceRegistration.
        An array of owners which represent effective ownership of this object.   

        :return: The owners of this AssetDeviceRegistration.
        :rtype: list[str]
        """
        return self._owners

    @owners.setter
    def owners(self, owners):
        """
        Sets the owners of this AssetDeviceRegistration.
        An array of owners which represent effective ownership of this object.   

        :param owners: The owners of this AssetDeviceRegistration.
        :type: list[str]
        """

        self._owners = owners

    @property
    def parent(self):
        """
        Gets the parent of this AssetDeviceRegistration.
        The direct ancestor of this managed object in the containment hierarchy. 

        :return: The parent of this AssetDeviceRegistration.
        :rtype: MoBaseMoRef
        """
        return self._parent

    @parent.setter
    def parent(self, parent):
        """
        Sets the parent of this AssetDeviceRegistration.
        The direct ancestor of this managed object in the containment hierarchy. 

        :param parent: The parent of this AssetDeviceRegistration.
        :type: MoBaseMoRef
        """

        self._parent = parent

    @property
    def tags(self):
        """
        Gets the tags of this AssetDeviceRegistration.
        An array of tags, which allow to add key, value meta-data to managed objects.  

        :return: The tags of this AssetDeviceRegistration.
        :rtype: list[MoTag]
        """
        return self._tags

    @tags.setter
    def tags(self, tags):
        """
        Sets the tags of this AssetDeviceRegistration.
        An array of tags, which allow to add key, value meta-data to managed objects.  

        :param tags: The tags of this AssetDeviceRegistration.
        :type: list[MoTag]
        """

        self._tags = tags

    @property
    def version_context(self):
        """
        Gets the version_context of this AssetDeviceRegistration.
        The versioning info for this managed object   

        :return: The version_context of this AssetDeviceRegistration.
        :rtype: MoVersionContext
        """
        return self._version_context

    @version_context.setter
    def version_context(self, version_context):
        """
        Sets the version_context of this AssetDeviceRegistration.
        The versioning info for this managed object   

        :param version_context: The version_context of this AssetDeviceRegistration.
        :type: MoVersionContext
        """

        self._version_context = version_context

    @property
    def api_version(self):
        """
        Gets the api_version of this AssetDeviceRegistration.
        The version of the connector api. Describes the capability of the connector's framework. If the version is lower than the current minimum supported version defined in the service managing the connection, the device connector will be connected with limited capabilities until the device connector is upgraded to a fully supported version. For example if a device connector that was released without delta inventory capabilities registers and connects to Intersight, inventory collection may be disabled until it has been upgraded. 

        :return: The api_version of this AssetDeviceRegistration.
        :rtype: int
        """
        return self._api_version

    @api_version.setter
    def api_version(self, api_version):
        """
        Sets the api_version of this AssetDeviceRegistration.
        The version of the connector api. Describes the capability of the connector's framework. If the version is lower than the current minimum supported version defined in the service managing the connection, the device connector will be connected with limited capabilities until the device connector is upgraded to a fully supported version. For example if a device connector that was released without delta inventory capabilities registers and connects to Intersight, inventory collection may be disabled until it has been upgraded. 

        :param api_version: The api_version of this AssetDeviceRegistration.
        :type: int
        """

        self._api_version = api_version

    @property
    def app_partition_number(self):
        """
        Gets the app_partition_number of this AssetDeviceRegistration.
        The partition number corresponding to the instance of the Proxy App which is managing the web-socket to the device connector.  

        :return: The app_partition_number of this AssetDeviceRegistration.
        :rtype: int
        """
        return self._app_partition_number

    @app_partition_number.setter
    def app_partition_number(self, app_partition_number):
        """
        Sets the app_partition_number of this AssetDeviceRegistration.
        The partition number corresponding to the instance of the Proxy App which is managing the web-socket to the device connector.  

        :param app_partition_number: The app_partition_number of this AssetDeviceRegistration.
        :type: int
        """

        self._app_partition_number = app_partition_number

    @property
    def connection_id(self):
        """
        Gets the connection_id of this AssetDeviceRegistration.
        The unique identifier for the current connection. The identifier persists across network connectivity loss and is reset on device connector process restart or platform administrator toggle of the Intersight connectivity. The connectionId can be used by services that need to interact with stateful plugins running in the device connector process. For example if a service schedules an inventory in a devices job scheduler plugin at registration it is not necessary to reschedule the job if the device loses network connectivity due to an Intersight service upgrade or intermittent network issues in the devices datacenter.  

        :return: The connection_id of this AssetDeviceRegistration.
        :rtype: str
        """
        return self._connection_id

    @connection_id.setter
    def connection_id(self, connection_id):
        """
        Sets the connection_id of this AssetDeviceRegistration.
        The unique identifier for the current connection. The identifier persists across network connectivity loss and is reset on device connector process restart or platform administrator toggle of the Intersight connectivity. The connectionId can be used by services that need to interact with stateful plugins running in the device connector process. For example if a service schedules an inventory in a devices job scheduler plugin at registration it is not necessary to reschedule the job if the device loses network connectivity due to an Intersight service upgrade or intermittent network issues in the devices datacenter.  

        :param connection_id: The connection_id of this AssetDeviceRegistration.
        :type: str
        """

        self._connection_id = connection_id

    @property
    def connection_reason(self):
        """
        Gets the connection_reason of this AssetDeviceRegistration.
        If 'connectionStatus' is not equal to Connected, connectionReason provides further details about why the device is not connected with the cloud.  

        :return: The connection_reason of this AssetDeviceRegistration.
        :rtype: str
        """
        return self._connection_reason

    @connection_reason.setter
    def connection_reason(self, connection_reason):
        """
        Sets the connection_reason of this AssetDeviceRegistration.
        If 'connectionStatus' is not equal to Connected, connectionReason provides further details about why the device is not connected with the cloud.  

        :param connection_reason: The connection_reason of this AssetDeviceRegistration.
        :type: str
        """

        self._connection_reason = connection_reason

    @property
    def connection_status(self):
        """
        Gets the connection_status of this AssetDeviceRegistration.
        The status of the persistent connection between the device connector and Intersight.  

        :return: The connection_status of this AssetDeviceRegistration.
        :rtype: str
        """
        return self._connection_status

    @connection_status.setter
    def connection_status(self, connection_status):
        """
        Sets the connection_status of this AssetDeviceRegistration.
        The status of the persistent connection between the device connector and Intersight.  

        :param connection_status: The connection_status of this AssetDeviceRegistration.
        :type: str
        """
        allowed_values = ["", "Connected", "NotConnected"]
        if connection_status not in allowed_values:
            raise ValueError(
                "Invalid value for `connection_status` ({0}), must be one of {1}"
                .format(connection_status, allowed_values)
            )

        self._connection_status = connection_status

    @property
    def connection_status_last_change_time(self):
        """
        Gets the connection_status_last_change_time of this AssetDeviceRegistration.
        The last time at which the 'connectionStatus' property value changed. If connectionStatus is Connected, this time can be interpreted as the starting time since which a persistent connection has been maintained between the cloud and device connector. If connectionStatus is NotConnected, this time can be interpreted as the last time the device connector was connected with the cloud.  

        :return: The connection_status_last_change_time of this AssetDeviceRegistration.
        :rtype: datetime
        """
        return self._connection_status_last_change_time

    @connection_status_last_change_time.setter
    def connection_status_last_change_time(self, connection_status_last_change_time):
        """
        Sets the connection_status_last_change_time of this AssetDeviceRegistration.
        The last time at which the 'connectionStatus' property value changed. If connectionStatus is Connected, this time can be interpreted as the starting time since which a persistent connection has been maintained between the cloud and device connector. If connectionStatus is NotConnected, this time can be interpreted as the last time the device connector was connected with the cloud.  

        :param connection_status_last_change_time: The connection_status_last_change_time of this AssetDeviceRegistration.
        :type: datetime
        """

        self._connection_status_last_change_time = connection_status_last_change_time

    @property
    def connector_version(self):
        """
        Gets the connector_version of this AssetDeviceRegistration.
        The version of the device connector running on the managed device.  

        :return: The connector_version of this AssetDeviceRegistration.
        :rtype: str
        """
        return self._connector_version

    @connector_version.setter
    def connector_version(self, connector_version):
        """
        Sets the connector_version of this AssetDeviceRegistration.
        The version of the device connector running on the managed device.  

        :param connector_version: The connector_version of this AssetDeviceRegistration.
        :type: str
        """

        self._connector_version = connector_version

    @property
    def device_external_ip_address(self):
        """
        Gets the device_external_ip_address of this AssetDeviceRegistration.
        The IP Address of the managed device as seen from the cloud at the time of registration. Eg this could be the IP of the managed device's interface which has a route to the internet or a NAT IP when the managed device is deployed in a private network.  

        :return: The device_external_ip_address of this AssetDeviceRegistration.
        :rtype: str
        """
        return self._device_external_ip_address

    @device_external_ip_address.setter
    def device_external_ip_address(self, device_external_ip_address):
        """
        Sets the device_external_ip_address of this AssetDeviceRegistration.
        The IP Address of the managed device as seen from the cloud at the time of registration. Eg this could be the IP of the managed device's interface which has a route to the internet or a NAT IP when the managed device is deployed in a private network.  

        :param device_external_ip_address: The device_external_ip_address of this AssetDeviceRegistration.
        :type: str
        """

        self._device_external_ip_address = device_external_ip_address

    @property
    def proxy_app(self):
        """
        Gets the proxy_app of this AssetDeviceRegistration.
        The name of the app which will proxy the messages to the device connector.   

        :return: The proxy_app of this AssetDeviceRegistration.
        :rtype: str
        """
        return self._proxy_app

    @proxy_app.setter
    def proxy_app(self, proxy_app):
        """
        Sets the proxy_app of this AssetDeviceRegistration.
        The name of the app which will proxy the messages to the device connector.   

        :param proxy_app: The proxy_app of this AssetDeviceRegistration.
        :type: str
        """

        self._proxy_app = proxy_app

    @property
    def access_key_id(self):
        """
        Gets the access_key_id of this AssetDeviceRegistration.
        An identifier for the credential used by the device connector to authenticate with Starship.  

        :return: The access_key_id of this AssetDeviceRegistration.
        :rtype: str
        """
        return self._access_key_id

    @access_key_id.setter
    def access_key_id(self, access_key_id):
        """
        Sets the access_key_id of this AssetDeviceRegistration.
        An identifier for the credential used by the device connector to authenticate with Starship.  

        :param access_key_id: The access_key_id of this AssetDeviceRegistration.
        :type: str
        """

        self._access_key_id = access_key_id

    @property
    def account(self):
        """
        Gets the account of this AssetDeviceRegistration.
        The account to which the device has been claimed. 

        :return: The account of this AssetDeviceRegistration.
        :rtype: IamAccountRef
        """
        return self._account

    @account.setter
    def account(self, account):
        """
        Sets the account of this AssetDeviceRegistration.
        The account to which the device has been claimed. 

        :param account: The account of this AssetDeviceRegistration.
        :type: IamAccountRef
        """

        self._account = account

    @property
    def claimed_by_user(self):
        """
        Gets the claimed_by_user of this AssetDeviceRegistration.
        The user who claimed the device for the account. 

        :return: The claimed_by_user of this AssetDeviceRegistration.
        :rtype: IamUserRef
        """
        return self._claimed_by_user

    @claimed_by_user.setter
    def claimed_by_user(self, claimed_by_user):
        """
        Sets the claimed_by_user of this AssetDeviceRegistration.
        The user who claimed the device for the account. 

        :param claimed_by_user: The claimed_by_user of this AssetDeviceRegistration.
        :type: IamUserRef
        """

        self._claimed_by_user = claimed_by_user

    @property
    def claimed_by_user_name(self):
        """
        Gets the claimed_by_user_name of this AssetDeviceRegistration.
        The name of the user who claimed the device for the account.  

        :return: The claimed_by_user_name of this AssetDeviceRegistration.
        :rtype: str
        """
        return self._claimed_by_user_name

    @claimed_by_user_name.setter
    def claimed_by_user_name(self, claimed_by_user_name):
        """
        Sets the claimed_by_user_name of this AssetDeviceRegistration.
        The name of the user who claimed the device for the account.  

        :param claimed_by_user_name: The claimed_by_user_name of this AssetDeviceRegistration.
        :type: str
        """

        self._claimed_by_user_name = claimed_by_user_name

    @property
    def claimed_time(self):
        """
        Gets the claimed_time of this AssetDeviceRegistration.
        The date and time at which the device was claimed to this account.  

        :return: The claimed_time of this AssetDeviceRegistration.
        :rtype: datetime
        """
        return self._claimed_time

    @claimed_time.setter
    def claimed_time(self, claimed_time):
        """
        Sets the claimed_time of this AssetDeviceRegistration.
        The date and time at which the device was claimed to this account.  

        :param claimed_time: The claimed_time of this AssetDeviceRegistration.
        :type: datetime
        """

        self._claimed_time = claimed_time

    @property
    def cluster_members(self):
        """
        Gets the cluster_members of this AssetDeviceRegistration.

        :return: The cluster_members of this AssetDeviceRegistration.
        :rtype: list[AssetClusterMemberRef]
        """
        return self._cluster_members

    @cluster_members.setter
    def cluster_members(self, cluster_members):
        """
        Sets the cluster_members of this AssetDeviceRegistration.

        :param cluster_members: The cluster_members of this AssetDeviceRegistration.
        :type: list[AssetClusterMemberRef]
        """

        self._cluster_members = cluster_members

    @property
    def device_claim(self):
        """
        Gets the device_claim of this AssetDeviceRegistration.
        The user who claimed the device for the account. 

        :return: The device_claim of this AssetDeviceRegistration.
        :rtype: AssetDeviceClaimRef
        """
        return self._device_claim

    @device_claim.setter
    def device_claim(self, device_claim):
        """
        Sets the device_claim of this AssetDeviceRegistration.
        The user who claimed the device for the account. 

        :param device_claim: The device_claim of this AssetDeviceRegistration.
        :type: AssetDeviceClaimRef
        """

        self._device_claim = device_claim

    @property
    def device_configuration(self):
        """
        Gets the device_configuration of this AssetDeviceRegistration.

        :return: The device_configuration of this AssetDeviceRegistration.
        :rtype: AssetDeviceConfigurationRef
        """
        return self._device_configuration

    @device_configuration.setter
    def device_configuration(self, device_configuration):
        """
        Sets the device_configuration of this AssetDeviceRegistration.

        :param device_configuration: The device_configuration of this AssetDeviceRegistration.
        :type: AssetDeviceConfigurationRef
        """

        self._device_configuration = device_configuration

    @property
    def device_hostname(self):
        """
        Gets the device_hostname of this AssetDeviceRegistration.
        The hostnames of the managed device. There can be multiple hostnames depending on the number of elements managed (ie HA clusters).  

        :return: The device_hostname of this AssetDeviceRegistration.
        :rtype: list[str]
        """
        return self._device_hostname

    @device_hostname.setter
    def device_hostname(self, device_hostname):
        """
        Sets the device_hostname of this AssetDeviceRegistration.
        The hostnames of the managed device. There can be multiple hostnames depending on the number of elements managed (ie HA clusters).  

        :param device_hostname: The device_hostname of this AssetDeviceRegistration.
        :type: list[str]
        """

        self._device_hostname = device_hostname

    @property
    def device_ip_address(self):
        """
        Gets the device_ip_address of this AssetDeviceRegistration.
        The IP Addresses of the managed device. There can be multiple management IPs depending on the number of elements managed (ie HA clusters) and in-band/out-of-band connectivity.  

        :return: The device_ip_address of this AssetDeviceRegistration.
        :rtype: list[str]
        """
        return self._device_ip_address

    @device_ip_address.setter
    def device_ip_address(self, device_ip_address):
        """
        Sets the device_ip_address of this AssetDeviceRegistration.
        The IP Addresses of the managed device. There can be multiple management IPs depending on the number of elements managed (ie HA clusters) and in-band/out-of-band connectivity.  

        :param device_ip_address: The device_ip_address of this AssetDeviceRegistration.
        :type: list[str]
        """

        self._device_ip_address = device_ip_address

    @property
    def domain_group(self):
        """
        Gets the domain_group of this AssetDeviceRegistration.
        The domain group to which the device has been assigned. 

        :return: The domain_group of this AssetDeviceRegistration.
        :rtype: IamDomainGroupRef
        """
        return self._domain_group

    @domain_group.setter
    def domain_group(self, domain_group):
        """
        Sets the domain_group of this AssetDeviceRegistration.
        The domain group to which the device has been assigned. 

        :param domain_group: The domain_group of this AssetDeviceRegistration.
        :type: IamDomainGroupRef
        """

        self._domain_group = domain_group

    @property
    def execution_mode(self):
        """
        Gets the execution_mode of this AssetDeviceRegistration.
        Indicates if the platform is an actual device or an emulated device for testing, demos, etc. Permitted values [Normal, Emulator, ContainerEmulator]  

        :return: The execution_mode of this AssetDeviceRegistration.
        :rtype: str
        """
        return self._execution_mode

    @execution_mode.setter
    def execution_mode(self, execution_mode):
        """
        Sets the execution_mode of this AssetDeviceRegistration.
        Indicates if the platform is an actual device or an emulated device for testing, demos, etc. Permitted values [Normal, Emulator, ContainerEmulator]  

        :param execution_mode: The execution_mode of this AssetDeviceRegistration.
        :type: str
        """
        allowed_values = ["", "Normal", "Emulator", "ContainerEmulator"]
        if execution_mode not in allowed_values:
            raise ValueError(
                "Invalid value for `execution_mode` ({0}), must be one of {1}"
                .format(execution_mode, allowed_values)
            )

        self._execution_mode = execution_mode

    @property
    def pid(self):
        """
        Gets the pid of this AssetDeviceRegistration.
        The product Id of the managed device.  

        :return: The pid of this AssetDeviceRegistration.
        :rtype: list[str]
        """
        return self._pid

    @pid.setter
    def pid(self, pid):
        """
        Sets the pid of this AssetDeviceRegistration.
        The product Id of the managed device.  

        :param pid: The pid of this AssetDeviceRegistration.
        :type: list[str]
        """

        self._pid = pid

    @property
    def platform_type(self):
        """
        Gets the platform_type of this AssetDeviceRegistration.
        The platform type on which device connector is executing.  

        :return: The platform_type of this AssetDeviceRegistration.
        :rtype: str
        """
        return self._platform_type

    @platform_type.setter
    def platform_type(self, platform_type):
        """
        Sets the platform_type of this AssetDeviceRegistration.
        The platform type on which device connector is executing.  

        :param platform_type: The platform_type of this AssetDeviceRegistration.
        :type: str
        """
        allowed_values = ["", "APIC", "UCSFI", "IMC", "IMCM4", "IMCM5", "HX", "UCSD", "IntersightAppliance", "PureStorage"]
        if platform_type not in allowed_values:
            raise ValueError(
                "Invalid value for `platform_type` ({0}), must be one of {1}"
                .format(platform_type, allowed_values)
            )

        self._platform_type = platform_type

    @property
    def public_access_key(self):
        """
        Gets the public_access_key of this AssetDeviceRegistration.
        The device connector's public key used by the cloud to authenticate a connection from the device connector. The public key is used to verify that the signature a device connector sends on connect has been signed by the connector's private key stored on the device's filesystem. Must be a PEM encoded RSA public key string.   

        :return: The public_access_key of this AssetDeviceRegistration.
        :rtype: str
        """
        return self._public_access_key

    @public_access_key.setter
    def public_access_key(self, public_access_key):
        """
        Sets the public_access_key of this AssetDeviceRegistration.
        The device connector's public key used by the cloud to authenticate a connection from the device connector. The public key is used to verify that the signature a device connector sends on connect has been signed by the connector's private key stored on the device's filesystem. Must be a PEM encoded RSA public key string.   

        :param public_access_key: The public_access_key of this AssetDeviceRegistration.
        :type: str
        """

        self._public_access_key = public_access_key

    @property
    def read_only(self):
        """
        Gets the read_only of this AssetDeviceRegistration.
        Flag reported by devices to indicate an administrator of the device has disabled management operations of the device connector and only monitoring is permitted.  

        :return: The read_only of this AssetDeviceRegistration.
        :rtype: bool
        """
        return self._read_only

    @read_only.setter
    def read_only(self, read_only):
        """
        Sets the read_only of this AssetDeviceRegistration.
        Flag reported by devices to indicate an administrator of the device has disabled management operations of the device connector and only monitoring is permitted.  

        :param read_only: The read_only of this AssetDeviceRegistration.
        :type: bool
        """

        self._read_only = read_only

    @property
    def security_token(self):
        """
        Gets the security_token of this AssetDeviceRegistration.

        :return: The security_token of this AssetDeviceRegistration.
        :rtype: AssetSecurityTokenRef
        """
        return self._security_token

    @security_token.setter
    def security_token(self, security_token):
        """
        Sets the security_token of this AssetDeviceRegistration.

        :param security_token: The security_token of this AssetDeviceRegistration.
        :type: AssetSecurityTokenRef
        """

        self._security_token = security_token

    @property
    def serial(self):
        """
        Gets the serial of this AssetDeviceRegistration.
        A list of serial numbers of the individual device elements (eg HA primary/secondary or cluster members) which are exposed as a single unit of management by the device connector.  

        :return: The serial of this AssetDeviceRegistration.
        :rtype: list[str]
        """
        return self._serial

    @serial.setter
    def serial(self, serial):
        """
        Sets the serial of this AssetDeviceRegistration.
        A list of serial numbers of the individual device elements (eg HA primary/secondary or cluster members) which are exposed as a single unit of management by the device connector.  

        :param serial: The serial of this AssetDeviceRegistration.
        :type: list[str]
        """

        self._serial = serial

    @property
    def vendor(self):
        """
        Gets the vendor of this AssetDeviceRegistration.
        The vendor of the managed device.   

        :return: The vendor of this AssetDeviceRegistration.
        :rtype: str
        """
        return self._vendor

    @vendor.setter
    def vendor(self, vendor):
        """
        Sets the vendor of this AssetDeviceRegistration.
        The vendor of the managed device.   

        :param vendor: The vendor of this AssetDeviceRegistration.
        :type: str
        """

        self._vendor = vendor

    def to_dict(self):
        """
        Returns the model properties as a dict
        """
        result = {}

        for attr, _ in iteritems(self.swagger_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value

        return result

    def to_str(self):
        """
        Returns the string representation of the model
        """
        return pformat(self.to_dict())

    def __repr__(self):
        """
        For `print` and `pprint`
        """
        return self.to_str()

    def __eq__(self, other):
        """
        Returns true if both objects are equal
        """
        if not isinstance(other, AssetDeviceRegistration):
            return False

        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        """
        Returns true if both objects are not equal
        """
        return not self == other
