# coding: utf-8

"""
SAData.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 SAData(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self):
        """
        SAData - 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 = {
            'needs_attention': 'bool',  # (required parameter)
            'fixing': 'bool',  # (required parameter)
            'sa_id': 'SAIdentifier',  # (required parameter)
            'management_class_name': 'str',  # (required parameter)
            'storage_array_label': 'str',  # (required parameter)
            'boot_time': 'int',  # (required parameter)
            'fw_version': 'str',  # (required parameter)
            'app_version': 'str',  # (required parameter)
            'boot_version': 'str',  # (required parameter)
            'nvsram_version': 'str',  # (required parameter)
            'fw_prefix': 'str',  # (required parameter)
            'chassis_serial_number': 'str',  # (required parameter)
            'event_configuration_data_version': 'str',  # (required parameter)
            'array_attributes': 'list[int]',  # (required parameter)
            'res4': 'list[int]',  
            'res5': 'list[int]',  
            'res6': 'list[int]',  
            'res7': 'str',  
            'extended_sa_data': 'ExtendedSAData'
        }

        self.attribute_map = {
            'needs_attention': 'needsAttention',  # (required parameter)
            'fixing': 'fixing',  # (required parameter)
            'sa_id': 'saId',  # (required parameter)
            'management_class_name': 'managementClassName',  # (required parameter)
            'storage_array_label': 'storageArrayLabel',  # (required parameter)
            'boot_time': 'bootTime',  # (required parameter)
            'fw_version': 'fwVersion',  # (required parameter)
            'app_version': 'appVersion',  # (required parameter)
            'boot_version': 'bootVersion',  # (required parameter)
            'nvsram_version': 'nvsramVersion',  # (required parameter)
            'fw_prefix': 'fwPrefix',  # (required parameter)
            'chassis_serial_number': 'chassisSerialNumber',  # (required parameter)
            'event_configuration_data_version': 'eventConfigurationDataVersion',  # (required parameter)
            'array_attributes': 'arrayAttributes',  # (required parameter)
            'res4': 'res4',  
            'res5': 'res5',  
            'res6': 'res6',  
            'res7': 'res7',  
            'extended_sa_data': 'extendedSAData'
        }

        self._needs_attention = None
        self._fixing = None
        self._sa_id = None
        self._management_class_name = None
        self._storage_array_label = None
        self._boot_time = None
        self._fw_version = None
        self._app_version = None
        self._boot_version = None
        self._nvsram_version = None
        self._fw_prefix = None
        self._chassis_serial_number = None
        self._event_configuration_data_version = None
        self._array_attributes = None
        self._res4 = None
        self._res5 = None
        self._res6 = None
        self._res7 = None
        self._extended_sa_data = None

    @property
    def needs_attention(self):
        """
        Gets the needs_attention of this SAData.
        An indication of whether the array needs attention. A value of true is returned if there are any components that have been marked failed for any reason. Otherwise, if all components are operating properly, a value of false is returned.

        :return: The needs_attention of this SAData.
        :rtype: bool
        :required/optional: required
        """
        return self._needs_attention

    @needs_attention.setter
    def needs_attention(self, needs_attention):
        """
        Sets the needs_attention of this SAData.
        An indication of whether the array needs attention. A value of true is returned if there are any components that have been marked failed for any reason. Otherwise, if all components are operating properly, a value of false is returned.

        :param needs_attention: The needs_attention of this SAData.
        :type: bool
        """
        self._needs_attention = needs_attention

    @property
    def fixing(self):
        """
        Gets the fixing of this SAData.
        An indication of whether the array is in the process of recovering from a Needs Attention condition. A value of true indicates that no physical components are currently marked failed, but that some residual recovery activity (such as reconstruction, copyback, etc.) is still in progress.

        :return: The fixing of this SAData.
        :rtype: bool
        :required/optional: required
        """
        return self._fixing

    @fixing.setter
    def fixing(self, fixing):
        """
        Sets the fixing of this SAData.
        An indication of whether the array is in the process of recovering from a Needs Attention condition. A value of true indicates that no physical components are currently marked failed, but that some residual recovery activity (such as reconstruction, copyback, etc.) is still in progress.

        :param fixing: The fixing of this SAData.
        :type: bool
        """
        self._fixing = fixing

    @property
    def sa_id(self):
        """
        Gets the sa_id of this SAData.
        The globally-unique identifier value for this storage array.

        :return: The sa_id of this SAData.
        :rtype: SAIdentifier
        :required/optional: required
        """
        return self._sa_id

    @sa_id.setter
    def sa_id(self, sa_id):
        """
        Sets the sa_id of this SAData.
        The globally-unique identifier value for this storage array.

        :param sa_id: The sa_id of this SAData.
        :type: SAIdentifier
        """
        self._sa_id = sa_id

    @property
    def management_class_name(self):
        """
        Gets the management_class_name of this SAData.
        The name of the application-level entity required to manage configuration operations for the storage array.

        :return: The management_class_name of this SAData.
        :rtype: str
        :required/optional: required
        """
        return self._management_class_name

    @management_class_name.setter
    def management_class_name(self, management_class_name):
        """
        Sets the management_class_name of this SAData.
        The name of the application-level entity required to manage configuration operations for the storage array.

        :param management_class_name: The management_class_name of this SAData.
        :type: str
        """
        self._management_class_name = management_class_name

    @property
    def storage_array_label(self):
        """
        Gets the storage_array_label of this SAData.
        The user-assigned label for the storage array.

        :return: The storage_array_label of this SAData.
        :rtype: str
        :required/optional: required
        """
        return self._storage_array_label

    @storage_array_label.setter
    def storage_array_label(self, storage_array_label):
        """
        Sets the storage_array_label of this SAData.
        The user-assigned label for the storage array.

        :param storage_array_label: The storage_array_label of this SAData.
        :type: str
        """
        self._storage_array_label = storage_array_label

    @property
    def boot_time(self):
        """
        Gets the boot_time of this SAData.
        The timestamp value for the time at which the responding controller last booted. Note that this value may differ between the individual controllers of a storage array. This value is defined in terms of the number of seconds since midnight GMT on January 1, 1970.

        :return: The boot_time of this SAData.
        :rtype: int
        :required/optional: required
        """
        return self._boot_time

    @boot_time.setter
    def boot_time(self, boot_time):
        """
        Sets the boot_time of this SAData.
        The timestamp value for the time at which the responding controller last booted. Note that this value may differ between the individual controllers of a storage array. This value is defined in terms of the number of seconds since midnight GMT on January 1, 1970.

        :param boot_time: The boot_time of this SAData.
        :type: int
        """
        self._boot_time = boot_time

    @property
    def fw_version(self):
        """
        Gets the fw_version of this SAData.
        The version identifier of the currently-installed array firmware.

        :return: The fw_version of this SAData.
        :rtype: str
        :required/optional: required
        """
        return self._fw_version

    @fw_version.setter
    def fw_version(self, fw_version):
        """
        Sets the fw_version of this SAData.
        The version identifier of the currently-installed array firmware.

        :param fw_version: The fw_version of this SAData.
        :type: str
        """
        self._fw_version = fw_version

    @property
    def app_version(self):
        """
        Gets the app_version of this SAData.
        The version identifier of the \"application\" component of the currently-installed array firmware.

        :return: The app_version of this SAData.
        :rtype: str
        :required/optional: required
        """
        return self._app_version

    @app_version.setter
    def app_version(self, app_version):
        """
        Sets the app_version of this SAData.
        The version identifier of the \"application\" component of the currently-installed array firmware.

        :param app_version: The app_version of this SAData.
        :type: str
        """
        self._app_version = app_version

    @property
    def boot_version(self):
        """
        Gets the boot_version of this SAData.
        The version identifier of the \"boot\" component of the currently-installed array firmware.

        :return: The boot_version of this SAData.
        :rtype: str
        :required/optional: required
        """
        return self._boot_version

    @boot_version.setter
    def boot_version(self, boot_version):
        """
        Sets the boot_version of this SAData.
        The version identifier of the \"boot\" component of the currently-installed array firmware.

        :param boot_version: The boot_version of this SAData.
        :type: str
        """
        self._boot_version = boot_version

    @property
    def nvsram_version(self):
        """
        Gets the nvsram_version of this SAData.
        An ASCII string that describes the currently-installed NVSRAM contents.

        :return: The nvsram_version of this SAData.
        :rtype: str
        :required/optional: required
        """
        return self._nvsram_version

    @nvsram_version.setter
    def nvsram_version(self, nvsram_version):
        """
        Sets the nvsram_version of this SAData.
        An ASCII string that describes the currently-installed NVSRAM contents.

        :param nvsram_version: The nvsram_version of this SAData.
        :type: str
        """
        self._nvsram_version = nvsram_version

    @property
    def fw_prefix(self):
        """
        Gets the fw_prefix of this SAData.
        An ASCII string that describes the firmware prefix.

        :return: The fw_prefix of this SAData.
        :rtype: str
        :required/optional: required
        """
        return self._fw_prefix

    @fw_prefix.setter
    def fw_prefix(self, fw_prefix):
        """
        Sets the fw_prefix of this SAData.
        An ASCII string that describes the firmware prefix.

        :param fw_prefix: The fw_prefix of this SAData.
        :type: str
        """
        self._fw_prefix = fw_prefix

    @property
    def chassis_serial_number(self):
        """
        Gets the chassis_serial_number of this SAData.
        An ASCII string that describes the chassis serial number.

        :return: The chassis_serial_number of this SAData.
        :rtype: str
        :required/optional: required
        """
        return self._chassis_serial_number

    @chassis_serial_number.setter
    def chassis_serial_number(self, chassis_serial_number):
        """
        Sets the chassis_serial_number of this SAData.
        An ASCII string that describes the chassis serial number.

        :param chassis_serial_number: The chassis_serial_number of this SAData.
        :type: str
        """
        self._chassis_serial_number = chassis_serial_number

    @property
    def event_configuration_data_version(self):
        """
        Gets the event_configuration_data_version of this SAData.
        An ASCII string that identifies the version of the MEL event configuration data. This is used for the event logging enhancements in Chessie 2.

        :return: The event_configuration_data_version of this SAData.
        :rtype: str
        :required/optional: required
        """
        return self._event_configuration_data_version

    @event_configuration_data_version.setter
    def event_configuration_data_version(self, event_configuration_data_version):
        """
        Sets the event_configuration_data_version of this SAData.
        An ASCII string that identifies the version of the MEL event configuration data. This is used for the event logging enhancements in Chessie 2.

        :param event_configuration_data_version: The event_configuration_data_version of this SAData.
        :type: str
        """
        self._event_configuration_data_version = event_configuration_data_version

    @property
    def array_attributes(self):
        """
        Gets the array_attributes of this SAData.
        SAAttributeID attribute-value pairs.

        :return: The array_attributes of this SAData.
        :rtype: list[int]
        :required/optional: required
        """
        return self._array_attributes

    @array_attributes.setter
    def array_attributes(self, array_attributes):
        """
        Sets the array_attributes of this SAData.
        SAAttributeID attribute-value pairs.

        :param array_attributes: The array_attributes of this SAData.
        :type: list[int]
        """
        self._array_attributes = array_attributes

    @property
    def res4(self):
        """
        Gets the res4 of this SAData.


        :return: The res4 of this SAData.
        :rtype: list[int]
        :required/optional: optional
        """
        return self._res4

    @res4.setter
    def res4(self, res4):
        """
        Sets the res4 of this SAData.


        :param res4: The res4 of this SAData.
        :type: list[int]
        """
        self._res4 = res4

    @property
    def res5(self):
        """
        Gets the res5 of this SAData.


        :return: The res5 of this SAData.
        :rtype: list[int]
        :required/optional: optional
        """
        return self._res5

    @res5.setter
    def res5(self, res5):
        """
        Sets the res5 of this SAData.


        :param res5: The res5 of this SAData.
        :type: list[int]
        """
        self._res5 = res5

    @property
    def res6(self):
        """
        Gets the res6 of this SAData.


        :return: The res6 of this SAData.
        :rtype: list[int]
        :required/optional: optional
        """
        return self._res6

    @res6.setter
    def res6(self, res6):
        """
        Sets the res6 of this SAData.


        :param res6: The res6 of this SAData.
        :type: list[int]
        """
        self._res6 = res6

    @property
    def res7(self):
        """
        Gets the res7 of this SAData.


        :return: The res7 of this SAData.
        :rtype: str
        :required/optional: optional
        """
        return self._res7

    @res7.setter
    def res7(self, res7):
        """
        Sets the res7 of this SAData.


        :param res7: The res7 of this SAData.
        :type: str
        """
        self._res7 = res7

    @property
    def extended_sa_data(self):
        """
        Gets the extended_sa_data of this SAData.
        This element allows additional content to be added to SAData with actually adding any new elements to the struct. The element replaces a reserved field that was of variable length.

        :return: The extended_sa_data of this SAData.
        :rtype: ExtendedSAData
        :required/optional: required
        """
        return self._extended_sa_data

    @extended_sa_data.setter
    def extended_sa_data(self, extended_sa_data):
        """
        Sets the extended_sa_data of this SAData.
        This element allows additional content to be added to SAData with actually adding any new elements to the struct. The element replaces a reserved field that was of variable length.

        :param extended_sa_data: The extended_sa_data of this SAData.
        :type: ExtendedSAData
        """
        self._extended_sa_data = extended_sa_data

    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

