# coding: utf-8

"""
    Cloudbreak API

    Cloudbreak is a powerful left surf that breaks over a coral reef, a mile off southwest the island of Tavarua, Fiji. Cloudbreak is a cloud agnostic Hadoop as a Service API. Abstracts the provisioning and ease management and monitoring of on-demand clusters. SequenceIQ's Cloudbreak is a RESTful application development platform with the goal of helping developers to build solutions for deploying Hadoop YARN clusters in different environments. Once it is deployed in your favourite servlet container it exposes a REST API allowing to span up Hadoop clusters of arbitary sizes and cloud providers. Provisioning Hadoop has never been easier. Cloudbreak is built on the foundation of cloud providers API (Amazon AWS, Microsoft Azure, Google Cloud Platform, Openstack), Apache Ambari, Docker lightweight containers, Swarm and Consul. For further product documentation follow the link: <a href=\"http://hortonworks.com/apache/cloudbreak/\">http://hortonworks.com/apache/cloudbreak/</a>

    OpenAPI spec version: 2.9.0
    
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""


from pprint import pformat
from six import iteritems
import re


class ClusterDetails(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """


    """
    Attributes:
      swagger_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    swagger_types = {
        'id': 'int',
        'name': 'str',
        'description': 'str',
        'status': 'str',
        'status_reason': 'str',
        'secure': 'bool',
        'kerberos_type': 'str',
        'gateway_enabled': 'bool',
        'gateway_type': 'str',
        'sso_type': 'str',
        'ambari_version': 'str',
        'cluster_type': 'str',
        'cluster_version': 'str',
        'host_groups': 'list[str]',
        'external_database': 'bool',
        'database_type': 'str',
        'file_system_type': 'str',
        'default_file_system': 'bool'
    }

    attribute_map = {
        'id': 'id',
        'name': 'name',
        'description': 'description',
        'status': 'status',
        'status_reason': 'statusReason',
        'secure': 'secure',
        'kerberos_type': 'kerberosType',
        'gateway_enabled': 'gatewayEnabled',
        'gateway_type': 'gatewayType',
        'sso_type': 'ssoType',
        'ambari_version': 'ambariVersion',
        'cluster_type': 'clusterType',
        'cluster_version': 'clusterVersion',
        'host_groups': 'hostGroups',
        'external_database': 'externalDatabase',
        'database_type': 'databaseType',
        'file_system_type': 'fileSystemType',
        'default_file_system': 'defaultFileSystem'
    }

    def __init__(self, id=None, name=None, description=None, status=None, status_reason=None, secure=False, kerberos_type=None, gateway_enabled=False, gateway_type=None, sso_type=None, ambari_version=None, cluster_type=None, cluster_version=None, host_groups=None, external_database=False, database_type=None, file_system_type=None, default_file_system=False):
        """
        ClusterDetails - a model defined in Swagger
        """

        self._id = None
        self._name = None
        self._description = None
        self._status = None
        self._status_reason = None
        self._secure = None
        self._kerberos_type = None
        self._gateway_enabled = None
        self._gateway_type = None
        self._sso_type = None
        self._ambari_version = None
        self._cluster_type = None
        self._cluster_version = None
        self._host_groups = None
        self._external_database = None
        self._database_type = None
        self._file_system_type = None
        self._default_file_system = None

        if id is not None:
          self.id = id
        if name is not None:
          self.name = name
        if description is not None:
          self.description = description
        if status is not None:
          self.status = status
        if status_reason is not None:
          self.status_reason = status_reason
        if secure is not None:
          self.secure = secure
        if kerberos_type is not None:
          self.kerberos_type = kerberos_type
        if gateway_enabled is not None:
          self.gateway_enabled = gateway_enabled
        if gateway_type is not None:
          self.gateway_type = gateway_type
        if sso_type is not None:
          self.sso_type = sso_type
        if ambari_version is not None:
          self.ambari_version = ambari_version
        if cluster_type is not None:
          self.cluster_type = cluster_type
        if cluster_version is not None:
          self.cluster_version = cluster_version
        if host_groups is not None:
          self.host_groups = host_groups
        if external_database is not None:
          self.external_database = external_database
        if database_type is not None:
          self.database_type = database_type
        if file_system_type is not None:
          self.file_system_type = file_system_type
        if default_file_system is not None:
          self.default_file_system = default_file_system

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

        :return: The id of this ClusterDetails.
        :rtype: int
        """
        return self._id

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

        :param id: The id of this ClusterDetails.
        :type: int
        """

        self._id = id

    @property
    def name(self):
        """
        Gets the name of this ClusterDetails.

        :return: The name of this ClusterDetails.
        :rtype: str
        """
        return self._name

    @name.setter
    def name(self, name):
        """
        Sets the name of this ClusterDetails.

        :param name: The name of this ClusterDetails.
        :type: str
        """

        self._name = name

    @property
    def description(self):
        """
        Gets the description of this ClusterDetails.

        :return: The description of this ClusterDetails.
        :rtype: str
        """
        return self._description

    @description.setter
    def description(self, description):
        """
        Sets the description of this ClusterDetails.

        :param description: The description of this ClusterDetails.
        :type: str
        """

        self._description = description

    @property
    def status(self):
        """
        Gets the status of this ClusterDetails.

        :return: The status of this ClusterDetails.
        :rtype: str
        """
        return self._status

    @status.setter
    def status(self, status):
        """
        Sets the status of this ClusterDetails.

        :param status: The status of this ClusterDetails.
        :type: str
        """

        self._status = status

    @property
    def status_reason(self):
        """
        Gets the status_reason of this ClusterDetails.

        :return: The status_reason of this ClusterDetails.
        :rtype: str
        """
        return self._status_reason

    @status_reason.setter
    def status_reason(self, status_reason):
        """
        Sets the status_reason of this ClusterDetails.

        :param status_reason: The status_reason of this ClusterDetails.
        :type: str
        """

        self._status_reason = status_reason

    @property
    def secure(self):
        """
        Gets the secure of this ClusterDetails.

        :return: The secure of this ClusterDetails.
        :rtype: bool
        """
        return self._secure

    @secure.setter
    def secure(self, secure):
        """
        Sets the secure of this ClusterDetails.

        :param secure: The secure of this ClusterDetails.
        :type: bool
        """

        self._secure = secure

    @property
    def kerberos_type(self):
        """
        Gets the kerberos_type of this ClusterDetails.

        :return: The kerberos_type of this ClusterDetails.
        :rtype: str
        """
        return self._kerberos_type

    @kerberos_type.setter
    def kerberos_type(self, kerberos_type):
        """
        Sets the kerberos_type of this ClusterDetails.

        :param kerberos_type: The kerberos_type of this ClusterDetails.
        :type: str
        """

        self._kerberos_type = kerberos_type

    @property
    def gateway_enabled(self):
        """
        Gets the gateway_enabled of this ClusterDetails.

        :return: The gateway_enabled of this ClusterDetails.
        :rtype: bool
        """
        return self._gateway_enabled

    @gateway_enabled.setter
    def gateway_enabled(self, gateway_enabled):
        """
        Sets the gateway_enabled of this ClusterDetails.

        :param gateway_enabled: The gateway_enabled of this ClusterDetails.
        :type: bool
        """

        self._gateway_enabled = gateway_enabled

    @property
    def gateway_type(self):
        """
        Gets the gateway_type of this ClusterDetails.

        :return: The gateway_type of this ClusterDetails.
        :rtype: str
        """
        return self._gateway_type

    @gateway_type.setter
    def gateway_type(self, gateway_type):
        """
        Sets the gateway_type of this ClusterDetails.

        :param gateway_type: The gateway_type of this ClusterDetails.
        :type: str
        """

        self._gateway_type = gateway_type

    @property
    def sso_type(self):
        """
        Gets the sso_type of this ClusterDetails.

        :return: The sso_type of this ClusterDetails.
        :rtype: str
        """
        return self._sso_type

    @sso_type.setter
    def sso_type(self, sso_type):
        """
        Sets the sso_type of this ClusterDetails.

        :param sso_type: The sso_type of this ClusterDetails.
        :type: str
        """

        self._sso_type = sso_type

    @property
    def ambari_version(self):
        """
        Gets the ambari_version of this ClusterDetails.

        :return: The ambari_version of this ClusterDetails.
        :rtype: str
        """
        return self._ambari_version

    @ambari_version.setter
    def ambari_version(self, ambari_version):
        """
        Sets the ambari_version of this ClusterDetails.

        :param ambari_version: The ambari_version of this ClusterDetails.
        :type: str
        """

        self._ambari_version = ambari_version

    @property
    def cluster_type(self):
        """
        Gets the cluster_type of this ClusterDetails.

        :return: The cluster_type of this ClusterDetails.
        :rtype: str
        """
        return self._cluster_type

    @cluster_type.setter
    def cluster_type(self, cluster_type):
        """
        Sets the cluster_type of this ClusterDetails.

        :param cluster_type: The cluster_type of this ClusterDetails.
        :type: str
        """

        self._cluster_type = cluster_type

    @property
    def cluster_version(self):
        """
        Gets the cluster_version of this ClusterDetails.

        :return: The cluster_version of this ClusterDetails.
        :rtype: str
        """
        return self._cluster_version

    @cluster_version.setter
    def cluster_version(self, cluster_version):
        """
        Sets the cluster_version of this ClusterDetails.

        :param cluster_version: The cluster_version of this ClusterDetails.
        :type: str
        """

        self._cluster_version = cluster_version

    @property
    def host_groups(self):
        """
        Gets the host_groups of this ClusterDetails.

        :return: The host_groups of this ClusterDetails.
        :rtype: list[str]
        """
        return self._host_groups

    @host_groups.setter
    def host_groups(self, host_groups):
        """
        Sets the host_groups of this ClusterDetails.

        :param host_groups: The host_groups of this ClusterDetails.
        :type: list[str]
        """

        self._host_groups = host_groups

    @property
    def external_database(self):
        """
        Gets the external_database of this ClusterDetails.

        :return: The external_database of this ClusterDetails.
        :rtype: bool
        """
        return self._external_database

    @external_database.setter
    def external_database(self, external_database):
        """
        Sets the external_database of this ClusterDetails.

        :param external_database: The external_database of this ClusterDetails.
        :type: bool
        """

        self._external_database = external_database

    @property
    def database_type(self):
        """
        Gets the database_type of this ClusterDetails.

        :return: The database_type of this ClusterDetails.
        :rtype: str
        """
        return self._database_type

    @database_type.setter
    def database_type(self, database_type):
        """
        Sets the database_type of this ClusterDetails.

        :param database_type: The database_type of this ClusterDetails.
        :type: str
        """

        self._database_type = database_type

    @property
    def file_system_type(self):
        """
        Gets the file_system_type of this ClusterDetails.

        :return: The file_system_type of this ClusterDetails.
        :rtype: str
        """
        return self._file_system_type

    @file_system_type.setter
    def file_system_type(self, file_system_type):
        """
        Sets the file_system_type of this ClusterDetails.

        :param file_system_type: The file_system_type of this ClusterDetails.
        :type: str
        """

        self._file_system_type = file_system_type

    @property
    def default_file_system(self):
        """
        Gets the default_file_system of this ClusterDetails.

        :return: The default_file_system of this ClusterDetails.
        :rtype: bool
        """
        return self._default_file_system

    @default_file_system.setter
    def default_file_system(self, default_file_system):
        """
        Sets the default_file_system of this ClusterDetails.

        :param default_file_system: The default_file_system of this ClusterDetails.
        :type: bool
        """

        self._default_file_system = default_file_system

    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`
        """
        return self.to_str()

    def __eq__(self, other):
        """
        Returns true if both objects are equal
        """
        if not isinstance(other, ClusterDetails):
            return False

        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        """
        Returns true if both objects are not equal
        """
        return not self == other
