# coding: utf-8

"""
HardwareInventoryResponse.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 HardwareInventoryResponse(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self):
        """
        HardwareInventoryResponse - 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 = {
            'drives': 'list[DriveEx]',  # (required parameter)
            'ib_ports': 'list[IBInterfacePort]',  # (required parameter)
            'iscsi_ports': 'list[IScsiInterfacePort]',  # (required parameter)
            'fibre_ports': 'list[FibreInterfacePort]',  # (required parameter)
            'sas_ports': 'list[SasInterfacePort]',  # (required parameter)
            'sas_expanders': 'list[SasExpander]',  # (required parameter)
            'channel_ports': 'list[ChannelPort]',  # (required parameter)
            'trays': 'list[TrayEx]',  # (required parameter)
            'drawers': 'list[Drawer]',  # (required parameter)
            'controllers': 'list[Controller]',  # (required parameter)
            'batteries': 'list[BatteryEx]',  # (required parameter)
            'fans': 'list[Fan]',  # (required parameter)
            'host_boards': 'list[HostBoard]',  # (required parameter)
            'power_supplies': 'list[PowerSupply]',  # (required parameter)
            'nvsram_version': 'str',  # (required parameter)
            'cache_memory_dimms': 'list[CacheMemoryDimm]',  # (required parameter)
            'cache_backup_devices': 'list[CacheBackupDevice]',  # (required parameter)
            'support_cr_us': 'list[SupportCRU]',  # (required parameter)
            'esms': 'list[Esm]',  # (required parameter)
            'sfps': 'list[Sfp]',  # (required parameter)
            'thermal_sensors': 'list[ThermalSensor]'
        }

        self.attribute_map = {
            'drives': 'drives',  # (required parameter)
            'ib_ports': 'ibPorts',  # (required parameter)
            'iscsi_ports': 'iscsiPorts',  # (required parameter)
            'fibre_ports': 'fibrePorts',  # (required parameter)
            'sas_ports': 'sasPorts',  # (required parameter)
            'sas_expanders': 'sasExpanders',  # (required parameter)
            'channel_ports': 'channelPorts',  # (required parameter)
            'trays': 'trays',  # (required parameter)
            'drawers': 'drawers',  # (required parameter)
            'controllers': 'controllers',  # (required parameter)
            'batteries': 'batteries',  # (required parameter)
            'fans': 'fans',  # (required parameter)
            'host_boards': 'hostBoards',  # (required parameter)
            'power_supplies': 'powerSupplies',  # (required parameter)
            'nvsram_version': 'nvsramVersion',  # (required parameter)
            'cache_memory_dimms': 'cacheMemoryDimms',  # (required parameter)
            'cache_backup_devices': 'cacheBackupDevices',  # (required parameter)
            'support_cr_us': 'supportCRUs',  # (required parameter)
            'esms': 'esms',  # (required parameter)
            'sfps': 'sfps',  # (required parameter)
            'thermal_sensors': 'thermalSensors'
        }

        self._drives = None
        self._ib_ports = None
        self._iscsi_ports = None
        self._fibre_ports = None
        self._sas_ports = None
        self._sas_expanders = None
        self._channel_ports = None
        self._trays = None
        self._drawers = None
        self._controllers = None
        self._batteries = None
        self._fans = None
        self._host_boards = None
        self._power_supplies = None
        self._nvsram_version = None
        self._cache_memory_dimms = None
        self._cache_backup_devices = None
        self._support_cr_us = None
        self._esms = None
        self._sfps = None
        self._thermal_sensors = None

    @property
    def drives(self):
        """
        Gets the drives of this HardwareInventoryResponse.
        A list of the disk drives in the storage system.

        :return: The drives of this HardwareInventoryResponse.
        :rtype: list[DriveEx]
        :required/optional: required
        """
        return self._drives

    @drives.setter
    def drives(self, drives):
        """
        Sets the drives of this HardwareInventoryResponse.
        A list of the disk drives in the storage system.

        :param drives: The drives of this HardwareInventoryResponse.
        :type: list[DriveEx]
        """
        self._drives = drives

    @property
    def ib_ports(self):
        """
        Gets the ib_ports of this HardwareInventoryResponse.
        IB Ports

        :return: The ib_ports of this HardwareInventoryResponse.
        :rtype: list[IBInterfacePort]
        :required/optional: required
        """
        return self._ib_ports

    @ib_ports.setter
    def ib_ports(self, ib_ports):
        """
        Sets the ib_ports of this HardwareInventoryResponse.
        IB Ports

        :param ib_ports: The ib_ports of this HardwareInventoryResponse.
        :type: list[IBInterfacePort]
        """
        self._ib_ports = ib_ports

    @property
    def iscsi_ports(self):
        """
        Gets the iscsi_ports of this HardwareInventoryResponse.
        ISCSI Port

        :return: The iscsi_ports of this HardwareInventoryResponse.
        :rtype: list[IScsiInterfacePort]
        :required/optional: required
        """
        return self._iscsi_ports

    @iscsi_ports.setter
    def iscsi_ports(self, iscsi_ports):
        """
        Sets the iscsi_ports of this HardwareInventoryResponse.
        ISCSI Port

        :param iscsi_ports: The iscsi_ports of this HardwareInventoryResponse.
        :type: list[IScsiInterfacePort]
        """
        self._iscsi_ports = iscsi_ports

    @property
    def fibre_ports(self):
        """
        Gets the fibre_ports of this HardwareInventoryResponse.
        Fibre Ports

        :return: The fibre_ports of this HardwareInventoryResponse.
        :rtype: list[FibreInterfacePort]
        :required/optional: required
        """
        return self._fibre_ports

    @fibre_ports.setter
    def fibre_ports(self, fibre_ports):
        """
        Sets the fibre_ports of this HardwareInventoryResponse.
        Fibre Ports

        :param fibre_ports: The fibre_ports of this HardwareInventoryResponse.
        :type: list[FibreInterfacePort]
        """
        self._fibre_ports = fibre_ports

    @property
    def sas_ports(self):
        """
        Gets the sas_ports of this HardwareInventoryResponse.
        SAS Ports

        :return: The sas_ports of this HardwareInventoryResponse.
        :rtype: list[SasInterfacePort]
        :required/optional: required
        """
        return self._sas_ports

    @sas_ports.setter
    def sas_ports(self, sas_ports):
        """
        Sets the sas_ports of this HardwareInventoryResponse.
        SAS Ports

        :param sas_ports: The sas_ports of this HardwareInventoryResponse.
        :type: list[SasInterfacePort]
        """
        self._sas_ports = sas_ports

    @property
    def sas_expanders(self):
        """
        Gets the sas_expanders of this HardwareInventoryResponse.
        SAS Expanders

        :return: The sas_expanders of this HardwareInventoryResponse.
        :rtype: list[SasExpander]
        :required/optional: required
        """
        return self._sas_expanders

    @sas_expanders.setter
    def sas_expanders(self, sas_expanders):
        """
        Sets the sas_expanders of this HardwareInventoryResponse.
        SAS Expanders

        :param sas_expanders: The sas_expanders of this HardwareInventoryResponse.
        :type: list[SasExpander]
        """
        self._sas_expanders = sas_expanders

    @property
    def channel_ports(self):
        """
        Gets the channel_ports of this HardwareInventoryResponse.
        Channel Ports

        :return: The channel_ports of this HardwareInventoryResponse.
        :rtype: list[ChannelPort]
        :required/optional: required
        """
        return self._channel_ports

    @channel_ports.setter
    def channel_ports(self, channel_ports):
        """
        Sets the channel_ports of this HardwareInventoryResponse.
        Channel Ports

        :param channel_ports: The channel_ports of this HardwareInventoryResponse.
        :type: list[ChannelPort]
        """
        self._channel_ports = channel_ports

    @property
    def trays(self):
        """
        Gets the trays of this HardwareInventoryResponse.
        A list of the disk trays in the storage system.

        :return: The trays of this HardwareInventoryResponse.
        :rtype: list[TrayEx]
        :required/optional: required
        """
        return self._trays

    @trays.setter
    def trays(self, trays):
        """
        Sets the trays of this HardwareInventoryResponse.
        A list of the disk trays in the storage system.

        :param trays: The trays of this HardwareInventoryResponse.
        :type: list[TrayEx]
        """
        self._trays = trays

    @property
    def drawers(self):
        """
        Gets the drawers of this HardwareInventoryResponse.
        A list of the disk drawers

        :return: The drawers of this HardwareInventoryResponse.
        :rtype: list[Drawer]
        :required/optional: required
        """
        return self._drawers

    @drawers.setter
    def drawers(self, drawers):
        """
        Sets the drawers of this HardwareInventoryResponse.
        A list of the disk drawers

        :param drawers: The drawers of this HardwareInventoryResponse.
        :type: list[Drawer]
        """
        self._drawers = drawers

    @property
    def controllers(self):
        """
        Gets the controllers of this HardwareInventoryResponse.
        A list of the controllers in the storage system.

        :return: The controllers of this HardwareInventoryResponse.
        :rtype: list[Controller]
        :required/optional: required
        """
        return self._controllers

    @controllers.setter
    def controllers(self, controllers):
        """
        Sets the controllers of this HardwareInventoryResponse.
        A list of the controllers in the storage system.

        :param controllers: The controllers of this HardwareInventoryResponse.
        :type: list[Controller]
        """
        self._controllers = controllers

    @property
    def batteries(self):
        """
        Gets the batteries of this HardwareInventoryResponse.
        A list of the batteries in the storage system.

        :return: The batteries of this HardwareInventoryResponse.
        :rtype: list[BatteryEx]
        :required/optional: required
        """
        return self._batteries

    @batteries.setter
    def batteries(self, batteries):
        """
        Sets the batteries of this HardwareInventoryResponse.
        A list of the batteries in the storage system.

        :param batteries: The batteries of this HardwareInventoryResponse.
        :type: list[BatteryEx]
        """
        self._batteries = batteries

    @property
    def fans(self):
        """
        Gets the fans of this HardwareInventoryResponse.
        A list of the fans in the storage system.

        :return: The fans of this HardwareInventoryResponse.
        :rtype: list[Fan]
        :required/optional: required
        """
        return self._fans

    @fans.setter
    def fans(self, fans):
        """
        Sets the fans of this HardwareInventoryResponse.
        A list of the fans in the storage system.

        :param fans: The fans of this HardwareInventoryResponse.
        :type: list[Fan]
        """
        self._fans = fans

    @property
    def host_boards(self):
        """
        Gets the host_boards of this HardwareInventoryResponse.
        A list of the host interface cards in the storage system.

        :return: The host_boards of this HardwareInventoryResponse.
        :rtype: list[HostBoard]
        :required/optional: required
        """
        return self._host_boards

    @host_boards.setter
    def host_boards(self, host_boards):
        """
        Sets the host_boards of this HardwareInventoryResponse.
        A list of the host interface cards in the storage system.

        :param host_boards: The host_boards of this HardwareInventoryResponse.
        :type: list[HostBoard]
        """
        self._host_boards = host_boards

    @property
    def power_supplies(self):
        """
        Gets the power_supplies of this HardwareInventoryResponse.
        A list of the power supplies in the storage system.

        :return: The power_supplies of this HardwareInventoryResponse.
        :rtype: list[PowerSupply]
        :required/optional: required
        """
        return self._power_supplies

    @power_supplies.setter
    def power_supplies(self, power_supplies):
        """
        Sets the power_supplies of this HardwareInventoryResponse.
        A list of the power supplies in the storage system.

        :param power_supplies: The power_supplies of this HardwareInventoryResponse.
        :type: list[PowerSupply]
        """
        self._power_supplies = power_supplies

    @property
    def nvsram_version(self):
        """
        Gets the nvsram_version of this HardwareInventoryResponse.
        The version of NVSRAM settings installed on the storage system.

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

    @nvsram_version.setter
    def nvsram_version(self, nvsram_version):
        """
        Sets the nvsram_version of this HardwareInventoryResponse.
        The version of NVSRAM settings installed on the storage system.

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

    @property
    def cache_memory_dimms(self):
        """
        Gets the cache_memory_dimms of this HardwareInventoryResponse.
        The list of processor memory DIMMs installed on the storage system.

        :return: The cache_memory_dimms of this HardwareInventoryResponse.
        :rtype: list[CacheMemoryDimm]
        :required/optional: required
        """
        return self._cache_memory_dimms

    @cache_memory_dimms.setter
    def cache_memory_dimms(self, cache_memory_dimms):
        """
        Sets the cache_memory_dimms of this HardwareInventoryResponse.
        The list of processor memory DIMMs installed on the storage system.

        :param cache_memory_dimms: The cache_memory_dimms of this HardwareInventoryResponse.
        :type: list[CacheMemoryDimm]
        """
        self._cache_memory_dimms = cache_memory_dimms

    @property
    def cache_backup_devices(self):
        """
        Gets the cache_backup_devices of this HardwareInventoryResponse.
        The list of cache backup modules installed on the storage system.

        :return: The cache_backup_devices of this HardwareInventoryResponse.
        :rtype: list[CacheBackupDevice]
        :required/optional: required
        """
        return self._cache_backup_devices

    @cache_backup_devices.setter
    def cache_backup_devices(self, cache_backup_devices):
        """
        Sets the cache_backup_devices of this HardwareInventoryResponse.
        The list of cache backup modules installed on the storage system.

        :param cache_backup_devices: The cache_backup_devices of this HardwareInventoryResponse.
        :type: list[CacheBackupDevice]
        """
        self._cache_backup_devices = cache_backup_devices

    @property
    def support_cr_us(self):
        """
        Gets the support_cr_us of this HardwareInventoryResponse.
        A list of the support CRUs in the storage system.

        :return: The support_cr_us of this HardwareInventoryResponse.
        :rtype: list[SupportCRU]
        :required/optional: required
        """
        return self._support_cr_us

    @support_cr_us.setter
    def support_cr_us(self, support_cr_us):
        """
        Sets the support_cr_us of this HardwareInventoryResponse.
        A list of the support CRUs in the storage system.

        :param support_cr_us: The support_cr_us of this HardwareInventoryResponse.
        :type: list[SupportCRU]
        """
        self._support_cr_us = support_cr_us

    @property
    def esms(self):
        """
        Gets the esms of this HardwareInventoryResponse.
        A list of the ESMs in the storage system.

        :return: The esms of this HardwareInventoryResponse.
        :rtype: list[Esm]
        :required/optional: required
        """
        return self._esms

    @esms.setter
    def esms(self, esms):
        """
        Sets the esms of this HardwareInventoryResponse.
        A list of the ESMs in the storage system.

        :param esms: The esms of this HardwareInventoryResponse.
        :type: list[Esm]
        """
        self._esms = esms

    @property
    def sfps(self):
        """
        Gets the sfps of this HardwareInventoryResponse.
        A list of the SFPs in the storage system.

        :return: The sfps of this HardwareInventoryResponse.
        :rtype: list[Sfp]
        :required/optional: required
        """
        return self._sfps

    @sfps.setter
    def sfps(self, sfps):
        """
        Sets the sfps of this HardwareInventoryResponse.
        A list of the SFPs in the storage system.

        :param sfps: The sfps of this HardwareInventoryResponse.
        :type: list[Sfp]
        """
        self._sfps = sfps

    @property
    def thermal_sensors(self):
        """
        Gets the thermal_sensors of this HardwareInventoryResponse.
        A list of the thermal sensors in the storage system.

        :return: The thermal_sensors of this HardwareInventoryResponse.
        :rtype: list[ThermalSensor]
        :required/optional: required
        """
        return self._thermal_sensors

    @thermal_sensors.setter
    def thermal_sensors(self, thermal_sensors):
        """
        Sets the thermal_sensors of this HardwareInventoryResponse.
        A list of the thermal sensors in the storage system.

        :param thermal_sensors: The thermal_sensors of this HardwareInventoryResponse.
        :type: list[ThermalSensor]
        """
        self._thermal_sensors = thermal_sensors

    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

