# coding: utf-8

"""

    No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)

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


from pprint import pformat
from six import iteritems
import re


class DefaultClassification(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 = {
        'kingdom': 'str',
        'phylum': 'str',
        'class_name': 'str',
        'order': 'str',
        'super_family': 'str',
        'family': 'str',
        'genus': 'str',
        'subgenus': 'str',
        'specific_epithet': 'str',
        'infraspecific_epithet': 'str',
        'infraspecific_rank': 'str'
    }

    attribute_map = {
        'kingdom': 'kingdom',
        'phylum': 'phylum',
        'class_name': 'className',
        'order': 'order',
        'super_family': 'superFamily',
        'family': 'family',
        'genus': 'genus',
        'subgenus': 'subgenus',
        'specific_epithet': 'specificEpithet',
        'infraspecific_epithet': 'infraspecificEpithet',
        'infraspecific_rank': 'infraspecificRank'
    }

    def __init__(self, kingdom=None, phylum=None, class_name=None, order=None, super_family=None, family=None, genus=None, subgenus=None, specific_epithet=None, infraspecific_epithet=None, infraspecific_rank=None):
        """
        DefaultClassification - a model defined in Swagger
        """

        self._kingdom = None
        self._phylum = None
        self._class_name = None
        self._order = None
        self._super_family = None
        self._family = None
        self._genus = None
        self._subgenus = None
        self._specific_epithet = None
        self._infraspecific_epithet = None
        self._infraspecific_rank = None
        self.discriminator = None

        if kingdom is not None:
          self.kingdom = kingdom
        if phylum is not None:
          self.phylum = phylum
        if class_name is not None:
          self.class_name = class_name
        if order is not None:
          self.order = order
        if super_family is not None:
          self.super_family = super_family
        if family is not None:
          self.family = family
        if genus is not None:
          self.genus = genus
        if subgenus is not None:
          self.subgenus = subgenus
        if specific_epithet is not None:
          self.specific_epithet = specific_epithet
        if infraspecific_epithet is not None:
          self.infraspecific_epithet = infraspecific_epithet
        if infraspecific_rank is not None:
          self.infraspecific_rank = infraspecific_rank

    @property
    def kingdom(self):
        """
        Gets the kingdom of this DefaultClassification.

        :return: The kingdom of this DefaultClassification.
        :rtype: str
        """
        return self._kingdom

    @kingdom.setter
    def kingdom(self, kingdom):
        """
        Sets the kingdom of this DefaultClassification.

        :param kingdom: The kingdom of this DefaultClassification.
        :type: str
        """

        self._kingdom = kingdom

    @property
    def phylum(self):
        """
        Gets the phylum of this DefaultClassification.

        :return: The phylum of this DefaultClassification.
        :rtype: str
        """
        return self._phylum

    @phylum.setter
    def phylum(self, phylum):
        """
        Sets the phylum of this DefaultClassification.

        :param phylum: The phylum of this DefaultClassification.
        :type: str
        """

        self._phylum = phylum

    @property
    def class_name(self):
        """
        Gets the class_name of this DefaultClassification.

        :return: The class_name of this DefaultClassification.
        :rtype: str
        """
        return self._class_name

    @class_name.setter
    def class_name(self, class_name):
        """
        Sets the class_name of this DefaultClassification.

        :param class_name: The class_name of this DefaultClassification.
        :type: str
        """

        self._class_name = class_name

    @property
    def order(self):
        """
        Gets the order of this DefaultClassification.

        :return: The order of this DefaultClassification.
        :rtype: str
        """
        return self._order

    @order.setter
    def order(self, order):
        """
        Sets the order of this DefaultClassification.

        :param order: The order of this DefaultClassification.
        :type: str
        """

        self._order = order

    @property
    def super_family(self):
        """
        Gets the super_family of this DefaultClassification.

        :return: The super_family of this DefaultClassification.
        :rtype: str
        """
        return self._super_family

    @super_family.setter
    def super_family(self, super_family):
        """
        Sets the super_family of this DefaultClassification.

        :param super_family: The super_family of this DefaultClassification.
        :type: str
        """

        self._super_family = super_family

    @property
    def family(self):
        """
        Gets the family of this DefaultClassification.

        :return: The family of this DefaultClassification.
        :rtype: str
        """
        return self._family

    @family.setter
    def family(self, family):
        """
        Sets the family of this DefaultClassification.

        :param family: The family of this DefaultClassification.
        :type: str
        """

        self._family = family

    @property
    def genus(self):
        """
        Gets the genus of this DefaultClassification.

        :return: The genus of this DefaultClassification.
        :rtype: str
        """
        return self._genus

    @genus.setter
    def genus(self, genus):
        """
        Sets the genus of this DefaultClassification.

        :param genus: The genus of this DefaultClassification.
        :type: str
        """

        self._genus = genus

    @property
    def subgenus(self):
        """
        Gets the subgenus of this DefaultClassification.

        :return: The subgenus of this DefaultClassification.
        :rtype: str
        """
        return self._subgenus

    @subgenus.setter
    def subgenus(self, subgenus):
        """
        Sets the subgenus of this DefaultClassification.

        :param subgenus: The subgenus of this DefaultClassification.
        :type: str
        """

        self._subgenus = subgenus

    @property
    def specific_epithet(self):
        """
        Gets the specific_epithet of this DefaultClassification.

        :return: The specific_epithet of this DefaultClassification.
        :rtype: str
        """
        return self._specific_epithet

    @specific_epithet.setter
    def specific_epithet(self, specific_epithet):
        """
        Sets the specific_epithet of this DefaultClassification.

        :param specific_epithet: The specific_epithet of this DefaultClassification.
        :type: str
        """

        self._specific_epithet = specific_epithet

    @property
    def infraspecific_epithet(self):
        """
        Gets the infraspecific_epithet of this DefaultClassification.

        :return: The infraspecific_epithet of this DefaultClassification.
        :rtype: str
        """
        return self._infraspecific_epithet

    @infraspecific_epithet.setter
    def infraspecific_epithet(self, infraspecific_epithet):
        """
        Sets the infraspecific_epithet of this DefaultClassification.

        :param infraspecific_epithet: The infraspecific_epithet of this DefaultClassification.
        :type: str
        """

        self._infraspecific_epithet = infraspecific_epithet

    @property
    def infraspecific_rank(self):
        """
        Gets the infraspecific_rank of this DefaultClassification.

        :return: The infraspecific_rank of this DefaultClassification.
        :rtype: str
        """
        return self._infraspecific_rank

    @infraspecific_rank.setter
    def infraspecific_rank(self, infraspecific_rank):
        """
        Sets the infraspecific_rank of this DefaultClassification.

        :param infraspecific_rank: The infraspecific_rank of this DefaultClassification.
        :type: str
        """

        self._infraspecific_rank = infraspecific_rank

    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, DefaultClassification):
            return False

        return self.__dict__ == other.__dict__

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