# coding: utf-8

"""
ThinVolumeEx.py

 The Clear BSD License

 Copyright (c) – 2016, NetApp, Inc. All rights reserved.

 Redistribution and use in source and binary forms, with or without modification, are permitted (subject to the limitations in the disclaimer below) provided that the following conditions are met:

 * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

 * Neither the name of NetApp, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

 NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"""

from pprint import pformat
from six import iteritems


class ThinVolumeEx(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self):
        """
        ThinVolumeEx - a model defined in Swagger

        :param dict swaggerTypes: The key is attribute name
                                  and the value is attribute type.
        :param dict attributeMap: The key is attribute name
                                  and the value is json key in definition.
        """
        self.swagger_types = {
            'volume_handle': 'int',  # (required parameter)
            'world_wide_name': 'str',  # (required parameter)
            'label': 'str',  # (required parameter)
            'allocation_granularity': 'int',  # (required parameter)
            'capacity': 'int',  # (required parameter)
            'recon_priority': 'int',  # (required parameter)
            'volume_ref': 'str',  # (required parameter)
            'status': 'str',  # (required parameter)
            'repository_ref': 'str',  # (required parameter)
            'current_manager': 'str',  # (required parameter)
            'preferred_manager': 'str',  # (required parameter)
            'perms': 'VolumePerms',  # (required parameter)
            'mgmt_client_attribute': 'int',  # (required parameter)
            'pre_read_redundancy_check_enabled': 'bool',  # (required parameter)
            'protection_type': 'str',  # (required parameter)
            'application_tag_owned': 'bool',  # (required parameter)
            'max_virtual_capacity': 'int',  # (required parameter)
            'initial_provisioned_capacity': 'int',  # (required parameter)
            'current_provisioned_capacity': 'int',  # (required parameter)
            'provisioned_capacity_quota': 'int',  # (required parameter)
            'growth_alert_threshold': 'int',  # (required parameter)
            'expansion_policy': 'str',  # (required parameter)
            'volume_cache': 'VolumeCache',  # (required parameter)
            'offline': 'bool',  # (required parameter)
            'reporting_policy': 'str',  # (required parameter)
            'volume_full': 'bool',  
            'volume_group_ref': 'str',  
            'blk_size': 'int',  
            'storage_volume_ref': 'str',  
            'volume_copy_target': 'bool',  
            'volume_copy_source': 'bool',  
            'pit_base_volume': 'bool',  
            'async_mirror_target': 'bool',  
            'async_mirror_source': 'bool',  
            'remote_mirror_source': 'bool',  
            'remote_mirror_target': 'bool',  
            'flash_cached': 'bool',  
            'media_scan': 'VolumeMediaScanParams',  
            'metadata': 'list[VolumeMetadataItem]',  
            'data_assurance': 'bool',  
            'object_type': 'str',  
            'name': 'str',  
            'id': 'str',  
            'wwn': 'str',  
            'disk_pool': 'bool',  
            'cache_settings': 'VolumeCache',  # (required parameter)
            'thin_provisioned': 'bool',  
            'segment_size': 'int',  
            'list_of_mappings': 'list[LUNMapping]',  
            'mapped': 'bool',  # (required parameter)
            'current_controller_id': 'str',  
            'preferred_controller_id': 'str',  
            'online_volume_copy': 'bool',  
            'total_size_in_bytes': 'int'
        }

        self.attribute_map = {
            'volume_handle': 'volumeHandle',  # (required parameter)
            'world_wide_name': 'worldWideName',  # (required parameter)
            'label': 'label',  # (required parameter)
            'allocation_granularity': 'allocationGranularity',  # (required parameter)
            'capacity': 'capacity',  # (required parameter)
            'recon_priority': 'reconPriority',  # (required parameter)
            'volume_ref': 'volumeRef',  # (required parameter)
            'status': 'status',  # (required parameter)
            'repository_ref': 'repositoryRef',  # (required parameter)
            'current_manager': 'currentManager',  # (required parameter)
            'preferred_manager': 'preferredManager',  # (required parameter)
            'perms': 'perms',  # (required parameter)
            'mgmt_client_attribute': 'mgmtClientAttribute',  # (required parameter)
            'pre_read_redundancy_check_enabled': 'preReadRedundancyCheckEnabled',  # (required parameter)
            'protection_type': 'protectionType',  # (required parameter)
            'application_tag_owned': 'applicationTagOwned',  # (required parameter)
            'max_virtual_capacity': 'maxVirtualCapacity',  # (required parameter)
            'initial_provisioned_capacity': 'initialProvisionedCapacity',  # (required parameter)
            'current_provisioned_capacity': 'currentProvisionedCapacity',  # (required parameter)
            'provisioned_capacity_quota': 'provisionedCapacityQuota',  # (required parameter)
            'growth_alert_threshold': 'growthAlertThreshold',  # (required parameter)
            'expansion_policy': 'expansionPolicy',  # (required parameter)
            'volume_cache': 'volumeCache',  # (required parameter)
            'offline': 'offline',  # (required parameter)
            'reporting_policy': 'reportingPolicy',  # (required parameter)
            'volume_full': 'volumeFull',  
            'volume_group_ref': 'volumeGroupRef',  
            'blk_size': 'blkSize',  
            'storage_volume_ref': 'storageVolumeRef',  
            'volume_copy_target': 'volumeCopyTarget',  
            'volume_copy_source': 'volumeCopySource',  
            'pit_base_volume': 'pitBaseVolume',  
            'async_mirror_target': 'asyncMirrorTarget',  
            'async_mirror_source': 'asyncMirrorSource',  
            'remote_mirror_source': 'remoteMirrorSource',  
            'remote_mirror_target': 'remoteMirrorTarget',  
            'flash_cached': 'flashCached',  
            'media_scan': 'mediaScan',  
            'metadata': 'metadata',  
            'data_assurance': 'dataAssurance',  
            'object_type': 'objectType',  
            'name': 'name',  
            'id': 'id',  
            'wwn': 'wwn',  
            'disk_pool': 'diskPool',  
            'cache_settings': 'cacheSettings',  # (required parameter)
            'thin_provisioned': 'thinProvisioned',  
            'segment_size': 'segmentSize',  
            'list_of_mappings': 'listOfMappings',  
            'mapped': 'mapped',  # (required parameter)
            'current_controller_id': 'currentControllerId',  
            'preferred_controller_id': 'preferredControllerId',  
            'online_volume_copy': 'onlineVolumeCopy',  
            'total_size_in_bytes': 'totalSizeInBytes'
        }

        self._volume_handle = None
        self._world_wide_name = None
        self._label = None
        self._allocation_granularity = None
        self._capacity = None
        self._recon_priority = None
        self._volume_ref = None
        self._status = None
        self._repository_ref = None
        self._current_manager = None
        self._preferred_manager = None
        self._perms = None
        self._mgmt_client_attribute = None
        self._pre_read_redundancy_check_enabled = None
        self._protection_type = None
        self._application_tag_owned = None
        self._max_virtual_capacity = None
        self._initial_provisioned_capacity = None
        self._current_provisioned_capacity = None
        self._provisioned_capacity_quota = None
        self._growth_alert_threshold = None
        self._expansion_policy = None
        self._volume_cache = None
        self._offline = None
        self._reporting_policy = None
        self._volume_full = None
        self._volume_group_ref = None
        self._blk_size = None
        self._storage_volume_ref = None
        self._volume_copy_target = None
        self._volume_copy_source = None
        self._pit_base_volume = None
        self._async_mirror_target = None
        self._async_mirror_source = None
        self._remote_mirror_source = None
        self._remote_mirror_target = None
        self._flash_cached = None
        self._media_scan = None
        self._metadata = None
        self._data_assurance = None
        self._object_type = None
        self._name = None
        self._id = None
        self._wwn = None
        self._disk_pool = None
        self._cache_settings = None
        self._thin_provisioned = None
        self._segment_size = None
        self._list_of_mappings = None
        self._mapped = None
        self._current_controller_id = None
        self._preferred_controller_id = None
        self._online_volume_copy = None
        self._total_size_in_bytes = None

    @property
    def volume_handle(self):
        """
        Gets the volume_handle of this ThinVolumeEx.
        The volumeHandle (SSID) for this volume.

        :return: The volume_handle of this ThinVolumeEx.
        :rtype: int
        :required/optional: required
        """
        return self._volume_handle

    @volume_handle.setter
    def volume_handle(self, volume_handle):
        """
        Sets the volume_handle of this ThinVolumeEx.
        The volumeHandle (SSID) for this volume.

        :param volume_handle: The volume_handle of this ThinVolumeEx.
        :type: int
        """
        self._volume_handle = volume_handle

    @property
    def world_wide_name(self):
        """
        Gets the world_wide_name of this ThinVolumeEx.
        The World wide name of the volume.

        :return: The world_wide_name of this ThinVolumeEx.
        :rtype: str
        :required/optional: required
        """
        return self._world_wide_name

    @world_wide_name.setter
    def world_wide_name(self, world_wide_name):
        """
        Sets the world_wide_name of this ThinVolumeEx.
        The World wide name of the volume.

        :param world_wide_name: The world_wide_name of this ThinVolumeEx.
        :type: str
        """
        self._world_wide_name = world_wide_name

    @property
    def label(self):
        """
        Gets the label of this ThinVolumeEx.
        The name of the volume.

        :return: The label of this ThinVolumeEx.
        :rtype: str
        :required/optional: required
        """
        return self._label

    @label.setter
    def label(self, label):
        """
        Sets the label of this ThinVolumeEx.
        The name of the volume.

        :param label: The label of this ThinVolumeEx.
        :type: str
        """
        self._label = label

    @property
    def allocation_granularity(self):
        """
        Gets the allocation_granularity of this ThinVolumeEx.
        The allocation cluster size for the Expandable Repository Volume.

        :return: The allocation_granularity of this ThinVolumeEx.
        :rtype: int
        :required/optional: required
        """
        return self._allocation_granularity

    @allocation_granularity.setter
    def allocation_granularity(self, allocation_granularity):
        """
        Sets the allocation_granularity of this ThinVolumeEx.
        The allocation cluster size for the Expandable Repository Volume.

        :param allocation_granularity: The allocation_granularity of this ThinVolumeEx.
        :type: int
        """
        self._allocation_granularity = allocation_granularity

    @property
    def capacity(self):
        """
        Gets the capacity of this ThinVolumeEx.
        The virtual capacity of the volume in bytes.

        :return: The capacity of this ThinVolumeEx.
        :rtype: int
        :required/optional: required
        """
        return self._capacity

    @capacity.setter
    def capacity(self, capacity):
        """
        Sets the capacity of this ThinVolumeEx.
        The virtual capacity of the volume in bytes.

        :param capacity: The capacity of this ThinVolumeEx.
        :type: int
        """
        self._capacity = capacity

    @property
    def recon_priority(self):
        """
        Gets the recon_priority of this ThinVolumeEx.
        Importance of fixing the volume if failed (0-4).

        :return: The recon_priority of this ThinVolumeEx.
        :rtype: int
        :required/optional: required
        """
        return self._recon_priority

    @recon_priority.setter
    def recon_priority(self, recon_priority):
        """
        Sets the recon_priority of this ThinVolumeEx.
        Importance of fixing the volume if failed (0-4).

        :param recon_priority: The recon_priority of this ThinVolumeEx.
        :type: int
        """
        self._recon_priority = recon_priority

    @property
    def volume_ref(self):
        """
        Gets the volume_ref of this ThinVolumeEx.
        The reference (key) for this volume.

        :return: The volume_ref of this ThinVolumeEx.
        :rtype: str
        :required/optional: required
        """
        return self._volume_ref

    @volume_ref.setter
    def volume_ref(self, volume_ref):
        """
        Sets the volume_ref of this ThinVolumeEx.
        The reference (key) for this volume.

        :param volume_ref: The volume_ref of this ThinVolumeEx.
        :type: str
        """
        self._volume_ref = volume_ref

    @property
    def status(self):
        """
        Gets the status of this ThinVolumeEx.
        The operational status of the volume.

        :return: The status of this ThinVolumeEx.
        :rtype: str
        :required/optional: required
        """
        return self._status

    @status.setter
    def status(self, status):
        """
        Sets the status of this ThinVolumeEx.
        The operational status of the volume.

        :param status: The status of this ThinVolumeEx.
        :type: str
        """
        allowed_values = ["unknown", "optimal", "full", "overThresh", "failed", "initializing", "__UNDEFINED"]
        if status not in allowed_values:
            raise ValueError(
                "Invalid value for `status`, must be one of {0}"
                .format(allowed_values)
            )
        self._status = status

    @property
    def repository_ref(self):
        """
        Gets the repository_ref of this ThinVolumeEx.
        The Expandable Repository Volume underlying this Thin Volume.

        :return: The repository_ref of this ThinVolumeEx.
        :rtype: str
        :required/optional: required
        """
        return self._repository_ref

    @repository_ref.setter
    def repository_ref(self, repository_ref):
        """
        Sets the repository_ref of this ThinVolumeEx.
        The Expandable Repository Volume underlying this Thin Volume.

        :param repository_ref: The repository_ref of this ThinVolumeEx.
        :type: str
        """
        self._repository_ref = repository_ref

    @property
    def current_manager(self):
        """
        Gets the current_manager of this ThinVolumeEx.
        The controller that currently manages the volume.

        :return: The current_manager of this ThinVolumeEx.
        :rtype: str
        :required/optional: required
        """
        return self._current_manager

    @current_manager.setter
    def current_manager(self, current_manager):
        """
        Sets the current_manager of this ThinVolumeEx.
        The controller that currently manages the volume.

        :param current_manager: The current_manager of this ThinVolumeEx.
        :type: str
        """
        self._current_manager = current_manager

    @property
    def preferred_manager(self):
        """
        Gets the preferred_manager of this ThinVolumeEx.
        The controller that should manage the volume.

        :return: The preferred_manager of this ThinVolumeEx.
        :rtype: str
        :required/optional: required
        """
        return self._preferred_manager

    @preferred_manager.setter
    def preferred_manager(self, preferred_manager):
        """
        Sets the preferred_manager of this ThinVolumeEx.
        The controller that should manage the volume.

        :param preferred_manager: The preferred_manager of this ThinVolumeEx.
        :type: str
        """
        self._preferred_manager = preferred_manager

    @property
    def perms(self):
        """
        Gets the perms of this ThinVolumeEx.
        Operations allowed on this volume.

        :return: The perms of this ThinVolumeEx.
        :rtype: VolumePerms
        :required/optional: required
        """
        return self._perms

    @perms.setter
    def perms(self, perms):
        """
        Sets the perms of this ThinVolumeEx.
        Operations allowed on this volume.

        :param perms: The perms of this ThinVolumeEx.
        :type: VolumePerms
        """
        self._perms = perms

    @property
    def mgmt_client_attribute(self):
        """
        Gets the mgmt_client_attribute of this ThinVolumeEx.
        For use by management client.

        :return: The mgmt_client_attribute of this ThinVolumeEx.
        :rtype: int
        :required/optional: required
        """
        return self._mgmt_client_attribute

    @mgmt_client_attribute.setter
    def mgmt_client_attribute(self, mgmt_client_attribute):
        """
        Sets the mgmt_client_attribute of this ThinVolumeEx.
        For use by management client.

        :param mgmt_client_attribute: The mgmt_client_attribute of this ThinVolumeEx.
        :type: int
        """
        self._mgmt_client_attribute = mgmt_client_attribute

    @property
    def pre_read_redundancy_check_enabled(self):
        """
        Gets the pre_read_redundancy_check_enabled of this ThinVolumeEx.
        If true, verify RAID redundancy on read operations.

        :return: The pre_read_redundancy_check_enabled of this ThinVolumeEx.
        :rtype: bool
        :required/optional: required
        """
        return self._pre_read_redundancy_check_enabled

    @pre_read_redundancy_check_enabled.setter
    def pre_read_redundancy_check_enabled(self, pre_read_redundancy_check_enabled):
        """
        Sets the pre_read_redundancy_check_enabled of this ThinVolumeEx.
        If true, verify RAID redundancy on read operations.

        :param pre_read_redundancy_check_enabled: The pre_read_redundancy_check_enabled of this ThinVolumeEx.
        :type: bool
        """
        self._pre_read_redundancy_check_enabled = pre_read_redundancy_check_enabled

    @property
    def protection_type(self):
        """
        Gets the protection_type of this ThinVolumeEx.
        The protection type of the volume.

        :return: The protection_type of this ThinVolumeEx.
        :rtype: str
        :required/optional: required
        """
        return self._protection_type

    @protection_type.setter
    def protection_type(self, protection_type):
        """
        Sets the protection_type of this ThinVolumeEx.
        The protection type of the volume.

        :param protection_type: The protection_type of this ThinVolumeEx.
        :type: str
        """
        allowed_values = ["type0Protection", "type1Protection", "type2Protection", "type3Protection", "__UNDEFINED"]
        if protection_type not in allowed_values:
            raise ValueError(
                "Invalid value for `protection_type`, must be one of {0}"
                .format(allowed_values)
            )
        self._protection_type = protection_type

    @property
    def application_tag_owned(self):
        """
        Gets the application_tag_owned of this ThinVolumeEx.
        True if application tag is owned by the storage array.

        :return: The application_tag_owned of this ThinVolumeEx.
        :rtype: bool
        :required/optional: required
        """
        return self._application_tag_owned

    @application_tag_owned.setter
    def application_tag_owned(self, application_tag_owned):
        """
        Sets the application_tag_owned of this ThinVolumeEx.
        True if application tag is owned by the storage array.

        :param application_tag_owned: The application_tag_owned of this ThinVolumeEx.
        :type: bool
        """
        self._application_tag_owned = application_tag_owned

    @property
    def max_virtual_capacity(self):
        """
        Gets the max_virtual_capacity of this ThinVolumeEx.
        The maximum virtual capacity to which this thin volume can grow (in bytes).

        :return: The max_virtual_capacity of this ThinVolumeEx.
        :rtype: int
        :required/optional: required
        """
        return self._max_virtual_capacity

    @max_virtual_capacity.setter
    def max_virtual_capacity(self, max_virtual_capacity):
        """
        Sets the max_virtual_capacity of this ThinVolumeEx.
        The maximum virtual capacity to which this thin volume can grow (in bytes).

        :param max_virtual_capacity: The max_virtual_capacity of this ThinVolumeEx.
        :type: int
        """
        self._max_virtual_capacity = max_virtual_capacity

    @property
    def initial_provisioned_capacity(self):
        """
        Gets the initial_provisioned_capacity of this ThinVolumeEx.
        The initial provisioned capacity for the Expandable Repository Volume for this thin volume (in bytes).

        :return: The initial_provisioned_capacity of this ThinVolumeEx.
        :rtype: int
        :required/optional: required
        """
        return self._initial_provisioned_capacity

    @initial_provisioned_capacity.setter
    def initial_provisioned_capacity(self, initial_provisioned_capacity):
        """
        Sets the initial_provisioned_capacity of this ThinVolumeEx.
        The initial provisioned capacity for the Expandable Repository Volume for this thin volume (in bytes).

        :param initial_provisioned_capacity: The initial_provisioned_capacity of this ThinVolumeEx.
        :type: int
        """
        self._initial_provisioned_capacity = initial_provisioned_capacity

    @property
    def current_provisioned_capacity(self):
        """
        Gets the current_provisioned_capacity of this ThinVolumeEx.
        The current provisioned capacity of the Expandable Repository Volume (in bytes).

        :return: The current_provisioned_capacity of this ThinVolumeEx.
        :rtype: int
        :required/optional: required
        """
        return self._current_provisioned_capacity

    @current_provisioned_capacity.setter
    def current_provisioned_capacity(self, current_provisioned_capacity):
        """
        Sets the current_provisioned_capacity of this ThinVolumeEx.
        The current provisioned capacity of the Expandable Repository Volume (in bytes).

        :param current_provisioned_capacity: The current_provisioned_capacity of this ThinVolumeEx.
        :type: int
        """
        self._current_provisioned_capacity = current_provisioned_capacity

    @property
    def provisioned_capacity_quota(self):
        """
        Gets the provisioned_capacity_quota of this ThinVolumeEx.
        The maximum capacity of the Expandable Repository Volume (in bytes).

        :return: The provisioned_capacity_quota of this ThinVolumeEx.
        :rtype: int
        :required/optional: required
        """
        return self._provisioned_capacity_quota

    @provisioned_capacity_quota.setter
    def provisioned_capacity_quota(self, provisioned_capacity_quota):
        """
        Sets the provisioned_capacity_quota of this ThinVolumeEx.
        The maximum capacity of the Expandable Repository Volume (in bytes).

        :param provisioned_capacity_quota: The provisioned_capacity_quota of this ThinVolumeEx.
        :type: int
        """
        self._provisioned_capacity_quota = provisioned_capacity_quota

    @property
    def growth_alert_threshold(self):
        """
        Gets the growth_alert_threshold of this ThinVolumeEx.
        The percent value at which an alert is generated.

        :return: The growth_alert_threshold of this ThinVolumeEx.
        :rtype: int
        :required/optional: required
        """
        return self._growth_alert_threshold

    @growth_alert_threshold.setter
    def growth_alert_threshold(self, growth_alert_threshold):
        """
        Sets the growth_alert_threshold of this ThinVolumeEx.
        The percent value at which an alert is generated.

        :param growth_alert_threshold: The growth_alert_threshold of this ThinVolumeEx.
        :type: int
        """
        self._growth_alert_threshold = growth_alert_threshold

    @property
    def expansion_policy(self):
        """
        Gets the expansion_policy of this ThinVolumeEx.
        The automatic Expandable Repository Volume expansion policy.

        :return: The expansion_policy of this ThinVolumeEx.
        :rtype: str
        :required/optional: required
        """
        return self._expansion_policy

    @expansion_policy.setter
    def expansion_policy(self, expansion_policy):
        """
        Sets the expansion_policy of this ThinVolumeEx.
        The automatic Expandable Repository Volume expansion policy.

        :param expansion_policy: The expansion_policy of this ThinVolumeEx.
        :type: str
        """
        allowed_values = ["unknown", "manual", "automatic", "__UNDEFINED"]
        if expansion_policy not in allowed_values:
            raise ValueError(
                "Invalid value for `expansion_policy`, must be one of {0}"
                .format(allowed_values)
            )
        self._expansion_policy = expansion_policy

    @property
    def volume_cache(self):
        """
        Gets the volume_cache of this ThinVolumeEx.
        The cache parameters of the underlying repository.

        :return: The volume_cache of this ThinVolumeEx.
        :rtype: VolumeCache
        :required/optional: required
        """
        return self._volume_cache

    @volume_cache.setter
    def volume_cache(self, volume_cache):
        """
        Sets the volume_cache of this ThinVolumeEx.
        The cache parameters of the underlying repository.

        :param volume_cache: The volume_cache of this ThinVolumeEx.
        :type: VolumeCache
        """
        self._volume_cache = volume_cache

    @property
    def offline(self):
        """
        Gets the offline of this ThinVolumeEx.
        The thin volume is offline due to the associated repository volume state.

        :return: The offline of this ThinVolumeEx.
        :rtype: bool
        :required/optional: required
        """
        return self._offline

    @offline.setter
    def offline(self, offline):
        """
        Sets the offline of this ThinVolumeEx.
        The thin volume is offline due to the associated repository volume state.

        :param offline: The offline of this ThinVolumeEx.
        :type: bool
        """
        self._offline = offline

    @property
    def reporting_policy(self):
        """
        Gets the reporting_policy of this ThinVolumeEx.
        Indicates how the thin volume is reported on the SCSI interface.

        :return: The reporting_policy of this ThinVolumeEx.
        :rtype: str
        :required/optional: required
        """
        return self._reporting_policy

    @reporting_policy.setter
    def reporting_policy(self, reporting_policy):
        """
        Sets the reporting_policy of this ThinVolumeEx.
        Indicates how the thin volume is reported on the SCSI interface.

        :param reporting_policy: The reporting_policy of this ThinVolumeEx.
        :type: str
        """
        allowed_values = ["unknown", "asThick", "asThin", "__UNDEFINED"]
        if reporting_policy not in allowed_values:
            raise ValueError(
                "Invalid value for `reporting_policy`, must be one of {0}"
                .format(allowed_values)
            )
        self._reporting_policy = reporting_policy

    @property
    def volume_full(self):
        """
        Gets the volume_full of this ThinVolumeEx.


        :return: The volume_full of this ThinVolumeEx.
        :rtype: bool
        :required/optional: optional
        """
        return self._volume_full

    @volume_full.setter
    def volume_full(self, volume_full):
        """
        Sets the volume_full of this ThinVolumeEx.


        :param volume_full: The volume_full of this ThinVolumeEx.
        :type: bool
        """
        self._volume_full = volume_full

    @property
    def volume_group_ref(self):
        """
        Gets the volume_group_ref of this ThinVolumeEx.


        :return: The volume_group_ref of this ThinVolumeEx.
        :rtype: str
        :required/optional: optional
        """
        return self._volume_group_ref

    @volume_group_ref.setter
    def volume_group_ref(self, volume_group_ref):
        """
        Sets the volume_group_ref of this ThinVolumeEx.


        :param volume_group_ref: The volume_group_ref of this ThinVolumeEx.
        :type: str
        """
        self._volume_group_ref = volume_group_ref

    @property
    def blk_size(self):
        """
        Gets the blk_size of this ThinVolumeEx.


        :return: The blk_size of this ThinVolumeEx.
        :rtype: int
        :required/optional: optional
        """
        return self._blk_size

    @blk_size.setter
    def blk_size(self, blk_size):
        """
        Sets the blk_size of this ThinVolumeEx.


        :param blk_size: The blk_size of this ThinVolumeEx.
        :type: int
        """
        self._blk_size = blk_size

    @property
    def storage_volume_ref(self):
        """
        Gets the storage_volume_ref of this ThinVolumeEx.


        :return: The storage_volume_ref of this ThinVolumeEx.
        :rtype: str
        :required/optional: optional
        """
        return self._storage_volume_ref

    @storage_volume_ref.setter
    def storage_volume_ref(self, storage_volume_ref):
        """
        Sets the storage_volume_ref of this ThinVolumeEx.


        :param storage_volume_ref: The storage_volume_ref of this ThinVolumeEx.
        :type: str
        """
        self._storage_volume_ref = storage_volume_ref

    @property
    def volume_copy_target(self):
        """
        Gets the volume_copy_target of this ThinVolumeEx.


        :return: The volume_copy_target of this ThinVolumeEx.
        :rtype: bool
        :required/optional: optional
        """
        return self._volume_copy_target

    @volume_copy_target.setter
    def volume_copy_target(self, volume_copy_target):
        """
        Sets the volume_copy_target of this ThinVolumeEx.


        :param volume_copy_target: The volume_copy_target of this ThinVolumeEx.
        :type: bool
        """
        self._volume_copy_target = volume_copy_target

    @property
    def volume_copy_source(self):
        """
        Gets the volume_copy_source of this ThinVolumeEx.


        :return: The volume_copy_source of this ThinVolumeEx.
        :rtype: bool
        :required/optional: optional
        """
        return self._volume_copy_source

    @volume_copy_source.setter
    def volume_copy_source(self, volume_copy_source):
        """
        Sets the volume_copy_source of this ThinVolumeEx.


        :param volume_copy_source: The volume_copy_source of this ThinVolumeEx.
        :type: bool
        """
        self._volume_copy_source = volume_copy_source

    @property
    def pit_base_volume(self):
        """
        Gets the pit_base_volume of this ThinVolumeEx.


        :return: The pit_base_volume of this ThinVolumeEx.
        :rtype: bool
        :required/optional: optional
        """
        return self._pit_base_volume

    @pit_base_volume.setter
    def pit_base_volume(self, pit_base_volume):
        """
        Sets the pit_base_volume of this ThinVolumeEx.


        :param pit_base_volume: The pit_base_volume of this ThinVolumeEx.
        :type: bool
        """
        self._pit_base_volume = pit_base_volume

    @property
    def async_mirror_target(self):
        """
        Gets the async_mirror_target of this ThinVolumeEx.
        True if the volume is a target in an Asynchronous Mirror relationship.

        :return: The async_mirror_target of this ThinVolumeEx.
        :rtype: bool
        :required/optional: optional
        """
        return self._async_mirror_target

    @async_mirror_target.setter
    def async_mirror_target(self, async_mirror_target):
        """
        Sets the async_mirror_target of this ThinVolumeEx.
        True if the volume is a target in an Asynchronous Mirror relationship.

        :param async_mirror_target: The async_mirror_target of this ThinVolumeEx.
        :type: bool
        """
        self._async_mirror_target = async_mirror_target

    @property
    def async_mirror_source(self):
        """
        Gets the async_mirror_source of this ThinVolumeEx.
        True if the volume is a source in an Asynchronous Mirror relationship.

        :return: The async_mirror_source of this ThinVolumeEx.
        :rtype: bool
        :required/optional: optional
        """
        return self._async_mirror_source

    @async_mirror_source.setter
    def async_mirror_source(self, async_mirror_source):
        """
        Sets the async_mirror_source of this ThinVolumeEx.
        True if the volume is a source in an Asynchronous Mirror relationship.

        :param async_mirror_source: The async_mirror_source of this ThinVolumeEx.
        :type: bool
        """
        self._async_mirror_source = async_mirror_source

    @property
    def remote_mirror_source(self):
        """
        Gets the remote_mirror_source of this ThinVolumeEx.
        True if the volume is a source (primary), in an Remote Volume Mirror relationship.

        :return: The remote_mirror_source of this ThinVolumeEx.
        :rtype: bool
        :required/optional: optional
        """
        return self._remote_mirror_source

    @remote_mirror_source.setter
    def remote_mirror_source(self, remote_mirror_source):
        """
        Sets the remote_mirror_source of this ThinVolumeEx.
        True if the volume is a source (primary), in an Remote Volume Mirror relationship.

        :param remote_mirror_source: The remote_mirror_source of this ThinVolumeEx.
        :type: bool
        """
        self._remote_mirror_source = remote_mirror_source

    @property
    def remote_mirror_target(self):
        """
        Gets the remote_mirror_target of this ThinVolumeEx.
        True if the volume is a target (secondary), in an Remote Volume Mirror relationship.

        :return: The remote_mirror_target of this ThinVolumeEx.
        :rtype: bool
        :required/optional: optional
        """
        return self._remote_mirror_target

    @remote_mirror_target.setter
    def remote_mirror_target(self, remote_mirror_target):
        """
        Sets the remote_mirror_target of this ThinVolumeEx.
        True if the volume is a target (secondary), in an Remote Volume Mirror relationship.

        :param remote_mirror_target: The remote_mirror_target of this ThinVolumeEx.
        :type: bool
        """
        self._remote_mirror_target = remote_mirror_target

    @property
    def flash_cached(self):
        """
        Gets the flash_cached of this ThinVolumeEx.
        True if this volume is added to a flashCache.

        :return: The flash_cached of this ThinVolumeEx.
        :rtype: bool
        :required/optional: optional
        """
        return self._flash_cached

    @flash_cached.setter
    def flash_cached(self, flash_cached):
        """
        Sets the flash_cached of this ThinVolumeEx.
        True if this volume is added to a flashCache.

        :param flash_cached: The flash_cached of this ThinVolumeEx.
        :type: bool
        """
        self._flash_cached = flash_cached

    @property
    def media_scan(self):
        """
        Gets the media_scan of this ThinVolumeEx.


        :return: The media_scan of this ThinVolumeEx.
        :rtype: VolumeMediaScanParams
        :required/optional: optional
        """
        return self._media_scan

    @media_scan.setter
    def media_scan(self, media_scan):
        """
        Sets the media_scan of this ThinVolumeEx.


        :param media_scan: The media_scan of this ThinVolumeEx.
        :type: VolumeMediaScanParams
        """
        self._media_scan = media_scan

    @property
    def metadata(self):
        """
        Gets the metadata of this ThinVolumeEx.
        Metadata associated with the volume

        :return: The metadata of this ThinVolumeEx.
        :rtype: list[VolumeMetadataItem]
        :required/optional: optional
        """
        return self._metadata

    @metadata.setter
    def metadata(self, metadata):
        """
        Sets the metadata of this ThinVolumeEx.
        Metadata associated with the volume

        :param metadata: The metadata of this ThinVolumeEx.
        :type: list[VolumeMetadataItem]
        """
        self._metadata = metadata

    @property
    def data_assurance(self):
        """
        Gets the data_assurance of this ThinVolumeEx.


        :return: The data_assurance of this ThinVolumeEx.
        :rtype: bool
        :required/optional: optional
        """
        return self._data_assurance

    @data_assurance.setter
    def data_assurance(self, data_assurance):
        """
        Sets the data_assurance of this ThinVolumeEx.


        :param data_assurance: The data_assurance of this ThinVolumeEx.
        :type: bool
        """
        self._data_assurance = data_assurance

    @property
    def object_type(self):
        """
        Gets the object_type of this ThinVolumeEx.


        :return: The object_type of this ThinVolumeEx.
        :rtype: str
        :required/optional: optional
        """
        return self._object_type

    @object_type.setter
    def object_type(self, object_type):
        """
        Sets the object_type of this ThinVolumeEx.


        :param object_type: The object_type of this ThinVolumeEx.
        :type: str
        """
        allowed_values = ["volume", "pool", "host", "lunMapping", "hostGroup", "thinVolume", "drive", "volumeCopy", "pit", "pitView", "snapshotGroup", "snapshot", "accessVolume", "legacySnapshot", "hostType", "metadataTag", "managementUrl", "folder", "asyncMirrorGroup", "asyncMirrorGroupMember", "asyncMirrorGroupIncompleteMember", "consistencyGroup", "consistencyGroupView", "fan", "battery", "storageSystem", "controller", "powerSupply", "minihub", "esm", "drawer", "hostBoard", "interconnectCRU", "cacheBackupDevice", "tray", "supportCRU", "hostPort", "initiator", "snapshotSchedule", "thermalSensor", "sfp", "flashCache", "featureAttribute", "featureState", "lockKeyId", "remoteVolume", "mirrorVolume", "vaultMirrorVolume", "vaultMirrorGroup", "metadataVolume", "sasPort", "sasExpander", "channelPort", "speedNegError", "snmpAgentBundle", "stagedFirmware", "workload"]
        if object_type not in allowed_values:
            raise ValueError(
                "Invalid value for `object_type`, must be one of {0}"
                .format(allowed_values)
            )
        self._object_type = object_type

    @property
    def name(self):
        """
        Gets the name of this ThinVolumeEx.


        :return: The name of this ThinVolumeEx.
        :rtype: str
        :required/optional: optional
        """
        return self._name

    @name.setter
    def name(self, name):
        """
        Sets the name of this ThinVolumeEx.


        :param name: The name of this ThinVolumeEx.
        :type: str
        """
        self._name = name

    @property
    def id(self):
        """
        Gets the id of this ThinVolumeEx.


        :return: The id of this ThinVolumeEx.
        :rtype: str
        :required/optional: optional
        """
        return self._id

    @id.setter
    def id(self, id):
        """
        Sets the id of this ThinVolumeEx.


        :param id: The id of this ThinVolumeEx.
        :type: str
        """
        self._id = id

    @property
    def wwn(self):
        """
        Gets the wwn of this ThinVolumeEx.


        :return: The wwn of this ThinVolumeEx.
        :rtype: str
        :required/optional: optional
        """
        return self._wwn

    @wwn.setter
    def wwn(self, wwn):
        """
        Sets the wwn of this ThinVolumeEx.


        :param wwn: The wwn of this ThinVolumeEx.
        :type: str
        """
        self._wwn = wwn

    @property
    def disk_pool(self):
        """
        Gets the disk_pool of this ThinVolumeEx.


        :return: The disk_pool of this ThinVolumeEx.
        :rtype: bool
        :required/optional: optional
        """
        return self._disk_pool

    @disk_pool.setter
    def disk_pool(self, disk_pool):
        """
        Sets the disk_pool of this ThinVolumeEx.


        :param disk_pool: The disk_pool of this ThinVolumeEx.
        :type: bool
        """
        self._disk_pool = disk_pool

    @property
    def cache_settings(self):
        """
        Gets the cache_settings of this ThinVolumeEx.
        The volume-specific caching parameters currently in effect for the volume.

        :return: The cache_settings of this ThinVolumeEx.
        :rtype: VolumeCache
        :required/optional: required
        """
        return self._cache_settings

    @cache_settings.setter
    def cache_settings(self, cache_settings):
        """
        Sets the cache_settings of this ThinVolumeEx.
        The volume-specific caching parameters currently in effect for the volume.

        :param cache_settings: The cache_settings of this ThinVolumeEx.
        :type: VolumeCache
        """
        self._cache_settings = cache_settings

    @property
    def thin_provisioned(self):
        """
        Gets the thin_provisioned of this ThinVolumeEx.


        :return: The thin_provisioned of this ThinVolumeEx.
        :rtype: bool
        :required/optional: optional
        """
        return self._thin_provisioned

    @thin_provisioned.setter
    def thin_provisioned(self, thin_provisioned):
        """
        Sets the thin_provisioned of this ThinVolumeEx.


        :param thin_provisioned: The thin_provisioned of this ThinVolumeEx.
        :type: bool
        """
        self._thin_provisioned = thin_provisioned

    @property
    def segment_size(self):
        """
        Gets the segment_size of this ThinVolumeEx.


        :return: The segment_size of this ThinVolumeEx.
        :rtype: int
        :required/optional: optional
        """
        return self._segment_size

    @segment_size.setter
    def segment_size(self, segment_size):
        """
        Sets the segment_size of this ThinVolumeEx.


        :param segment_size: The segment_size of this ThinVolumeEx.
        :type: int
        """
        self._segment_size = segment_size

    @property
    def list_of_mappings(self):
        """
        Gets the list_of_mappings of this ThinVolumeEx.


        :return: The list_of_mappings of this ThinVolumeEx.
        :rtype: list[LUNMapping]
        :required/optional: optional
        """
        return self._list_of_mappings

    @list_of_mappings.setter
    def list_of_mappings(self, list_of_mappings):
        """
        Sets the list_of_mappings of this ThinVolumeEx.


        :param list_of_mappings: The list_of_mappings of this ThinVolumeEx.
        :type: list[LUNMapping]
        """
        self._list_of_mappings = list_of_mappings

    @property
    def mapped(self):
        """
        Gets the mapped of this ThinVolumeEx.


        :return: The mapped of this ThinVolumeEx.
        :rtype: bool
        :required/optional: required
        """
        return self._mapped

    @mapped.setter
    def mapped(self, mapped):
        """
        Sets the mapped of this ThinVolumeEx.


        :param mapped: The mapped of this ThinVolumeEx.
        :type: bool
        """
        self._mapped = mapped

    @property
    def current_controller_id(self):
        """
        Gets the current_controller_id of this ThinVolumeEx.


        :return: The current_controller_id of this ThinVolumeEx.
        :rtype: str
        :required/optional: optional
        """
        return self._current_controller_id

    @current_controller_id.setter
    def current_controller_id(self, current_controller_id):
        """
        Sets the current_controller_id of this ThinVolumeEx.


        :param current_controller_id: The current_controller_id of this ThinVolumeEx.
        :type: str
        """
        self._current_controller_id = current_controller_id

    @property
    def preferred_controller_id(self):
        """
        Gets the preferred_controller_id of this ThinVolumeEx.


        :return: The preferred_controller_id of this ThinVolumeEx.
        :rtype: str
        :required/optional: optional
        """
        return self._preferred_controller_id

    @preferred_controller_id.setter
    def preferred_controller_id(self, preferred_controller_id):
        """
        Sets the preferred_controller_id of this ThinVolumeEx.


        :param preferred_controller_id: The preferred_controller_id of this ThinVolumeEx.
        :type: str
        """
        self._preferred_controller_id = preferred_controller_id

    @property
    def online_volume_copy(self):
        """
        Gets the online_volume_copy of this ThinVolumeEx.


        :return: The online_volume_copy of this ThinVolumeEx.
        :rtype: bool
        :required/optional: optional
        """
        return self._online_volume_copy

    @online_volume_copy.setter
    def online_volume_copy(self, online_volume_copy):
        """
        Sets the online_volume_copy of this ThinVolumeEx.


        :param online_volume_copy: The online_volume_copy of this ThinVolumeEx.
        :type: bool
        """
        self._online_volume_copy = online_volume_copy

    @property
    def total_size_in_bytes(self):
        """
        Gets the total_size_in_bytes of this ThinVolumeEx.


        :return: The total_size_in_bytes of this ThinVolumeEx.
        :rtype: int
        :required/optional: optional
        """
        return self._total_size_in_bytes

    @total_size_in_bytes.setter
    def total_size_in_bytes(self, total_size_in_bytes):
        """
        Sets the total_size_in_bytes of this ThinVolumeEx.


        :param total_size_in_bytes: The total_size_in_bytes of this ThinVolumeEx.
        :type: int
        """
        self._total_size_in_bytes = total_size_in_bytes

    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`
        """
        if self is None:
           return None
        return self.to_str()

    def __eq__(self, other):
        """
        Returns true if both objects are equal
        """
        if self is None or other is None:
            return None
        return self.__dict__ == other.__dict__

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

