# coding: utf-8

"""
    Translator Knowledge Beacon Aggregator API

    This is the Translator Knowledge Beacon Aggregator web service application programming interface (API) that provides integrated access to a pool of knowledge sources publishing concepts and relations through the Translator Knowledge Beacon API. This API is similar to that of the latter mentioned API with the addition of some extra informative endpoints plus session identifier and beacon indices. These latter identifiers are locally assigned numeric indices provided to track the use of specific registered beacons within the aggregator API itself.   # noqa: E501

    OpenAPI spec version: 1.1.3
    Contact: richard@starinformatics.com
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""


import pprint
import re  # noqa: F401

import six

from kba.models.server_statement_annotation import ServerStatementAnnotation  # noqa: F401,E501
from kba.models.server_statement_citation import ServerStatementCitation  # noqa: F401,E501


class ServerStatementDetails(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': 'str',
        'keywords': 'list[str]',
        'page_number': 'int',
        'page_size': 'int',
        'is_defined_by': 'str',
        'provided_by': 'str',
        'qualifiers': 'list[str]',
        'annotation': 'list[ServerStatementAnnotation]',
        'evidence': 'list[ServerStatementCitation]'
    }

    attribute_map = {
        'id': 'id',
        'keywords': 'keywords',
        'page_number': 'pageNumber',
        'page_size': 'pageSize',
        'is_defined_by': 'is_defined_by',
        'provided_by': 'provided_by',
        'qualifiers': 'qualifiers',
        'annotation': 'annotation',
        'evidence': 'evidence'
    }

    def __init__(self, id=None, keywords=None, page_number=None, page_size=None, is_defined_by=None, provided_by=None, qualifiers=None, annotation=None, evidence=None):  # noqa: E501
        """ServerStatementDetails - a model defined in Swagger"""  # noqa: E501

        self._id = None
        self._keywords = None
        self._page_number = None
        self._page_size = None
        self._is_defined_by = None
        self._provided_by = None
        self._qualifiers = None
        self._annotation = None
        self._evidence = None
        self.discriminator = None

        if id is not None:
            self.id = id
        if keywords is not None:
            self.keywords = keywords
        if page_number is not None:
            self.page_number = page_number
        if page_size is not None:
            self.page_size = page_size
        if is_defined_by is not None:
            self.is_defined_by = is_defined_by
        if provided_by is not None:
            self.provided_by = provided_by
        if qualifiers is not None:
            self.qualifiers = qualifiers
        if annotation is not None:
            self.annotation = annotation
        if evidence is not None:
            self.evidence = evidence

    @property
    def id(self):
        """Gets the id of this ServerStatementDetails.  # noqa: E501

        Statement identifier of the statement made in an edge (echoed back)   # noqa: E501

        :return: The id of this ServerStatementDetails.  # noqa: E501
        :rtype: str
        """
        return self._id

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

        Statement identifier of the statement made in an edge (echoed back)   # noqa: E501

        :param id: The id of this ServerStatementDetails.  # noqa: E501
        :type: str
        """

        self._id = id

    @property
    def keywords(self):
        """Gets the keywords of this ServerStatementDetails.  # noqa: E501

        'keywords' string parameter to API call, echoed back   # noqa: E501

        :return: The keywords of this ServerStatementDetails.  # noqa: E501
        :rtype: list[str]
        """
        return self._keywords

    @keywords.setter
    def keywords(self, keywords):
        """Sets the keywords of this ServerStatementDetails.

        'keywords' string parameter to API call, echoed back   # noqa: E501

        :param keywords: The keywords of this ServerStatementDetails.  # noqa: E501
        :type: list[str]
        """

        self._keywords = keywords

    @property
    def page_number(self):
        """Gets the page_number of this ServerStatementDetails.  # noqa: E501

        'pageNumber' string parameter to API call, echoed back   # noqa: E501

        :return: The page_number of this ServerStatementDetails.  # noqa: E501
        :rtype: int
        """
        return self._page_number

    @page_number.setter
    def page_number(self, page_number):
        """Sets the page_number of this ServerStatementDetails.

        'pageNumber' string parameter to API call, echoed back   # noqa: E501

        :param page_number: The page_number of this ServerStatementDetails.  # noqa: E501
        :type: int
        """

        self._page_number = page_number

    @property
    def page_size(self):
        """Gets the page_size of this ServerStatementDetails.  # noqa: E501

        'pageSize' string parameter to API call, echoed back   # noqa: E501

        :return: The page_size of this ServerStatementDetails.  # noqa: E501
        :rtype: int
        """
        return self._page_size

    @page_size.setter
    def page_size(self, page_size):
        """Sets the page_size of this ServerStatementDetails.

        'pageSize' string parameter to API call, echoed back   # noqa: E501

        :param page_size: The page_size of this ServerStatementDetails.  # noqa: E501
        :type: int
        """

        self._page_size = page_size

    @property
    def is_defined_by(self):
        """Gets the is_defined_by of this ServerStatementDetails.  # noqa: E501

        A CURIE/URI for the translator group that wrapped this knowledge source ('beacon') that publishes the statement made in an edge.   # noqa: E501

        :return: The is_defined_by of this ServerStatementDetails.  # noqa: E501
        :rtype: str
        """
        return self._is_defined_by

    @is_defined_by.setter
    def is_defined_by(self, is_defined_by):
        """Sets the is_defined_by of this ServerStatementDetails.

        A CURIE/URI for the translator group that wrapped this knowledge source ('beacon') that publishes the statement made in an edge.   # noqa: E501

        :param is_defined_by: The is_defined_by of this ServerStatementDetails.  # noqa: E501
        :type: str
        """

        self._is_defined_by = is_defined_by

    @property
    def provided_by(self):
        """Gets the provided_by of this ServerStatementDetails.  # noqa: E501

        A CURIE prefix, e.g. Pharos, MGI, Monarch. The group that curated/asserted the statement made in an edge.   # noqa: E501

        :return: The provided_by of this ServerStatementDetails.  # noqa: E501
        :rtype: str
        """
        return self._provided_by

    @provided_by.setter
    def provided_by(self, provided_by):
        """Sets the provided_by of this ServerStatementDetails.

        A CURIE prefix, e.g. Pharos, MGI, Monarch. The group that curated/asserted the statement made in an edge.   # noqa: E501

        :param provided_by: The provided_by of this ServerStatementDetails.  # noqa: E501
        :type: str
        """

        self._provided_by = provided_by

    @property
    def qualifiers(self):
        """Gets the qualifiers of this ServerStatementDetails.  # noqa: E501

        (Optional) terms representing qualifiers that modify or qualify the meaning of the statement made in an edge.   # noqa: E501

        :return: The qualifiers of this ServerStatementDetails.  # noqa: E501
        :rtype: list[str]
        """
        return self._qualifiers

    @qualifiers.setter
    def qualifiers(self, qualifiers):
        """Sets the qualifiers of this ServerStatementDetails.

        (Optional) terms representing qualifiers that modify or qualify the meaning of the statement made in an edge.   # noqa: E501

        :param qualifiers: The qualifiers of this ServerStatementDetails.  # noqa: E501
        :type: list[str]
        """

        self._qualifiers = qualifiers

    @property
    def annotation(self):
        """Gets the annotation of this ServerStatementDetails.  # noqa: E501

        Extra edge properties, generally compliant with Translator Knowledge Graph Standard Specification   # noqa: E501

        :return: The annotation of this ServerStatementDetails.  # noqa: E501
        :rtype: list[ServerStatementAnnotation]
        """
        return self._annotation

    @annotation.setter
    def annotation(self, annotation):
        """Sets the annotation of this ServerStatementDetails.

        Extra edge properties, generally compliant with Translator Knowledge Graph Standard Specification   # noqa: E501

        :param annotation: The annotation of this ServerStatementDetails.  # noqa: E501
        :type: list[ServerStatementAnnotation]
        """

        self._annotation = annotation

    @property
    def evidence(self):
        """Gets the evidence of this ServerStatementDetails.  # noqa: E501


        :return: The evidence of this ServerStatementDetails.  # noqa: E501
        :rtype: list[ServerStatementCitation]
        """
        return self._evidence

    @evidence.setter
    def evidence(self, evidence):
        """Sets the evidence of this ServerStatementDetails.


        :param evidence: The evidence of this ServerStatementDetails.  # noqa: E501
        :type: list[ServerStatementCitation]
        """

        self._evidence = evidence

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in six.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 pprint.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, ServerStatementDetails):
            return False

        return self.__dict__ == other.__dict__

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