# coding: utf-8

"""
ComponentLocation.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 ComponentLocation(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self):
        """
        ComponentLocation - 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 = {
            'event_component_type': 'str',  # (required parameter)
            'alarm_location': 'TraySlot',  
            'battery_tray': 'int',  
            'cache_backup_device_location': 'CacheBackupDeviceLocation',  
            'cache_memory_dimm_location': 'CacheMemoryDimmLocation',  
            'channel_loc': 'ChannelLocation',  
            'channel_port': 'int',  
            'chip_loc': 'TraySlot',  
            'controller_loc': 'TraySlot',  
            'ctlr_sfp_location': 'ControllerSfpLocation',  
            'soc_location': 'SocLocation',  
            'drive_loc': 'TraySlot',  
            'enclosure_tray': 'int',  
            'esm_tray': 'int',  
            'fan_tray': 'int',  
            'host_io_card_location': 'HostIoCardLocation',  
            'initiator_location': 'InitiatorLocation',  
            'interconnect_cru_location': 'TraySlot',  
            'isns_server_location': 'IsnsServerLocation',  
            'minihub_loc': 'MinihubLocation',  
            'port_cru_tray': 'int',  
            'power_supply_tray': 'int',  
            'sfp_location': 'TraySlot',  
            'support_cru_location': 'TraySlot',  
            'target_location': 'TargetLocation',  
            'temp_sensor_tray': 'int',  
            'label': 'str',  
            'group_number': 'int',  
            'host_location': 'str',  
            'host_port_location': 'HostPortLocation',  
            'drawer_location': 'TraySlot',  
            'component_relative_location': 'ComponentRelativeLocation',  
            'schedule': 'str',  
            'disk_pool': 'int',  
            'async_mirror_group': 'str',  
            'pit_label': 'str',  
            'cg_label': 'str',  
            'cg_pit_label': 'str',  
            'cg_view_label': 'str',  
            'flash_cache_label': 'str',  
            'community_name_string': 'str',  
            'destination_ip_address': 'str',  
            'fc_target_location': 'FibreChannelTargetLocation',  
            'fan_cru_location': 'TraySlot',  
            'power_supply_cru_location': 'TraySlot'
        }

        self.attribute_map = {
            'event_component_type': 'eventComponentType',  # (required parameter)
            'alarm_location': 'alarmLocation',  
            'battery_tray': 'batteryTray',  
            'cache_backup_device_location': 'cacheBackupDeviceLocation',  
            'cache_memory_dimm_location': 'cacheMemoryDimmLocation',  
            'channel_loc': 'channelLoc',  
            'channel_port': 'channelPort',  
            'chip_loc': 'chipLoc',  
            'controller_loc': 'controllerLoc',  
            'ctlr_sfp_location': 'ctlrSfpLocation',  
            'soc_location': 'socLocation',  
            'drive_loc': 'driveLoc',  
            'enclosure_tray': 'enclosureTray',  
            'esm_tray': 'esmTray',  
            'fan_tray': 'fanTray',  
            'host_io_card_location': 'hostIoCardLocation',  
            'initiator_location': 'initiatorLocation',  
            'interconnect_cru_location': 'interconnectCruLocation',  
            'isns_server_location': 'isnsServerLocation',  
            'minihub_loc': 'minihubLoc',  
            'port_cru_tray': 'portCruTray',  
            'power_supply_tray': 'powerSupplyTray',  
            'sfp_location': 'sfpLocation',  
            'support_cru_location': 'supportCruLocation',  
            'target_location': 'targetLocation',  
            'temp_sensor_tray': 'tempSensorTray',  
            'label': 'label',  
            'group_number': 'groupNumber',  
            'host_location': 'hostLocation',  
            'host_port_location': 'hostPortLocation',  
            'drawer_location': 'drawerLocation',  
            'component_relative_location': 'componentRelativeLocation',  
            'schedule': 'schedule',  
            'disk_pool': 'diskPool',  
            'async_mirror_group': 'asyncMirrorGroup',  
            'pit_label': 'pitLabel',  
            'cg_label': 'cgLabel',  
            'cg_pit_label': 'cgPitLabel',  
            'cg_view_label': 'cgViewLabel',  
            'flash_cache_label': 'flashCacheLabel',  
            'community_name_string': 'communityNameString',  
            'destination_ip_address': 'destinationIpAddress',  
            'fc_target_location': 'fcTargetLocation',  
            'fan_cru_location': 'fanCruLocation',  
            'power_supply_cru_location': 'powerSupplyCruLocation'
        }

        self._event_component_type = None
        self._alarm_location = None
        self._battery_tray = None
        self._cache_backup_device_location = None
        self._cache_memory_dimm_location = None
        self._channel_loc = None
        self._channel_port = None
        self._chip_loc = None
        self._controller_loc = None
        self._ctlr_sfp_location = None
        self._soc_location = None
        self._drive_loc = None
        self._enclosure_tray = None
        self._esm_tray = None
        self._fan_tray = None
        self._host_io_card_location = None
        self._initiator_location = None
        self._interconnect_cru_location = None
        self._isns_server_location = None
        self._minihub_loc = None
        self._port_cru_tray = None
        self._power_supply_tray = None
        self._sfp_location = None
        self._support_cru_location = None
        self._target_location = None
        self._temp_sensor_tray = None
        self._label = None
        self._group_number = None
        self._host_location = None
        self._host_port_location = None
        self._drawer_location = None
        self._component_relative_location = None
        self._schedule = None
        self._disk_pool = None
        self._async_mirror_group = None
        self._pit_label = None
        self._cg_label = None
        self._cg_pit_label = None
        self._cg_view_label = None
        self._flash_cache_label = None
        self._community_name_string = None
        self._destination_ip_address = None
        self._fc_target_location = None
        self._fan_cru_location = None
        self._power_supply_cru_location = None

    @property
    def event_component_type(self):
        """
        Gets the event_component_type of this ComponentLocation.
        This enumeration object is used to specify the different component types that can be associated with entries in the Major Event Log.

        :return: The event_component_type of this ComponentLocation.
        :rtype: str
        :required/optional: required
        """
        return self._event_component_type

    @event_component_type.setter
    def event_component_type(self, event_component_type):
        """
        Sets the event_component_type of this ComponentLocation.
        This enumeration object is used to specify the different component types that can be associated with entries in the Major Event Log.

        :param event_component_type: The event_component_type of this ComponentLocation.
        :type: str
        """
        allowed_values = ["unknown", "drive", "powerSply", "fan", "minihub", "tempSensor", "channel", "esm", "controller", "battery", "enclosure", "ups", "chip", "volume", "volumeGrp", "portCru", "interconnectCru", "supportCru", "alarm", "channelPort", "sfpPort", "hostBoard", "newFormat", "ctlrSfp", "ctlrSoc", "initiator", "target", "isnsServer", "hostIoCard", "cacheBackupDevice", "cacheMemDimm", "host", "hostPort", "drawer", "relative", "schedule", "asyncMirrorGroup", "diskPool", "pit", "pitConsistencyGroup", "cgpit", "cgview", "flashCache", "snmpCommunity", "snmpTrapDestination", "fcTarget", "fanOnlyCru", "psuCru", "__UNDEFINED"]
        if event_component_type not in allowed_values:
            raise ValueError(
                "Invalid value for `event_component_type`, must be one of {0}"
                .format(allowed_values)
            )
        self._event_component_type = event_component_type

    @property
    def alarm_location(self):
        """
        Gets the alarm_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_ALARM.

        :return: The alarm_location of this ComponentLocation.
        :rtype: TraySlot
        :required/optional: optional
        """
        return self._alarm_location

    @alarm_location.setter
    def alarm_location(self, alarm_location):
        """
        Sets the alarm_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_ALARM.

        :param alarm_location: The alarm_location of this ComponentLocation.
        :type: TraySlot
        """
        self._alarm_location = alarm_location

    @property
    def battery_tray(self):
        """
        Gets the battery_tray of this ComponentLocation.
        The tray ID of the tray containing the battery for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_BATTERY.

        :return: The battery_tray of this ComponentLocation.
        :rtype: int
        :required/optional: optional
        """
        return self._battery_tray

    @battery_tray.setter
    def battery_tray(self, battery_tray):
        """
        Sets the battery_tray of this ComponentLocation.
        The tray ID of the tray containing the battery for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_BATTERY.

        :param battery_tray: The battery_tray of this ComponentLocation.
        :type: int
        """
        self._battery_tray = battery_tray

    @property
    def cache_backup_device_location(self):
        """
        Gets the cache_backup_device_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal toEVENT_COMP_TYPE_CACHE_BACKUP_DEVICE. It identifies the location of the cache backup device to which the event applies.

        :return: The cache_backup_device_location of this ComponentLocation.
        :rtype: CacheBackupDeviceLocation
        :required/optional: optional
        """
        return self._cache_backup_device_location

    @cache_backup_device_location.setter
    def cache_backup_device_location(self, cache_backup_device_location):
        """
        Sets the cache_backup_device_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal toEVENT_COMP_TYPE_CACHE_BACKUP_DEVICE. It identifies the location of the cache backup device to which the event applies.

        :param cache_backup_device_location: The cache_backup_device_location of this ComponentLocation.
        :type: CacheBackupDeviceLocation
        """
        self._cache_backup_device_location = cache_backup_device_location

    @property
    def cache_memory_dimm_location(self):
        """
        Gets the cache_memory_dimm_location of this ComponentLocation.
        This field is only valid when the eventComponentType value is equal to EVENT_COMP_TYPE_CACHE_MEM_DIMM. It identifies the location of the cache memory DIMM to which the event applies.

        :return: The cache_memory_dimm_location of this ComponentLocation.
        :rtype: CacheMemoryDimmLocation
        :required/optional: optional
        """
        return self._cache_memory_dimm_location

    @cache_memory_dimm_location.setter
    def cache_memory_dimm_location(self, cache_memory_dimm_location):
        """
        Sets the cache_memory_dimm_location of this ComponentLocation.
        This field is only valid when the eventComponentType value is equal to EVENT_COMP_TYPE_CACHE_MEM_DIMM. It identifies the location of the cache memory DIMM to which the event applies.

        :param cache_memory_dimm_location: The cache_memory_dimm_location of this ComponentLocation.
        :type: CacheMemoryDimmLocation
        """
        self._cache_memory_dimm_location = cache_memory_dimm_location

    @property
    def channel_loc(self):
        """
        Gets the channel_loc of this ComponentLocation.
        The location of the channel. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_CHANNEL.

        :return: The channel_loc of this ComponentLocation.
        :rtype: ChannelLocation
        :required/optional: optional
        """
        return self._channel_loc

    @channel_loc.setter
    def channel_loc(self, channel_loc):
        """
        Sets the channel_loc of this ComponentLocation.
        The location of the channel. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_CHANNEL.

        :param channel_loc: The channel_loc of this ComponentLocation.
        :type: ChannelLocation
        """
        self._channel_loc = channel_loc

    @property
    def channel_port(self):
        """
        Gets the channel_port of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_CHANNEL_PORT.

        :return: The channel_port of this ComponentLocation.
        :rtype: int
        :required/optional: optional
        """
        return self._channel_port

    @channel_port.setter
    def channel_port(self, channel_port):
        """
        Sets the channel_port of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_CHANNEL_PORT.

        :param channel_port: The channel_port of this ComponentLocation.
        :type: int
        """
        self._channel_port = channel_port

    @property
    def chip_loc(self):
        """
        Gets the chip_loc of this ComponentLocation.
        The physical location of the controller that owns the chip for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_CHIP.

        :return: The chip_loc of this ComponentLocation.
        :rtype: TraySlot
        :required/optional: optional
        """
        return self._chip_loc

    @chip_loc.setter
    def chip_loc(self, chip_loc):
        """
        Sets the chip_loc of this ComponentLocation.
        The physical location of the controller that owns the chip for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_CHIP.

        :param chip_loc: The chip_loc of this ComponentLocation.
        :type: TraySlot
        """
        self._chip_loc = chip_loc

    @property
    def controller_loc(self):
        """
        Gets the controller_loc of this ComponentLocation.
        The physical location of the controller for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_CONTROLLER.

        :return: The controller_loc of this ComponentLocation.
        :rtype: TraySlot
        :required/optional: optional
        """
        return self._controller_loc

    @controller_loc.setter
    def controller_loc(self, controller_loc):
        """
        Sets the controller_loc of this ComponentLocation.
        The physical location of the controller for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_CONTROLLER.

        :param controller_loc: The controller_loc of this ComponentLocation.
        :type: TraySlot
        """
        self._controller_loc = controller_loc

    @property
    def ctlr_sfp_location(self):
        """
        Gets the ctlr_sfp_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_CTLR_SFP.

        :return: The ctlr_sfp_location of this ComponentLocation.
        :rtype: ControllerSfpLocation
        :required/optional: optional
        """
        return self._ctlr_sfp_location

    @ctlr_sfp_location.setter
    def ctlr_sfp_location(self, ctlr_sfp_location):
        """
        Sets the ctlr_sfp_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_CTLR_SFP.

        :param ctlr_sfp_location: The ctlr_sfp_location of this ComponentLocation.
        :type: ControllerSfpLocation
        """
        self._ctlr_sfp_location = ctlr_sfp_location

    @property
    def soc_location(self):
        """
        Gets the soc_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_CTLR_SOC.

        :return: The soc_location of this ComponentLocation.
        :rtype: SocLocation
        :required/optional: optional
        """
        return self._soc_location

    @soc_location.setter
    def soc_location(self, soc_location):
        """
        Sets the soc_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_CTLR_SOC.

        :param soc_location: The soc_location of this ComponentLocation.
        :type: SocLocation
        """
        self._soc_location = soc_location

    @property
    def drive_loc(self):
        """
        Gets the drive_loc of this ComponentLocation.
        The physical location of the drive for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_DRIVE.

        :return: The drive_loc of this ComponentLocation.
        :rtype: TraySlot
        :required/optional: optional
        """
        return self._drive_loc

    @drive_loc.setter
    def drive_loc(self, drive_loc):
        """
        Sets the drive_loc of this ComponentLocation.
        The physical location of the drive for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_DRIVE.

        :param drive_loc: The drive_loc of this ComponentLocation.
        :type: TraySlot
        """
        self._drive_loc = drive_loc

    @property
    def enclosure_tray(self):
        """
        Gets the enclosure_tray of this ComponentLocation.
        The tray ID of the tray for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_ENCLOSURE.

        :return: The enclosure_tray of this ComponentLocation.
        :rtype: int
        :required/optional: optional
        """
        return self._enclosure_tray

    @enclosure_tray.setter
    def enclosure_tray(self, enclosure_tray):
        """
        Sets the enclosure_tray of this ComponentLocation.
        The tray ID of the tray for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_ENCLOSURE.

        :param enclosure_tray: The enclosure_tray of this ComponentLocation.
        :type: int
        """
        self._enclosure_tray = enclosure_tray

    @property
    def esm_tray(self):
        """
        Gets the esm_tray of this ComponentLocation.
        The tray ID of the tray containing the ESM card for which the MEL entry was generated. This field is not used and is considered deprecated. Instead the ESM tray/slot location is given by the ExtendedComponentLocation field.

        :return: The esm_tray of this ComponentLocation.
        :rtype: int
        :required/optional: optional
        """
        return self._esm_tray

    @esm_tray.setter
    def esm_tray(self, esm_tray):
        """
        Sets the esm_tray of this ComponentLocation.
        The tray ID of the tray containing the ESM card for which the MEL entry was generated. This field is not used and is considered deprecated. Instead the ESM tray/slot location is given by the ExtendedComponentLocation field.

        :param esm_tray: The esm_tray of this ComponentLocation.
        :type: int
        """
        self._esm_tray = esm_tray

    @property
    def fan_tray(self):
        """
        Gets the fan_tray of this ComponentLocation.
        The tray ID of the tray containing the fan for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_FAN.

        :return: The fan_tray of this ComponentLocation.
        :rtype: int
        :required/optional: optional
        """
        return self._fan_tray

    @fan_tray.setter
    def fan_tray(self, fan_tray):
        """
        Sets the fan_tray of this ComponentLocation.
        The tray ID of the tray containing the fan for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_FAN.

        :param fan_tray: The fan_tray of this ComponentLocation.
        :type: int
        """
        self._fan_tray = fan_tray

    @property
    def host_io_card_location(self):
        """
        Gets the host_io_card_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_HOST_IO_CARD. It identifies the location of the host I/O card to which the event applies.

        :return: The host_io_card_location of this ComponentLocation.
        :rtype: HostIoCardLocation
        :required/optional: optional
        """
        return self._host_io_card_location

    @host_io_card_location.setter
    def host_io_card_location(self, host_io_card_location):
        """
        Sets the host_io_card_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_HOST_IO_CARD. It identifies the location of the host I/O card to which the event applies.

        :param host_io_card_location: The host_io_card_location of this ComponentLocation.
        :type: HostIoCardLocation
        """
        self._host_io_card_location = host_io_card_location

    @property
    def initiator_location(self):
        """
        Gets the initiator_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_INITIATOR. It identifies the iSCSI initiator to which the event applies.

        :return: The initiator_location of this ComponentLocation.
        :rtype: InitiatorLocation
        :required/optional: optional
        """
        return self._initiator_location

    @initiator_location.setter
    def initiator_location(self, initiator_location):
        """
        Sets the initiator_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_INITIATOR. It identifies the iSCSI initiator to which the event applies.

        :param initiator_location: The initiator_location of this ComponentLocation.
        :type: InitiatorLocation
        """
        self._initiator_location = initiator_location

    @property
    def interconnect_cru_location(self):
        """
        Gets the interconnect_cru_location of this ComponentLocation.
        No information is returned

        :return: The interconnect_cru_location of this ComponentLocation.
        :rtype: TraySlot
        :required/optional: optional
        """
        return self._interconnect_cru_location

    @interconnect_cru_location.setter
    def interconnect_cru_location(self, interconnect_cru_location):
        """
        Sets the interconnect_cru_location of this ComponentLocation.
        No information is returned

        :param interconnect_cru_location: The interconnect_cru_location of this ComponentLocation.
        :type: TraySlot
        """
        self._interconnect_cru_location = interconnect_cru_location

    @property
    def isns_server_location(self):
        """
        Gets the isns_server_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_ISNS_SERVER. It identifies the iSNS server to which the event applies.

        :return: The isns_server_location of this ComponentLocation.
        :rtype: IsnsServerLocation
        :required/optional: optional
        """
        return self._isns_server_location

    @isns_server_location.setter
    def isns_server_location(self, isns_server_location):
        """
        Sets the isns_server_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_ISNS_SERVER. It identifies the iSNS server to which the event applies.

        :param isns_server_location: The isns_server_location of this ComponentLocation.
        :type: IsnsServerLocation
        """
        self._isns_server_location = isns_server_location

    @property
    def minihub_loc(self):
        """
        Gets the minihub_loc of this ComponentLocation.
        The location of the minihub. This filed is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_MINIHUB.

        :return: The minihub_loc of this ComponentLocation.
        :rtype: MinihubLocation
        :required/optional: optional
        """
        return self._minihub_loc

    @minihub_loc.setter
    def minihub_loc(self, minihub_loc):
        """
        Sets the minihub_loc of this ComponentLocation.
        The location of the minihub. This filed is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_MINIHUB.

        :param minihub_loc: The minihub_loc of this ComponentLocation.
        :type: MinihubLocation
        """
        self._minihub_loc = minihub_loc

    @property
    def port_cru_tray(self):
        """
        Gets the port_cru_tray of this ComponentLocation.
        The tray ID of the tray containing the Fibre Channel port CRU for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_PORT_CRU. This field is deprecated.

        :return: The port_cru_tray of this ComponentLocation.
        :rtype: int
        :required/optional: optional
        """
        return self._port_cru_tray

    @port_cru_tray.setter
    def port_cru_tray(self, port_cru_tray):
        """
        Sets the port_cru_tray of this ComponentLocation.
        The tray ID of the tray containing the Fibre Channel port CRU for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_PORT_CRU. This field is deprecated.

        :param port_cru_tray: The port_cru_tray of this ComponentLocation.
        :type: int
        """
        self._port_cru_tray = port_cru_tray

    @property
    def power_supply_tray(self):
        """
        Gets the power_supply_tray of this ComponentLocation.
        The tray ID of the tray containing the power supply for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_POWER_SPLY.

        :return: The power_supply_tray of this ComponentLocation.
        :rtype: int
        :required/optional: optional
        """
        return self._power_supply_tray

    @power_supply_tray.setter
    def power_supply_tray(self, power_supply_tray):
        """
        Sets the power_supply_tray of this ComponentLocation.
        The tray ID of the tray containing the power supply for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_POWER_SPLY.

        :param power_supply_tray: The power_supply_tray of this ComponentLocation.
        :type: int
        """
        self._power_supply_tray = power_supply_tray

    @property
    def sfp_location(self):
        """
        Gets the sfp_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_SFP_PORT.

        :return: The sfp_location of this ComponentLocation.
        :rtype: TraySlot
        :required/optional: optional
        """
        return self._sfp_location

    @sfp_location.setter
    def sfp_location(self, sfp_location):
        """
        Sets the sfp_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_SFP_PORT.

        :param sfp_location: The sfp_location of this ComponentLocation.
        :type: TraySlot
        """
        self._sfp_location = sfp_location

    @property
    def support_cru_location(self):
        """
        Gets the support_cru_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_SUPPORT_CRU.

        :return: The support_cru_location of this ComponentLocation.
        :rtype: TraySlot
        :required/optional: optional
        """
        return self._support_cru_location

    @support_cru_location.setter
    def support_cru_location(self, support_cru_location):
        """
        Sets the support_cru_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_SUPPORT_CRU.

        :param support_cru_location: The support_cru_location of this ComponentLocation.
        :type: TraySlot
        """
        self._support_cru_location = support_cru_location

    @property
    def target_location(self):
        """
        Gets the target_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_TARGET. It identifies the iSCSI target to which the event applies.

        :return: The target_location of this ComponentLocation.
        :rtype: TargetLocation
        :required/optional: optional
        """
        return self._target_location

    @target_location.setter
    def target_location(self, target_location):
        """
        Sets the target_location of this ComponentLocation.
        This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_TARGET. It identifies the iSCSI target to which the event applies.

        :param target_location: The target_location of this ComponentLocation.
        :type: TargetLocation
        """
        self._target_location = target_location

    @property
    def temp_sensor_tray(self):
        """
        Gets the temp_sensor_tray of this ComponentLocation.
        The tray ID of the tray containing the temperature sensor for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_TEMP_SENSOR.

        :return: The temp_sensor_tray of this ComponentLocation.
        :rtype: int
        :required/optional: optional
        """
        return self._temp_sensor_tray

    @temp_sensor_tray.setter
    def temp_sensor_tray(self, temp_sensor_tray):
        """
        Sets the temp_sensor_tray of this ComponentLocation.
        The tray ID of the tray containing the temperature sensor for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_TEMP_SENSOR.

        :param temp_sensor_tray: The temp_sensor_tray of this ComponentLocation.
        :type: int
        """
        self._temp_sensor_tray = temp_sensor_tray

    @property
    def label(self):
        """
        Gets the label of this ComponentLocation.
        The user-assigned label of the volume for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_VOLUME

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

    @label.setter
    def label(self, label):
        """
        Sets the label of this ComponentLocation.
        The user-assigned label of the volume for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_VOLUME

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

    @property
    def group_number(self):
        """
        Gets the group_number of this ComponentLocation.
        The volume group sequence number of the volume group for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_VOLUME_GRP.

        :return: The group_number of this ComponentLocation.
        :rtype: int
        :required/optional: optional
        """
        return self._group_number

    @group_number.setter
    def group_number(self, group_number):
        """
        Sets the group_number of this ComponentLocation.
        The volume group sequence number of the volume group for which the MEL entry was generated. This field is valid only when the eventComponentType value is equal to EVENT_COMP_TYPE_VOLUME_GRP.

        :param group_number: The group_number of this ComponentLocation.
        :type: int
        """
        self._group_number = group_number

    @property
    def host_location(self):
        """
        Gets the host_location of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_HOST. It is the user-assigned label of the host for which the MEL entry is reporting a problem.

        :return: The host_location of this ComponentLocation.
        :rtype: str
        :required/optional: optional
        """
        return self._host_location

    @host_location.setter
    def host_location(self, host_location):
        """
        Sets the host_location of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_HOST. It is the user-assigned label of the host for which the MEL entry is reporting a problem.

        :param host_location: The host_location of this ComponentLocation.
        :type: str
        """
        self._host_location = host_location

    @property
    def host_port_location(self):
        """
        Gets the host_port_location of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_HOST_PORT. It identifies the host port to which the event applies.

        :return: The host_port_location of this ComponentLocation.
        :rtype: HostPortLocation
        :required/optional: optional
        """
        return self._host_port_location

    @host_port_location.setter
    def host_port_location(self, host_port_location):
        """
        Sets the host_port_location of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_HOST_PORT. It identifies the host port to which the event applies.

        :param host_port_location: The host_port_location of this ComponentLocation.
        :type: HostPortLocation
        """
        self._host_port_location = host_port_location

    @property
    def drawer_location(self):
        """
        Gets the drawer_location of this ComponentLocation.
        The physical location of the drawer for which the MEL event was generated. This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_DRAWER.

        :return: The drawer_location of this ComponentLocation.
        :rtype: TraySlot
        :required/optional: optional
        """
        return self._drawer_location

    @drawer_location.setter
    def drawer_location(self, drawer_location):
        """
        Sets the drawer_location of this ComponentLocation.
        The physical location of the drawer for which the MEL event was generated. This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_DRAWER.

        :param drawer_location: The drawer_location of this ComponentLocation.
        :type: TraySlot
        """
        self._drawer_location = drawer_location

    @property
    def component_relative_location(self):
        """
        Gets the component_relative_location of this ComponentLocation.
        The component type and location are described in this field. This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_RELATIVE.

        :return: The component_relative_location of this ComponentLocation.
        :rtype: ComponentRelativeLocation
        :required/optional: optional
        """
        return self._component_relative_location

    @component_relative_location.setter
    def component_relative_location(self, component_relative_location):
        """
        Sets the component_relative_location of this ComponentLocation.
        The component type and location are described in this field. This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_RELATIVE.

        :param component_relative_location: The component_relative_location of this ComponentLocation.
        :type: ComponentRelativeLocation
        """
        self._component_relative_location = component_relative_location

    @property
    def schedule(self):
        """
        Gets the schedule of this ComponentLocation.
        The user-assigned label of the schedule. This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_SCHEDULE.

        :return: The schedule of this ComponentLocation.
        :rtype: str
        :required/optional: optional
        """
        return self._schedule

    @schedule.setter
    def schedule(self, schedule):
        """
        Sets the schedule of this ComponentLocation.
        The user-assigned label of the schedule. This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_SCHEDULE.

        :param schedule: The schedule of this ComponentLocation.
        :type: str
        """
        self._schedule = schedule

    @property
    def disk_pool(self):
        """
        Gets the disk_pool of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_DISK_POOL.

        :return: The disk_pool of this ComponentLocation.
        :rtype: int
        :required/optional: optional
        """
        return self._disk_pool

    @disk_pool.setter
    def disk_pool(self, disk_pool):
        """
        Sets the disk_pool of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_DISK_POOL.

        :param disk_pool: The disk_pool of this ComponentLocation.
        :type: int
        """
        self._disk_pool = disk_pool

    @property
    def async_mirror_group(self):
        """
        Gets the async_mirror_group of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_ASYNC_MIRROR_GROUP.

        :return: The async_mirror_group of this ComponentLocation.
        :rtype: str
        :required/optional: optional
        """
        return self._async_mirror_group

    @async_mirror_group.setter
    def async_mirror_group(self, async_mirror_group):
        """
        Sets the async_mirror_group of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_ASYNC_MIRROR_GROUP.

        :param async_mirror_group: The async_mirror_group of this ComponentLocation.
        :type: str
        """
        self._async_mirror_group = async_mirror_group

    @property
    def pit_label(self):
        """
        Gets the pit_label of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_PIT. Note that events for PITs also include extended component location information beyond just the associated PiT Group label (PITs themselves are identified by a combination of the label of the associated PiT Group plus a sequence number).

        :return: The pit_label of this ComponentLocation.
        :rtype: str
        :required/optional: optional
        """
        return self._pit_label

    @pit_label.setter
    def pit_label(self, pit_label):
        """
        Sets the pit_label of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_PIT. Note that events for PITs also include extended component location information beyond just the associated PiT Group label (PITs themselves are identified by a combination of the label of the associated PiT Group plus a sequence number).

        :param pit_label: The pit_label of this ComponentLocation.
        :type: str
        """
        self._pit_label = pit_label

    @property
    def cg_label(self):
        """
        Gets the cg_label of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_PIT_CONSISTENCY_GROUP.

        :return: The cg_label of this ComponentLocation.
        :rtype: str
        :required/optional: optional
        """
        return self._cg_label

    @cg_label.setter
    def cg_label(self, cg_label):
        """
        Sets the cg_label of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_PIT_CONSISTENCY_GROUP.

        :param cg_label: The cg_label of this ComponentLocation.
        :type: str
        """
        self._cg_label = cg_label

    @property
    def cg_pit_label(self):
        """
        Gets the cg_pit_label of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_CGPIT. Note that events for CGPITs also include extended component location information beyond just the associated CG label (CGPITs themselves are identified by a combination of the label of the associated Consistency Group plus a sequence number).

        :return: The cg_pit_label of this ComponentLocation.
        :rtype: str
        :required/optional: optional
        """
        return self._cg_pit_label

    @cg_pit_label.setter
    def cg_pit_label(self, cg_pit_label):
        """
        Sets the cg_pit_label of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_CGPIT. Note that events for CGPITs also include extended component location information beyond just the associated CG label (CGPITs themselves are identified by a combination of the label of the associated Consistency Group plus a sequence number).

        :param cg_pit_label: The cg_pit_label of this ComponentLocation.
        :type: str
        """
        self._cg_pit_label = cg_pit_label

    @property
    def cg_view_label(self):
        """
        Gets the cg_view_label of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_CGVIEW.

        :return: The cg_view_label of this ComponentLocation.
        :rtype: str
        :required/optional: optional
        """
        return self._cg_view_label

    @cg_view_label.setter
    def cg_view_label(self, cg_view_label):
        """
        Sets the cg_view_label of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_CGVIEW.

        :param cg_view_label: The cg_view_label of this ComponentLocation.
        :type: str
        """
        self._cg_view_label = cg_view_label

    @property
    def flash_cache_label(self):
        """
        Gets the flash_cache_label of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_FLASH_CACHE. It identifies the flash cache device to which this event applies.

        :return: The flash_cache_label of this ComponentLocation.
        :rtype: str
        :required/optional: optional
        """
        return self._flash_cache_label

    @flash_cache_label.setter
    def flash_cache_label(self, flash_cache_label):
        """
        Sets the flash_cache_label of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_FLASH_CACHE. It identifies the flash cache device to which this event applies.

        :param flash_cache_label: The flash_cache_label of this ComponentLocation.
        :type: str
        """
        self._flash_cache_label = flash_cache_label

    @property
    def community_name_string(self):
        """
        Gets the community_name_string of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_SNMP_COMMUNITY. The community name string can contain up to 31 characters.

        :return: The community_name_string of this ComponentLocation.
        :rtype: str
        :required/optional: optional
        """
        return self._community_name_string

    @community_name_string.setter
    def community_name_string(self, community_name_string):
        """
        Sets the community_name_string of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_SNMP_COMMUNITY. The community name string can contain up to 31 characters.

        :param community_name_string: The community_name_string of this ComponentLocation.
        :type: str
        """
        self._community_name_string = community_name_string

    @property
    def destination_ip_address(self):
        """
        Gets the destination_ip_address of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_SNMP_TRAP_DESTINATION. It contains an ASCII representation of the destination address (the maximum number of characters is 40 for IPV6, 15 characters for IPV4.

        :return: The destination_ip_address of this ComponentLocation.
        :rtype: str
        :required/optional: optional
        """
        return self._destination_ip_address

    @destination_ip_address.setter
    def destination_ip_address(self, destination_ip_address):
        """
        Sets the destination_ip_address of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_SNMP_TRAP_DESTINATION. It contains an ASCII representation of the destination address (the maximum number of characters is 40 for IPV6, 15 characters for IPV4.

        :param destination_ip_address: The destination_ip_address of this ComponentLocation.
        :type: str
        """
        self._destination_ip_address = destination_ip_address

    @property
    def fc_target_location(self):
        """
        Gets the fc_target_location of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_FC_TARGET. It contains location data that is an 8-byte binary SCSI name.

        :return: The fc_target_location of this ComponentLocation.
        :rtype: FibreChannelTargetLocation
        :required/optional: optional
        """
        return self._fc_target_location

    @fc_target_location.setter
    def fc_target_location(self, fc_target_location):
        """
        Sets the fc_target_location of this ComponentLocation.
        This field is only valid when the eventComponentType field is equal to EVENT_COMP_TYPE_FC_TARGET. It contains location data that is an 8-byte binary SCSI name.

        :param fc_target_location: The fc_target_location of this ComponentLocation.
        :type: FibreChannelTargetLocation
        """
        self._fc_target_location = fc_target_location

    @property
    def fan_cru_location(self):
        """
        Gets the fan_cru_location of this ComponentLocation.
        Location information for fan CRU.

        :return: The fan_cru_location of this ComponentLocation.
        :rtype: TraySlot
        :required/optional: optional
        """
        return self._fan_cru_location

    @fan_cru_location.setter
    def fan_cru_location(self, fan_cru_location):
        """
        Sets the fan_cru_location of this ComponentLocation.
        Location information for fan CRU.

        :param fan_cru_location: The fan_cru_location of this ComponentLocation.
        :type: TraySlot
        """
        self._fan_cru_location = fan_cru_location

    @property
    def power_supply_cru_location(self):
        """
        Gets the power_supply_cru_location of this ComponentLocation.
        Power supply CRU location.

        :return: The power_supply_cru_location of this ComponentLocation.
        :rtype: TraySlot
        :required/optional: optional
        """
        return self._power_supply_cru_location

    @power_supply_cru_location.setter
    def power_supply_cru_location(self, power_supply_cru_location):
        """
        Sets the power_supply_cru_location of this ComponentLocation.
        Power supply CRU location.

        :param power_supply_cru_location: The power_supply_cru_location of this ComponentLocation.
        :type: TraySlot
        """
        self._power_supply_cru_location = power_supply_cru_location

    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

