# coding: utf-8

"""
HostPort.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 HostPort(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self):
        """
        HostPort - 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 = {
            'host_port_ref': 'str',  # (required parameter)
            'host_port_name': 'str',  # (required parameter)
            'label': 'str',  # (required parameter)
            'host_ref': 'str',  # (required parameter)
            'host_port_type_index': 'int',  # (required parameter)
            'is_sa_controlled': 'bool',  # (required parameter)
            'confirm_lun_mapping_creation': 'bool',  # (required parameter)
            'port_id': 'SCSIInitiatorPortId',  # (required parameter)
            'port_inactive': 'bool',  # (required parameter)
            'id': 'str'
        }

        self.attribute_map = {
            'host_port_ref': 'hostPortRef',  # (required parameter)
            'host_port_name': 'hostPortName',  # (required parameter)
            'label': 'label',  # (required parameter)
            'host_ref': 'hostRef',  # (required parameter)
            'host_port_type_index': 'hostPortTypeIndex',  # (required parameter)
            'is_sa_controlled': 'isSAControlled',  # (required parameter)
            'confirm_lun_mapping_creation': 'confirmLUNMappingCreation',  # (required parameter)
            'port_id': 'portId',  # (required parameter)
            'port_inactive': 'portInactive',  # (required parameter)
            'id': 'id'
        }

        self._host_port_ref = None
        self._host_port_name = None
        self._label = None
        self._host_ref = None
        self._host_port_type_index = None
        self._is_sa_controlled = None
        self._confirm_lun_mapping_creation = None
        self._port_id = None
        self._port_inactive = None
        self._id = None

    @property
    def host_port_ref(self):
        """
        Gets the host_port_ref of this HostPort.
        The unique identification value for this object. Other objects may use this reference value to refer to the host port.

        :return: The host_port_ref of this HostPort.
        :rtype: str
        :required/optional: required
        """
        return self._host_port_ref

    @host_port_ref.setter
    def host_port_ref(self, host_port_ref):
        """
        Sets the host_port_ref of this HostPort.
        The unique identification value for this object. Other objects may use this reference value to refer to the host port.

        :param host_port_ref: The host_port_ref of this HostPort.
        :type: str
        """
        self._host_port_ref = host_port_ref

    @property
    def host_port_name(self):
        """
        Gets the host_port_name of this HostPort.
        The unique, externally-defined identifier for this object. For example, for a Fibre Channel host port, this field contains the value of the Fibre Channel world-wide name for the port.

        :return: The host_port_name of this HostPort.
        :rtype: str
        :required/optional: required
        """
        return self._host_port_name

    @host_port_name.setter
    def host_port_name(self, host_port_name):
        """
        Sets the host_port_name of this HostPort.
        The unique, externally-defined identifier for this object. For example, for a Fibre Channel host port, this field contains the value of the Fibre Channel world-wide name for the port.

        :param host_port_name: The host_port_name of this HostPort.
        :type: str
        """
        self._host_port_name = host_port_name

    @property
    def label(self):
        """
        Gets the label of this HostPort.
        The user-assigned, descriptive label string for the host port.

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

    @label.setter
    def label(self, label):
        """
        Sets the label of this HostPort.
        The user-assigned, descriptive label string for the host port.

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

    @property
    def host_ref(self):
        """
        Gets the host_ref of this HostPort.
        The host reference value of the host in which this port resides.

        :return: The host_ref of this HostPort.
        :rtype: str
        :required/optional: required
        """
        return self._host_ref

    @host_ref.setter
    def host_ref(self, host_ref):
        """
        Sets the host_ref of this HostPort.
        The host reference value of the host in which this port resides.

        :param host_ref: The host_ref of this HostPort.
        :type: str
        """
        self._host_ref = host_ref

    @property
    def host_port_type_index(self):
        """
        Gets the host_port_type_index of this HostPort.
        An index value that indicates the type of host port. This value is used to reference the appropriate entry in the hostPortType field of the associated StorageArray object.

        :return: The host_port_type_index of this HostPort.
        :rtype: int
        :required/optional: required
        """
        return self._host_port_type_index

    @host_port_type_index.setter
    def host_port_type_index(self, host_port_type_index):
        """
        Sets the host_port_type_index of this HostPort.
        An index value that indicates the type of host port. This value is used to reference the appropriate entry in the hostPortType field of the associated StorageArray object.

        :param host_port_type_index: The host_port_type_index of this HostPort.
        :type: int
        """
        self._host_port_type_index = host_port_type_index

    @property
    def is_sa_controlled(self):
        """
        Gets the is_sa_controlled of this HostPort.
        If true, indicates that I/O accesses from this host port are subject to the storage array's default LUN-to-volume mappings. If false, indicates that I/O accesses from the host port are subject to host-specific or cluster-specific LUN-to-volume mappings.

        :return: The is_sa_controlled of this HostPort.
        :rtype: bool
        :required/optional: required
        """
        return self._is_sa_controlled

    @is_sa_controlled.setter
    def is_sa_controlled(self, is_sa_controlled):
        """
        Sets the is_sa_controlled of this HostPort.
        If true, indicates that I/O accesses from this host port are subject to the storage array's default LUN-to-volume mappings. If false, indicates that I/O accesses from the host port are subject to host-specific or cluster-specific LUN-to-volume mappings.

        :param is_sa_controlled: The is_sa_controlled of this HostPort.
        :type: bool
        """
        self._is_sa_controlled = is_sa_controlled

    @property
    def confirm_lun_mapping_creation(self):
        """
        Gets the confirm_lun_mapping_creation of this HostPort.
        If true, indicates that creation of LUN-to-volume mappings should require careful confirmation from the end-user, since such a mapping will alter the volume access rights of other host ports, in addition to this one.

        :return: The confirm_lun_mapping_creation of this HostPort.
        :rtype: bool
        :required/optional: required
        """
        return self._confirm_lun_mapping_creation

    @confirm_lun_mapping_creation.setter
    def confirm_lun_mapping_creation(self, confirm_lun_mapping_creation):
        """
        Sets the confirm_lun_mapping_creation of this HostPort.
        If true, indicates that creation of LUN-to-volume mappings should require careful confirmation from the end-user, since such a mapping will alter the volume access rights of other host ports, in addition to this one.

        :param confirm_lun_mapping_creation: The confirm_lun_mapping_creation of this HostPort.
        :type: bool
        """
        self._confirm_lun_mapping_creation = confirm_lun_mapping_creation

    @property
    def port_id(self):
        """
        Gets the port_id of this HostPort.
        The I/O-protocol-based unique port identifier. This field replaces the deprecated hostPortName field.

        :return: The port_id of this HostPort.
        :rtype: SCSIInitiatorPortId
        :required/optional: required
        """
        return self._port_id

    @port_id.setter
    def port_id(self, port_id):
        """
        Sets the port_id of this HostPort.
        The I/O-protocol-based unique port identifier. This field replaces the deprecated hostPortName field.

        :param port_id: The port_id of this HostPort.
        :type: SCSIInitiatorPortId
        """
        self._port_id = port_id

    @property
    def port_inactive(self):
        """
        Gets the port_inactive of this HostPort.
        The host port has been marked inactive

        :return: The port_inactive of this HostPort.
        :rtype: bool
        :required/optional: required
        """
        return self._port_inactive

    @port_inactive.setter
    def port_inactive(self, port_inactive):
        """
        Sets the port_inactive of this HostPort.
        The host port has been marked inactive

        :param port_inactive: The port_inactive of this HostPort.
        :type: bool
        """
        self._port_inactive = port_inactive

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


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

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


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

    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

