# coding: utf-8

"""
StorageArray.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 StorageArray(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self):
        """
        StorageArray - 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 = {
            'sa_data': 'SAData',  # (required parameter)
            'safe_id': 'SAIdentifier',  # (required parameter)
            'cache': 'SACache',  # (required parameter)
            'access_volume': 'AccessVolume',  # (required parameter)
            'feature_parameters': 'FeatureParams',  # (required parameter)
            'media_scan_period': 'int',  # (required parameter)
            'capabilities': 'list[str]',  # (required parameter)
            'premium_features': 'list[PremiumFeature]',  # (required parameter)
            'tray_position_list': 'TrayPositionList',  # (required parameter)
            'host_port_type': 'list[str]',  # (required parameter)
            'host_specific_vals': 'list[HostSpecificValues]',  # (required parameter)
            'compatibility': 'list[CompatibleFirmware]',  # (required parameter)
            'usage_hints': 'list[VolumeUsageHint]',  # (required parameter)
            'defined_partition_count': 'int',  # (required parameter)
            'default_host_port_type_index': 'int',  # (required parameter)
            'remote_access_id': 'str',  # (required parameter)
            'remote_mirroring_active': 'bool',  # (required parameter)
            'vol_xfer_alert_delay_period': 'int',  # (required parameter)
            'reserved1': 'str',  
            'reserved2': 'str',  
            'staged_firmware': 'StagedFirmware',  # (required parameter)
            'unreadable_sectors': 'UnreadableSectors',  # (required parameter)
            'drive_channels': 'list[DriveChannel]',  # (required parameter)
            'port_locations': 'list[DriveChannelPort]',  # (required parameter)
            'ddc_tag': 'int',  # (required parameter)
            'feature_bundle': 'FeatureBundle',  # (required parameter)
            'feature_state': 'list[FeatureState]',  # (required parameter)
            'channel_port_locations': 'list[ChannelPort]',  # (required parameter)
            'iscsi_entity_data': 'IscsiEntityData',  # (required parameter)
            'host_type': 'list[str]',  # (required parameter)
            'default_host_type_index': 'int',  # (required parameter)
            'rvm_controller_host_channel': 'int',  # (required parameter)
            'smart_battery_data': 'SmartBatteryData',  # (required parameter)
            'invalid_system_config': 'bool',  # (required parameter)
            'security_lock_key': 'bool',  # (required parameter)
            'lock_key_id_ref': 'str',  # (required parameter)
            'syslog_configuration': 'SyslogConfiguration',  # (required parameter)
            'security_external_kms_enable': 'bool',  # (required parameter)
            'new_key_sequence': 'int',  # (required parameter)
            'security_external_kms_key_status': 'str',  # (required parameter)
            'lock_key_needed_list': 'list[str]',  # (required parameter)
            'dpl_core_dump_data': 'DPLCoreDumpData',  # (required parameter)
            'fc_rvm_state': 'str',  # (required parameter)
            'asup_enabled': 'bool',  # (required parameter)
            'asup_on_demand_enabled': 'bool',  # (required parameter)
            'asup_remote_diags_enabled': 'bool',  # (required parameter)
            'ioc_dump_data': 'IOCDumpData',  # (required parameter)
            'drive_channel_port_disabled': 'bool',  # (required parameter)
            'direct_expansion_port_in_use': 'bool',  # (required parameter)
            'high_resolution_statistics_enabled': 'bool',  # (required parameter)
            'auto_load_balancing_enabled': 'bool',  # (required parameter)
            'vaaienabled': 'bool',  
            'odxenabled': 'bool'
        }

        self.attribute_map = {
            'sa_data': 'saData',  # (required parameter)
            'safe_id': 'safeId',  # (required parameter)
            'cache': 'cache',  # (required parameter)
            'access_volume': 'accessVolume',  # (required parameter)
            'feature_parameters': 'featureParameters',  # (required parameter)
            'media_scan_period': 'mediaScanPeriod',  # (required parameter)
            'capabilities': 'capabilities',  # (required parameter)
            'premium_features': 'premiumFeatures',  # (required parameter)
            'tray_position_list': 'trayPositionList',  # (required parameter)
            'host_port_type': 'hostPortType',  # (required parameter)
            'host_specific_vals': 'hostSpecificVals',  # (required parameter)
            'compatibility': 'compatibility',  # (required parameter)
            'usage_hints': 'usageHints',  # (required parameter)
            'defined_partition_count': 'definedPartitionCount',  # (required parameter)
            'default_host_port_type_index': 'defaultHostPortTypeIndex',  # (required parameter)
            'remote_access_id': 'remoteAccessID',  # (required parameter)
            'remote_mirroring_active': 'remoteMirroringActive',  # (required parameter)
            'vol_xfer_alert_delay_period': 'volXferAlertDelayPeriod',  # (required parameter)
            'reserved1': 'reserved1',  
            'reserved2': 'reserved2',  
            'staged_firmware': 'stagedFirmware',  # (required parameter)
            'unreadable_sectors': 'unreadableSectors',  # (required parameter)
            'drive_channels': 'driveChannels',  # (required parameter)
            'port_locations': 'portLocations',  # (required parameter)
            'ddc_tag': 'ddcTag',  # (required parameter)
            'feature_bundle': 'featureBundle',  # (required parameter)
            'feature_state': 'featureState',  # (required parameter)
            'channel_port_locations': 'channelPortLocations',  # (required parameter)
            'iscsi_entity_data': 'iscsiEntityData',  # (required parameter)
            'host_type': 'hostType',  # (required parameter)
            'default_host_type_index': 'defaultHostTypeIndex',  # (required parameter)
            'rvm_controller_host_channel': 'rvmControllerHostChannel',  # (required parameter)
            'smart_battery_data': 'smartBatteryData',  # (required parameter)
            'invalid_system_config': 'invalidSystemConfig',  # (required parameter)
            'security_lock_key': 'securityLockKey',  # (required parameter)
            'lock_key_id_ref': 'lockKeyIDRef',  # (required parameter)
            'syslog_configuration': 'syslogConfiguration',  # (required parameter)
            'security_external_kms_enable': 'securityExternalKmsEnable',  # (required parameter)
            'new_key_sequence': 'newKeySequence',  # (required parameter)
            'security_external_kms_key_status': 'securityExternalKmsKeyStatus',  # (required parameter)
            'lock_key_needed_list': 'lockKeyNeededList',  # (required parameter)
            'dpl_core_dump_data': 'dplCoreDumpData',  # (required parameter)
            'fc_rvm_state': 'fcRVMState',  # (required parameter)
            'asup_enabled': 'asupEnabled',  # (required parameter)
            'asup_on_demand_enabled': 'asupOnDemandEnabled',  # (required parameter)
            'asup_remote_diags_enabled': 'asupRemoteDiagsEnabled',  # (required parameter)
            'ioc_dump_data': 'iocDumpData',  # (required parameter)
            'drive_channel_port_disabled': 'driveChannelPortDisabled',  # (required parameter)
            'direct_expansion_port_in_use': 'directExpansionPortInUse',  # (required parameter)
            'high_resolution_statistics_enabled': 'highResolutionStatisticsEnabled',  # (required parameter)
            'auto_load_balancing_enabled': 'autoLoadBalancingEnabled',  # (required parameter)
            'vaaienabled': 'vaaienabled',  
            'odxenabled': 'odxenabled'
        }

        self._sa_data = None
        self._safe_id = None
        self._cache = None
        self._access_volume = None
        self._feature_parameters = None
        self._media_scan_period = None
        self._capabilities = None
        self._premium_features = None
        self._tray_position_list = None
        self._host_port_type = None
        self._host_specific_vals = None
        self._compatibility = None
        self._usage_hints = None
        self._defined_partition_count = None
        self._default_host_port_type_index = None
        self._remote_access_id = None
        self._remote_mirroring_active = None
        self._vol_xfer_alert_delay_period = None
        self._reserved1 = None
        self._reserved2 = None
        self._staged_firmware = None
        self._unreadable_sectors = None
        self._drive_channels = None
        self._port_locations = None
        self._ddc_tag = None
        self._feature_bundle = None
        self._feature_state = None
        self._channel_port_locations = None
        self._iscsi_entity_data = None
        self._host_type = None
        self._default_host_type_index = None
        self._rvm_controller_host_channel = None
        self._smart_battery_data = None
        self._invalid_system_config = None
        self._security_lock_key = None
        self._lock_key_id_ref = None
        self._syslog_configuration = None
        self._security_external_kms_enable = None
        self._new_key_sequence = None
        self._security_external_kms_key_status = None
        self._lock_key_needed_list = None
        self._dpl_core_dump_data = None
        self._fc_rvm_state = None
        self._asup_enabled = None
        self._asup_on_demand_enabled = None
        self._asup_remote_diags_enabled = None
        self._ioc_dump_data = None
        self._drive_channel_port_disabled = None
        self._direct_expansion_port_in_use = None
        self._high_resolution_statistics_enabled = None
        self._auto_load_balancing_enabled = None
        self._vaaienabled = None
        self._odxenabled = None

    @property
    def sa_data(self):
        """
        Gets the sa_data of this StorageArray.
        General information and characteristics of the storage array.

        :return: The sa_data of this StorageArray.
        :rtype: SAData
        :required/optional: required
        """
        return self._sa_data

    @sa_data.setter
    def sa_data(self, sa_data):
        """
        Sets the sa_data of this StorageArray.
        General information and characteristics of the storage array.

        :param sa_data: The sa_data of this StorageArray.
        :type: SAData
        """
        self._sa_data = sa_data

    @property
    def safe_id(self):
        """
        Gets the safe_id of this StorageArray.
        This field contains a unique identifier maintained by SAFE for use by storage management software. Storage management software uses this data to enable SAFE features and perform Feature Bundle migration.

        :return: The safe_id of this StorageArray.
        :rtype: SAIdentifier
        :required/optional: required
        """
        return self._safe_id

    @safe_id.setter
    def safe_id(self, safe_id):
        """
        Sets the safe_id of this StorageArray.
        This field contains a unique identifier maintained by SAFE for use by storage management software. Storage management software uses this data to enable SAFE features and perform Feature Bundle migration.

        :param safe_id: The safe_id of this StorageArray.
        :type: SAIdentifier
        """
        self._safe_id = safe_id

    @property
    def cache(self):
        """
        Gets the cache of this StorageArray.
        Information about cache settings that apply to the storage array as a whole.

        :return: The cache of this StorageArray.
        :rtype: SACache
        :required/optional: required
        """
        return self._cache

    @cache.setter
    def cache(self, cache):
        """
        Sets the cache of this StorageArray.
        Information about cache settings that apply to the storage array as a whole.

        :param cache: The cache of this StorageArray.
        :type: SACache
        """
        self._cache = cache

    @property
    def access_volume(self):
        """
        Gets the access_volume of this StorageArray.
        Information about the access volume that is used to convey configuration commands (via the UTM protocol) to the controllers within the storage array.

        :return: The access_volume of this StorageArray.
        :rtype: AccessVolume
        :required/optional: required
        """
        return self._access_volume

    @access_volume.setter
    def access_volume(self, access_volume):
        """
        Sets the access_volume of this StorageArray.
        Information about the access volume that is used to convey configuration commands (via the UTM protocol) to the controllers within the storage array.

        :param access_volume: The access_volume of this StorageArray.
        :type: AccessVolume
        """
        self._access_volume = access_volume

    @property
    def feature_parameters(self):
        """
        Gets the feature_parameters of this StorageArray.
        An object that provides information about the parameters and limits of certain functions that are supported by the controllers that reside within the storage array.

        :return: The feature_parameters of this StorageArray.
        :rtype: FeatureParams
        :required/optional: required
        """
        return self._feature_parameters

    @feature_parameters.setter
    def feature_parameters(self, feature_parameters):
        """
        Sets the feature_parameters of this StorageArray.
        An object that provides information about the parameters and limits of certain functions that are supported by the controllers that reside within the storage array.

        :param feature_parameters: The feature_parameters of this StorageArray.
        :type: FeatureParams
        """
        self._feature_parameters = feature_parameters

    @property
    def media_scan_period(self):
        """
        Gets the media_scan_period of this StorageArray.
        The current value of the media scan period parameter for the storage array. This value indicates the number of days over which a complete scan of the media will occur. The array controller(s) will attempt to achieve this configured period on a best-effort basis, but certain operational factors may cause slight deviations from the configured value.

        :return: The media_scan_period of this StorageArray.
        :rtype: int
        :required/optional: required
        """
        return self._media_scan_period

    @media_scan_period.setter
    def media_scan_period(self, media_scan_period):
        """
        Sets the media_scan_period of this StorageArray.
        The current value of the media scan period parameter for the storage array. This value indicates the number of days over which a complete scan of the media will occur. The array controller(s) will attempt to achieve this configured period on a best-effort basis, but certain operational factors may cause slight deviations from the configured value.

        :param media_scan_period: The media_scan_period of this StorageArray.
        :type: int
        """
        self._media_scan_period = media_scan_period

    @property
    def capabilities(self):
        """
        Gets the capabilities of this StorageArray.
        A variable-length array that provides an enumeration of the high-level capabilities that are supported by the controllers that reside within the storage array.

        :return: The capabilities of this StorageArray.
        :rtype: list[str]
        :required/optional: required
        """
        return self._capabilities

    @capabilities.setter
    def capabilities(self, capabilities):
        """
        Sets the capabilities of this StorageArray.
        A variable-length array that provides an enumeration of the high-level capabilities that are supported by the controllers that reside within the storage array.

        :param capabilities: The capabilities of this StorageArray.
        :type: list[str]
        """
        self._capabilities = capabilities

    @property
    def premium_features(self):
        """
        Gets the premium_features of this StorageArray.
        An object that provides information about the premium features that are currently enabled. This field is deprecated. The featureBundle and featureState fields can be used in its place to obtain information about how features are defined and the state they are in.

        :return: The premium_features of this StorageArray.
        :rtype: list[PremiumFeature]
        :required/optional: required
        """
        return self._premium_features

    @premium_features.setter
    def premium_features(self, premium_features):
        """
        Sets the premium_features of this StorageArray.
        An object that provides information about the premium features that are currently enabled. This field is deprecated. The featureBundle and featureState fields can be used in its place to obtain information about how features are defined and the state they are in.

        :param premium_features: The premium_features of this StorageArray.
        :type: list[PremiumFeature]
        """
        self._premium_features = premium_features

    @property
    def tray_position_list(self):
        """
        Gets the tray_position_list of this StorageArray.
        A list of tray positions that provides information to the client of the SYMbol interface about the relative physical positions of the trays (i.e. enclosures) that comprise the storage array. In the current implementation of the SYMbol interface, the client is responsible for providing this information to the controller for long-term storage, and also for retrieving it from the controller via this object. That is, the controller does not initially contain a valid tray position list; in fact, the default is an empty list. The client is responsible for obtaining any pertinent information about tray positions via an appropriate external mechanism, and then informing the controller about it via the setSATrayPositions procedure. Once this is done, the controller will always return the position information as part of the StorageArray object.

        :return: The tray_position_list of this StorageArray.
        :rtype: TrayPositionList
        :required/optional: required
        """
        return self._tray_position_list

    @tray_position_list.setter
    def tray_position_list(self, tray_position_list):
        """
        Sets the tray_position_list of this StorageArray.
        A list of tray positions that provides information to the client of the SYMbol interface about the relative physical positions of the trays (i.e. enclosures) that comprise the storage array. In the current implementation of the SYMbol interface, the client is responsible for providing this information to the controller for long-term storage, and also for retrieving it from the controller via this object. That is, the controller does not initially contain a valid tray position list; in fact, the default is an empty list. The client is responsible for obtaining any pertinent information about tray positions via an appropriate external mechanism, and then informing the controller about it via the setSATrayPositions procedure. Once this is done, the controller will always return the position information as part of the StorageArray object.

        :param tray_position_list: The tray_position_list of this StorageArray.
        :type: TrayPositionList
        """
        self._tray_position_list = tray_position_list

    @property
    def host_port_type(self):
        """
        Gets the host_port_type of this StorageArray.
        This variable-length array has label values that provide descriptive strings for each supported index value that can appear in the HostPort object and its associated elements.

        :return: The host_port_type of this StorageArray.
        :rtype: list[str]
        :required/optional: required
        """
        return self._host_port_type

    @host_port_type.setter
    def host_port_type(self, host_port_type):
        """
        Sets the host_port_type of this StorageArray.
        This variable-length array has label values that provide descriptive strings for each supported index value that can appear in the HostPort object and its associated elements.

        :param host_port_type: The host_port_type of this StorageArray.
        :type: list[str]
        """
        self._host_port_type = host_port_type

    @property
    def host_specific_vals(self):
        """
        Gets the host_specific_vals of this StorageArray.
        The values from the heterogeneous host regions. Each element in this array corresponds to a type in the hostPortType array, and the ordering of the types in this array matches that of the hostPortType array, i.e., hostPortType[i] is equal to hostSpecificVals[i].hostPortType.

        :return: The host_specific_vals of this StorageArray.
        :rtype: list[HostSpecificValues]
        :required/optional: required
        """
        return self._host_specific_vals

    @host_specific_vals.setter
    def host_specific_vals(self, host_specific_vals):
        """
        Sets the host_specific_vals of this StorageArray.
        The values from the heterogeneous host regions. Each element in this array corresponds to a type in the hostPortType array, and the ordering of the types in this array matches that of the hostPortType array, i.e., hostPortType[i] is equal to hostSpecificVals[i].hostPortType.

        :param host_specific_vals: The host_specific_vals of this StorageArray.
        :type: list[HostSpecificValues]
        """
        self._host_specific_vals = host_specific_vals

    @property
    def compatibility(self):
        """
        Gets the compatibility of this StorageArray.
        A variable-length array of firmware compatibility specifiers. These values generally identify certain levels of firmware that are allowed for downgrading the current storage array firmware.

        :return: The compatibility of this StorageArray.
        :rtype: list[CompatibleFirmware]
        :required/optional: required
        """
        return self._compatibility

    @compatibility.setter
    def compatibility(self, compatibility):
        """
        Sets the compatibility of this StorageArray.
        A variable-length array of firmware compatibility specifiers. These values generally identify certain levels of firmware that are allowed for downgrading the current storage array firmware.

        :param compatibility: The compatibility of this StorageArray.
        :type: list[CompatibleFirmware]
        """
        self._compatibility = compatibility

    @property
    def usage_hints(self):
        """
        Gets the usage_hints of this StorageArray.
        The recommended usage parameter combinations.

        :return: The usage_hints of this StorageArray.
        :rtype: list[VolumeUsageHint]
        :required/optional: required
        """
        return self._usage_hints

    @usage_hints.setter
    def usage_hints(self, usage_hints):
        """
        Sets the usage_hints of this StorageArray.
        The recommended usage parameter combinations.

        :param usage_hints: The usage_hints of this StorageArray.
        :type: list[VolumeUsageHint]
        """
        self._usage_hints = usage_hints

    @property
    def defined_partition_count(self):
        """
        Gets the defined_partition_count of this StorageArray.
        The number of partitions calculated from the user's current mappings.

        :return: The defined_partition_count of this StorageArray.
        :rtype: int
        :required/optional: required
        """
        return self._defined_partition_count

    @defined_partition_count.setter
    def defined_partition_count(self, defined_partition_count):
        """
        Sets the defined_partition_count of this StorageArray.
        The number of partitions calculated from the user's current mappings.

        :param defined_partition_count: The defined_partition_count of this StorageArray.
        :type: int
        """
        self._defined_partition_count = defined_partition_count

    @property
    def default_host_port_type_index(self):
        """
        Gets the default_host_port_type_index of this StorageArray.
        The Host Port Type Index to use for undefined and newly created host ports. The defaultHostPortTypeIndex can only be set if Storage Partitions are disabled through the SYMbol Interface.

        :return: The default_host_port_type_index of this StorageArray.
        :rtype: int
        :required/optional: required
        """
        return self._default_host_port_type_index

    @default_host_port_type_index.setter
    def default_host_port_type_index(self, default_host_port_type_index):
        """
        Sets the default_host_port_type_index of this StorageArray.
        The Host Port Type Index to use for undefined and newly created host ports. The defaultHostPortTypeIndex can only be set if Storage Partitions are disabled through the SYMbol Interface.

        :param default_host_port_type_index: The default_host_port_type_index of this StorageArray.
        :type: int
        """
        self._default_host_port_type_index = default_host_port_type_index

    @property
    def remote_access_id(self):
        """
        Gets the remote_access_id of this StorageArray.
        Array-specific ID used for remote device discovery.

        :return: The remote_access_id of this StorageArray.
        :rtype: str
        :required/optional: required
        """
        return self._remote_access_id

    @remote_access_id.setter
    def remote_access_id(self, remote_access_id):
        """
        Sets the remote_access_id of this StorageArray.
        Array-specific ID used for remote device discovery.

        :param remote_access_id: The remote_access_id of this StorageArray.
        :type: str
        """
        self._remote_access_id = remote_access_id

    @property
    def remote_mirroring_active(self):
        """
        Gets the remote_mirroring_active of this StorageArray.
        True if RVM is activated.

        :return: The remote_mirroring_active of this StorageArray.
        :rtype: bool
        :required/optional: required
        """
        return self._remote_mirroring_active

    @remote_mirroring_active.setter
    def remote_mirroring_active(self, remote_mirroring_active):
        """
        Sets the remote_mirroring_active of this StorageArray.
        True if RVM is activated.

        :param remote_mirroring_active: The remote_mirroring_active of this StorageArray.
        :type: bool
        """
        self._remote_mirroring_active = remote_mirroring_active

    @property
    def vol_xfer_alert_delay_period(self):
        """
        Gets the vol_xfer_alert_delay_period of this StorageArray.
        Volume transfer alert delay period.

        :return: The vol_xfer_alert_delay_period of this StorageArray.
        :rtype: int
        :required/optional: required
        """
        return self._vol_xfer_alert_delay_period

    @vol_xfer_alert_delay_period.setter
    def vol_xfer_alert_delay_period(self, vol_xfer_alert_delay_period):
        """
        Sets the vol_xfer_alert_delay_period of this StorageArray.
        Volume transfer alert delay period.

        :param vol_xfer_alert_delay_period: The vol_xfer_alert_delay_period of this StorageArray.
        :type: int
        """
        self._vol_xfer_alert_delay_period = vol_xfer_alert_delay_period

    @property
    def reserved1(self):
        """
        Gets the reserved1 of this StorageArray.


        :return: The reserved1 of this StorageArray.
        :rtype: str
        :required/optional: optional
        """
        return self._reserved1

    @reserved1.setter
    def reserved1(self, reserved1):
        """
        Sets the reserved1 of this StorageArray.


        :param reserved1: The reserved1 of this StorageArray.
        :type: str
        """
        self._reserved1 = reserved1

    @property
    def reserved2(self):
        """
        Gets the reserved2 of this StorageArray.


        :return: The reserved2 of this StorageArray.
        :rtype: str
        :required/optional: optional
        """
        return self._reserved2

    @reserved2.setter
    def reserved2(self, reserved2):
        """
        Sets the reserved2 of this StorageArray.


        :param reserved2: The reserved2 of this StorageArray.
        :type: str
        """
        self._reserved2 = reserved2

    @property
    def staged_firmware(self):
        """
        Gets the staged_firmware of this StorageArray.
        Information on possible staged controller firmware.

        :return: The staged_firmware of this StorageArray.
        :rtype: StagedFirmware
        :required/optional: required
        """
        return self._staged_firmware

    @staged_firmware.setter
    def staged_firmware(self, staged_firmware):
        """
        Sets the staged_firmware of this StorageArray.
        Information on possible staged controller firmware.

        :param staged_firmware: The staged_firmware of this StorageArray.
        :type: StagedFirmware
        """
        self._staged_firmware = staged_firmware

    @property
    def unreadable_sectors(self):
        """
        Gets the unreadable_sectors of this StorageArray.
        Storage array unreadable sector count and max limit.

        :return: The unreadable_sectors of this StorageArray.
        :rtype: UnreadableSectors
        :required/optional: required
        """
        return self._unreadable_sectors

    @unreadable_sectors.setter
    def unreadable_sectors(self, unreadable_sectors):
        """
        Sets the unreadable_sectors of this StorageArray.
        Storage array unreadable sector count and max limit.

        :param unreadable_sectors: The unreadable_sectors of this StorageArray.
        :type: UnreadableSectors
        """
        self._unreadable_sectors = unreadable_sectors

    @property
    def drive_channels(self):
        """
        Gets the drive_channels of this StorageArray.
        A list of drive channel structures.

        :return: The drive_channels of this StorageArray.
        :rtype: list[DriveChannel]
        :required/optional: required
        """
        return self._drive_channels

    @drive_channels.setter
    def drive_channels(self, drive_channels):
        """
        Sets the drive_channels of this StorageArray.
        A list of drive channel structures.

        :param drive_channels: The drive_channels of this StorageArray.
        :type: list[DriveChannel]
        """
        self._drive_channels = drive_channels

    @property
    def port_locations(self):
        """
        Gets the port_locations of this StorageArray.
        A list of drive channel port locations.

        :return: The port_locations of this StorageArray.
        :rtype: list[DriveChannelPort]
        :required/optional: required
        """
        return self._port_locations

    @port_locations.setter
    def port_locations(self, port_locations):
        """
        Sets the port_locations of this StorageArray.
        A list of drive channel port locations.

        :param port_locations: The port_locations of this StorageArray.
        :type: list[DriveChannelPort]
        """
        self._port_locations = port_locations

    @property
    def ddc_tag(self):
        """
        Gets the ddc_tag of this StorageArray.
        The tag value to be used in retrieving DDC log data. A value of DDC_NULL_TAG indicates there is no DDC log data to retrieve.

        :return: The ddc_tag of this StorageArray.
        :rtype: int
        :required/optional: required
        """
        return self._ddc_tag

    @ddc_tag.setter
    def ddc_tag(self, ddc_tag):
        """
        Sets the ddc_tag of this StorageArray.
        The tag value to be used in retrieving DDC log data. A value of DDC_NULL_TAG indicates there is no DDC log data to retrieve.

        :param ddc_tag: The ddc_tag of this StorageArray.
        :type: int
        """
        self._ddc_tag = ddc_tag

    @property
    def feature_bundle(self):
        """
        Gets the feature_bundle of this StorageArray.
        A structure describing the features and feature limits that are associated with this storage array product.

        :return: The feature_bundle of this StorageArray.
        :rtype: FeatureBundle
        :required/optional: required
        """
        return self._feature_bundle

    @feature_bundle.setter
    def feature_bundle(self, feature_bundle):
        """
        Sets the feature_bundle of this StorageArray.
        A structure describing the features and feature limits that are associated with this storage array product.

        :param feature_bundle: The feature_bundle of this StorageArray.
        :type: FeatureBundle
        """
        self._feature_bundle = feature_bundle

    @property
    def feature_state(self):
        """
        Gets the feature_state of this StorageArray.
        An array describing the current state of the array feature set - one element in the array per feature. This array is used by host software to track feature licensing compliance. It is populated with all supported features having both a feature ID and a capability code, regardless of their enabled or compliance state. Features that are not supported because of gold key restrictions or because there is no way to enable them (i.e., both SHIPPED_ENABLED and KEY_ENABLED are false) are not in the list.

        :return: The feature_state of this StorageArray.
        :rtype: list[FeatureState]
        :required/optional: required
        """
        return self._feature_state

    @feature_state.setter
    def feature_state(self, feature_state):
        """
        Sets the feature_state of this StorageArray.
        An array describing the current state of the array feature set - one element in the array per feature. This array is used by host software to track feature licensing compliance. It is populated with all supported features having both a feature ID and a capability code, regardless of their enabled or compliance state. Features that are not supported because of gold key restrictions or because there is no way to enable them (i.e., both SHIPPED_ENABLED and KEY_ENABLED are false) are not in the list.

        :param feature_state: The feature_state of this StorageArray.
        :type: list[FeatureState]
        """
        self._feature_state = feature_state

    @property
    def channel_port_locations(self):
        """
        Gets the channel_port_locations of this StorageArray.
        A list of all channel ports in the storage array, including host channel ports, drive channel ports, and ESM channel ports.

        :return: The channel_port_locations of this StorageArray.
        :rtype: list[ChannelPort]
        :required/optional: required
        """
        return self._channel_port_locations

    @channel_port_locations.setter
    def channel_port_locations(self, channel_port_locations):
        """
        Sets the channel_port_locations of this StorageArray.
        A list of all channel ports in the storage array, including host channel ports, drive channel ports, and ESM channel ports.

        :param channel_port_locations: The channel_port_locations of this StorageArray.
        :type: list[ChannelPort]
        """
        self._channel_port_locations = channel_port_locations

    @property
    def iscsi_entity_data(self):
        """
        Gets the iscsi_entity_data of this StorageArray.
        Information about the storage array pertaining to its role as an iSCSI entity.

        :return: The iscsi_entity_data of this StorageArray.
        :rtype: IscsiEntityData
        :required/optional: required
        """
        return self._iscsi_entity_data

    @iscsi_entity_data.setter
    def iscsi_entity_data(self, iscsi_entity_data):
        """
        Sets the iscsi_entity_data of this StorageArray.
        Information about the storage array pertaining to its role as an iSCSI entity.

        :param iscsi_entity_data: The iscsi_entity_data of this StorageArray.
        :type: IscsiEntityData
        """
        self._iscsi_entity_data = iscsi_entity_data

    @property
    def host_type(self):
        """
        Gets the host_type of this StorageArray.
        This variable-length array has label values that provide descriptive strings for each supported index value that can appear in the Host object. Zero-length strings are allowed and indicate that the associated host-specific NVSRAM regions have been cleared. This field should be used in place of the deprecated hostPortType field.

        :return: The host_type of this StorageArray.
        :rtype: list[str]
        :required/optional: required
        """
        return self._host_type

    @host_type.setter
    def host_type(self, host_type):
        """
        Sets the host_type of this StorageArray.
        This variable-length array has label values that provide descriptive strings for each supported index value that can appear in the Host object. Zero-length strings are allowed and indicate that the associated host-specific NVSRAM regions have been cleared. This field should be used in place of the deprecated hostPortType field.

        :param host_type: The host_type of this StorageArray.
        :type: list[str]
        """
        self._host_type = host_type

    @property
    def default_host_type_index(self):
        """
        Gets the default_host_type_index of this StorageArray.
        The Host Type Index to use for undefined and newly created host ports.

        :return: The default_host_type_index of this StorageArray.
        :rtype: int
        :required/optional: required
        """
        return self._default_host_type_index

    @default_host_type_index.setter
    def default_host_type_index(self, default_host_type_index):
        """
        Sets the default_host_type_index of this StorageArray.
        The Host Type Index to use for undefined and newly created host ports.

        :param default_host_type_index: The default_host_type_index of this StorageArray.
        :type: int
        """
        self._default_host_type_index = default_host_type_index

    @property
    def rvm_controller_host_channel(self):
        """
        Gets the rvm_controller_host_channel of this StorageArray.
        The number (in the range 1 through n, where n is the number of host ports on an individual controller) of the controller host channel that the firmware uses for remote volume mirroring. This field is set to zero when the data is unavailable or not applicable, including when the RVM feature is disabled,

        :return: The rvm_controller_host_channel of this StorageArray.
        :rtype: int
        :required/optional: required
        """
        return self._rvm_controller_host_channel

    @rvm_controller_host_channel.setter
    def rvm_controller_host_channel(self, rvm_controller_host_channel):
        """
        Sets the rvm_controller_host_channel of this StorageArray.
        The number (in the range 1 through n, where n is the number of host ports on an individual controller) of the controller host channel that the firmware uses for remote volume mirroring. This field is set to zero when the data is unavailable or not applicable, including when the RVM feature is disabled,

        :param rvm_controller_host_channel: The rvm_controller_host_channel of this StorageArray.
        :type: int
        """
        self._rvm_controller_host_channel = rvm_controller_host_channel

    @property
    def smart_battery_data(self):
        """
        Gets the smart_battery_data of this StorageArray.
        sub-structure of StorageArray contains info relating to smart battery configuration. Meaningful if the smartBatteryTechnology field in the featureParameters sub-structure is set to true. Moved to the Battery object instead to support per-battery reporting

        :return: The smart_battery_data of this StorageArray.
        :rtype: SmartBatteryData
        :required/optional: required
        """
        return self._smart_battery_data

    @smart_battery_data.setter
    def smart_battery_data(self, smart_battery_data):
        """
        Sets the smart_battery_data of this StorageArray.
        sub-structure of StorageArray contains info relating to smart battery configuration. Meaningful if the smartBatteryTechnology field in the featureParameters sub-structure is set to true. Moved to the Battery object instead to support per-battery reporting

        :param smart_battery_data: The smart_battery_data of this StorageArray.
        :type: SmartBatteryData
        """
        self._smart_battery_data = smart_battery_data

    @property
    def invalid_system_config(self):
        """
        Gets the invalid_system_config of this StorageArray.
        True if the storage array has an invalid system configuration; otherwise false.

        :return: The invalid_system_config of this StorageArray.
        :rtype: bool
        :required/optional: required
        """
        return self._invalid_system_config

    @invalid_system_config.setter
    def invalid_system_config(self, invalid_system_config):
        """
        Sets the invalid_system_config of this StorageArray.
        True if the storage array has an invalid system configuration; otherwise false.

        :param invalid_system_config: The invalid_system_config of this StorageArray.
        :type: bool
        """
        self._invalid_system_config = invalid_system_config

    @property
    def security_lock_key(self):
        """
        Gets the security_lock_key of this StorageArray.
        A boolean which describes the current state of the lock key. True if the array lock key has been set, otherwise false.

        :return: The security_lock_key of this StorageArray.
        :rtype: bool
        :required/optional: required
        """
        return self._security_lock_key

    @security_lock_key.setter
    def security_lock_key(self, security_lock_key):
        """
        Sets the security_lock_key of this StorageArray.
        A boolean which describes the current state of the lock key. True if the array lock key has been set, otherwise false.

        :param security_lock_key: The security_lock_key of this StorageArray.
        :type: bool
        """
        self._security_lock_key = security_lock_key

    @property
    def lock_key_id_ref(self):
        """
        Gets the lock_key_id_ref of this StorageArray.
        The lock key ID for the storage array.

        :return: The lock_key_id_ref of this StorageArray.
        :rtype: str
        :required/optional: required
        """
        return self._lock_key_id_ref

    @lock_key_id_ref.setter
    def lock_key_id_ref(self, lock_key_id_ref):
        """
        Sets the lock_key_id_ref of this StorageArray.
        The lock key ID for the storage array.

        :param lock_key_id_ref: The lock_key_id_ref of this StorageArray.
        :type: str
        """
        self._lock_key_id_ref = lock_key_id_ref

    @property
    def syslog_configuration(self):
        """
        Gets the syslog_configuration of this StorageArray.
        This field contains the configuration information used by the storage array for writing MEL events to a syslog server.

        :return: The syslog_configuration of this StorageArray.
        :rtype: SyslogConfiguration
        :required/optional: required
        """
        return self._syslog_configuration

    @syslog_configuration.setter
    def syslog_configuration(self, syslog_configuration):
        """
        Sets the syslog_configuration of this StorageArray.
        This field contains the configuration information used by the storage array for writing MEL events to a syslog server.

        :param syslog_configuration: The syslog_configuration of this StorageArray.
        :type: SyslogConfiguration
        """
        self._syslog_configuration = syslog_configuration

    @property
    def security_external_kms_enable(self):
        """
        Gets the security_external_kms_enable of this StorageArray.
        True if external key management is in effect and false if controller is using local key management.

        :return: The security_external_kms_enable of this StorageArray.
        :rtype: bool
        :required/optional: required
        """
        return self._security_external_kms_enable

    @security_external_kms_enable.setter
    def security_external_kms_enable(self, security_external_kms_enable):
        """
        Sets the security_external_kms_enable of this StorageArray.
        True if external key management is in effect and false if controller is using local key management.

        :param security_external_kms_enable: The security_external_kms_enable of this StorageArray.
        :type: bool
        """
        self._security_external_kms_enable = security_external_kms_enable

    @property
    def new_key_sequence(self):
        """
        Gets the new_key_sequence of this StorageArray.
        Sequence number used to serialize installNewKey requests from multiple proxy key management SYMbol servers.

        :return: The new_key_sequence of this StorageArray.
        :rtype: int
        :required/optional: required
        """
        return self._new_key_sequence

    @new_key_sequence.setter
    def new_key_sequence(self, new_key_sequence):
        """
        Sets the new_key_sequence of this StorageArray.
        Sequence number used to serialize installNewKey requests from multiple proxy key management SYMbol servers.

        :param new_key_sequence: The new_key_sequence of this StorageArray.
        :type: int
        """
        self._new_key_sequence = new_key_sequence

    @property
    def security_external_kms_key_status(self):
        """
        Gets the security_external_kms_key_status of this StorageArray.
        The controller's current key status. If external key management not enabled, set to EXTERNAL_KMS_KEY_STATUS_OK.

        :return: The security_external_kms_key_status of this StorageArray.
        :rtype: str
        :required/optional: required
        """
        return self._security_external_kms_key_status

    @security_external_kms_key_status.setter
    def security_external_kms_key_status(self, security_external_kms_key_status):
        """
        Sets the security_external_kms_key_status of this StorageArray.
        The controller's current key status. If external key management not enabled, set to EXTERNAL_KMS_KEY_STATUS_OK.

        :param security_external_kms_key_status: The security_external_kms_key_status of this StorageArray.
        :type: str
        """
        allowed_values = ["ok", "keyNeeded", "newKeyNeeded", "__UNDEFINED"]
        if security_external_kms_key_status not in allowed_values:
            raise ValueError(
                "Invalid value for `security_external_kms_key_status`, must be one of {0}"
                .format(allowed_values)
            )
        self._security_external_kms_key_status = security_external_kms_key_status

    @property
    def lock_key_needed_list(self):
        """
        Gets the lock_key_needed_list of this StorageArray.
        Contains the lock key IDs of keys needed by the array controller.

        :return: The lock_key_needed_list of this StorageArray.
        :rtype: list[str]
        :required/optional: required
        """
        return self._lock_key_needed_list

    @lock_key_needed_list.setter
    def lock_key_needed_list(self, lock_key_needed_list):
        """
        Sets the lock_key_needed_list of this StorageArray.
        Contains the lock key IDs of keys needed by the array controller.

        :param lock_key_needed_list: The lock_key_needed_list of this StorageArray.
        :type: list[str]
        """
        self._lock_key_needed_list = lock_key_needed_list

    @property
    def dpl_core_dump_data(self):
        """
        Gets the dpl_core_dump_data of this StorageArray.
        Information about a core dump in controller memory, if one exists.

        :return: The dpl_core_dump_data of this StorageArray.
        :rtype: DPLCoreDumpData
        :required/optional: required
        """
        return self._dpl_core_dump_data

    @dpl_core_dump_data.setter
    def dpl_core_dump_data(self, dpl_core_dump_data):
        """
        Sets the dpl_core_dump_data of this StorageArray.
        Information about a core dump in controller memory, if one exists.

        :param dpl_core_dump_data: The dpl_core_dump_data of this StorageArray.
        :type: DPLCoreDumpData
        """
        self._dpl_core_dump_data = dpl_core_dump_data

    @property
    def fc_rvm_state(self):
        """
        Gets the fc_rvm_state of this StorageArray.
        Indicator of whether fibre channel remote mirroring has been enabled, and if so, whether it is enabled for use by legacy (synchronous) mirroring or ARVM. If this is set to something other than FC_MIRROR_STATE_DISABLED or FC_MIRROR_STATE_UNKNOWN, then the rvmControllerHostChannel field can be used to determine the particular host channel reserved for remote mirroring.

        :return: The fc_rvm_state of this StorageArray.
        :rtype: str
        :required/optional: required
        """
        return self._fc_rvm_state

    @fc_rvm_state.setter
    def fc_rvm_state(self, fc_rvm_state):
        """
        Sets the fc_rvm_state of this StorageArray.
        Indicator of whether fibre channel remote mirroring has been enabled, and if so, whether it is enabled for use by legacy (synchronous) mirroring or ARVM. If this is set to something other than FC_MIRROR_STATE_DISABLED or FC_MIRROR_STATE_UNKNOWN, then the rvmControllerHostChannel field can be used to determine the particular host channel reserved for remote mirroring.

        :param fc_rvm_state: The fc_rvm_state of this StorageArray.
        :type: str
        """
        allowed_values = ["unknown", "disabled", "enabledLegacyRvm", "enabledArvm", "enabledAll", "__UNDEFINED"]
        if fc_rvm_state not in allowed_values:
            raise ValueError(
                "Invalid value for `fc_rvm_state`, must be one of {0}"
                .format(allowed_values)
            )
        self._fc_rvm_state = fc_rvm_state

    @property
    def asup_enabled(self):
        """
        Gets the asup_enabled of this StorageArray.
        True if Autosupport is enabled.

        :return: The asup_enabled of this StorageArray.
        :rtype: bool
        :required/optional: required
        """
        return self._asup_enabled

    @asup_enabled.setter
    def asup_enabled(self, asup_enabled):
        """
        Sets the asup_enabled of this StorageArray.
        True if Autosupport is enabled.

        :param asup_enabled: The asup_enabled of this StorageArray.
        :type: bool
        """
        self._asup_enabled = asup_enabled

    @property
    def asup_on_demand_enabled(self):
        """
        Gets the asup_on_demand_enabled of this StorageArray.
        True if Autosupport On Demand is enabled.

        :return: The asup_on_demand_enabled of this StorageArray.
        :rtype: bool
        :required/optional: required
        """
        return self._asup_on_demand_enabled

    @asup_on_demand_enabled.setter
    def asup_on_demand_enabled(self, asup_on_demand_enabled):
        """
        Sets the asup_on_demand_enabled of this StorageArray.
        True if Autosupport On Demand is enabled.

        :param asup_on_demand_enabled: The asup_on_demand_enabled of this StorageArray.
        :type: bool
        """
        self._asup_on_demand_enabled = asup_on_demand_enabled

    @property
    def asup_remote_diags_enabled(self):
        """
        Gets the asup_remote_diags_enabled of this StorageArray.
        True if Autosupport On Demand Remote Diagnostics is enabled.

        :return: The asup_remote_diags_enabled of this StorageArray.
        :rtype: bool
        :required/optional: required
        """
        return self._asup_remote_diags_enabled

    @asup_remote_diags_enabled.setter
    def asup_remote_diags_enabled(self, asup_remote_diags_enabled):
        """
        Sets the asup_remote_diags_enabled of this StorageArray.
        True if Autosupport On Demand Remote Diagnostics is enabled.

        :param asup_remote_diags_enabled: The asup_remote_diags_enabled of this StorageArray.
        :type: bool
        """
        self._asup_remote_diags_enabled = asup_remote_diags_enabled

    @property
    def ioc_dump_data(self):
        """
        Gets the ioc_dump_data of this StorageArray.
        Information about an IOC Dump in controller memory, if one exists.

        :return: The ioc_dump_data of this StorageArray.
        :rtype: IOCDumpData
        :required/optional: required
        """
        return self._ioc_dump_data

    @ioc_dump_data.setter
    def ioc_dump_data(self, ioc_dump_data):
        """
        Sets the ioc_dump_data of this StorageArray.
        Information about an IOC Dump in controller memory, if one exists.

        :param ioc_dump_data: The ioc_dump_data of this StorageArray.
        :type: IOCDumpData
        """
        self._ioc_dump_data = ioc_dump_data

    @property
    def drive_channel_port_disabled(self):
        """
        Gets the drive_channel_port_disabled of this StorageArray.
        True if one or more drive channel ports have been disabled by the controllers to protect against faulty expansion cabling. This could have been necessitated by a miswire condition or by a bad expansion cable. Check the Recovery Events for an indication of which connection(s) have been disabled and correct the cabling as required.

        :return: The drive_channel_port_disabled of this StorageArray.
        :rtype: bool
        :required/optional: required
        """
        return self._drive_channel_port_disabled

    @drive_channel_port_disabled.setter
    def drive_channel_port_disabled(self, drive_channel_port_disabled):
        """
        Sets the drive_channel_port_disabled of this StorageArray.
        True if one or more drive channel ports have been disabled by the controllers to protect against faulty expansion cabling. This could have been necessitated by a miswire condition or by a bad expansion cable. Check the Recovery Events for an indication of which connection(s) have been disabled and correct the cabling as required.

        :param drive_channel_port_disabled: The drive_channel_port_disabled of this StorageArray.
        :type: bool
        """
        self._drive_channel_port_disabled = drive_channel_port_disabled

    @property
    def direct_expansion_port_in_use(self):
        """
        Gets the direct_expansion_port_in_use of this StorageArray.
        This boolean is true if direct expansion ports are in use by the controllers.

        :return: The direct_expansion_port_in_use of this StorageArray.
        :rtype: bool
        :required/optional: required
        """
        return self._direct_expansion_port_in_use

    @direct_expansion_port_in_use.setter
    def direct_expansion_port_in_use(self, direct_expansion_port_in_use):
        """
        Sets the direct_expansion_port_in_use of this StorageArray.
        This boolean is true if direct expansion ports are in use by the controllers.

        :param direct_expansion_port_in_use: The direct_expansion_port_in_use of this StorageArray.
        :type: bool
        """
        self._direct_expansion_port_in_use = direct_expansion_port_in_use

    @property
    def high_resolution_statistics_enabled(self):
        """
        Gets the high_resolution_statistics_enabled of this StorageArray.
        Cumulative Performance stats high resolution indicator

        :return: The high_resolution_statistics_enabled of this StorageArray.
        :rtype: bool
        :required/optional: required
        """
        return self._high_resolution_statistics_enabled

    @high_resolution_statistics_enabled.setter
    def high_resolution_statistics_enabled(self, high_resolution_statistics_enabled):
        """
        Sets the high_resolution_statistics_enabled of this StorageArray.
        Cumulative Performance stats high resolution indicator

        :param high_resolution_statistics_enabled: The high_resolution_statistics_enabled of this StorageArray.
        :type: bool
        """
        self._high_resolution_statistics_enabled = high_resolution_statistics_enabled

    @property
    def auto_load_balancing_enabled(self):
        """
        Gets the auto_load_balancing_enabled of this StorageArray.
        Auto Load Balancing is user-enabled on this array

        :return: The auto_load_balancing_enabled of this StorageArray.
        :rtype: bool
        :required/optional: required
        """
        return self._auto_load_balancing_enabled

    @auto_load_balancing_enabled.setter
    def auto_load_balancing_enabled(self, auto_load_balancing_enabled):
        """
        Sets the auto_load_balancing_enabled of this StorageArray.
        Auto Load Balancing is user-enabled on this array

        :param auto_load_balancing_enabled: The auto_load_balancing_enabled of this StorageArray.
        :type: bool
        """
        self._auto_load_balancing_enabled = auto_load_balancing_enabled

    @property
    def vaaienabled(self):
        """
        Gets the vaaienabled of this StorageArray.


        :return: The vaaienabled of this StorageArray.
        :rtype: bool
        :required/optional: optional
        """
        return self._vaaienabled

    @vaaienabled.setter
    def vaaienabled(self, vaaienabled):
        """
        Sets the vaaienabled of this StorageArray.


        :param vaaienabled: The vaaienabled of this StorageArray.
        :type: bool
        """
        self._vaaienabled = vaaienabled

    @property
    def odxenabled(self):
        """
        Gets the odxenabled of this StorageArray.


        :return: The odxenabled of this StorageArray.
        :rtype: bool
        :required/optional: optional
        """
        return self._odxenabled

    @odxenabled.setter
    def odxenabled(self, odxenabled):
        """
        Sets the odxenabled of this StorageArray.


        :param odxenabled: The odxenabled of this StorageArray.
        :type: bool
        """
        self._odxenabled = odxenabled

    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

