# coding: utf-8

"""
    PubMan REST API

    This is an automatically generated REST API client for PubMan.  # noqa: E501

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


import pprint
import re  # noqa: F401

import six


class MdsPublicationVO(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 = {
        'abstracts': 'list[AbstractVO]',
        'alternative_titles': 'list[AlternativeTitleVO]',
        'creators': 'list[CreatorVO]',
        'date_accepted': 'str',
        'date_created': 'str',
        'date_modified': 'str',
        'date_published_in_print': 'str',
        'date_published_online': 'str',
        'date_submitted': 'str',
        'degree': 'str',
        'event': 'EventVO',
        'free_keywords': 'str',
        'genre': 'str',
        'identifiers': 'list[IdentifierVO]',
        'languages': 'list[str]',
        'legal_case': 'LegalCaseVO',
        'location': 'str',
        'project_info': 'list[ProjectInfoVO]',
        'publishing_info': 'PublishingInfoVO',
        'review_method': 'str',
        'sources': 'list[SourceVO]',
        'subjects': 'list[SubjectVO]',
        'table_of_contents': 'str',
        'title': 'str',
        'total_number_of_pages': 'str'
    }

    attribute_map = {
        'abstracts': 'abstracts',
        'alternative_titles': 'alternativeTitles',
        'creators': 'creators',
        'date_accepted': 'dateAccepted',
        'date_created': 'dateCreated',
        'date_modified': 'dateModified',
        'date_published_in_print': 'datePublishedInPrint',
        'date_published_online': 'datePublishedOnline',
        'date_submitted': 'dateSubmitted',
        'degree': 'degree',
        'event': 'event',
        'free_keywords': 'freeKeywords',
        'genre': 'genre',
        'identifiers': 'identifiers',
        'languages': 'languages',
        'legal_case': 'legalCase',
        'location': 'location',
        'project_info': 'projectInfo',
        'publishing_info': 'publishingInfo',
        'review_method': 'reviewMethod',
        'sources': 'sources',
        'subjects': 'subjects',
        'table_of_contents': 'tableOfContents',
        'title': 'title',
        'total_number_of_pages': 'totalNumberOfPages'
    }

    def __init__(self, abstracts=None, alternative_titles=None, creators=None, date_accepted=None, date_created=None, date_modified=None, date_published_in_print=None, date_published_online=None, date_submitted=None, degree=None, event=None, free_keywords=None, genre=None, identifiers=None, languages=None, legal_case=None, location=None, project_info=None, publishing_info=None, review_method=None, sources=None, subjects=None, table_of_contents=None, title=None, total_number_of_pages=None):  # noqa: E501
        """MdsPublicationVO - a model defined in Swagger"""  # noqa: E501

        self._abstracts = None
        self._alternative_titles = None
        self._creators = None
        self._date_accepted = None
        self._date_created = None
        self._date_modified = None
        self._date_published_in_print = None
        self._date_published_online = None
        self._date_submitted = None
        self._degree = None
        self._event = None
        self._free_keywords = None
        self._genre = None
        self._identifiers = None
        self._languages = None
        self._legal_case = None
        self._location = None
        self._project_info = None
        self._publishing_info = None
        self._review_method = None
        self._sources = None
        self._subjects = None
        self._table_of_contents = None
        self._title = None
        self._total_number_of_pages = None
        self.discriminator = None

        if abstracts is not None:
            self.abstracts = abstracts
        if alternative_titles is not None:
            self.alternative_titles = alternative_titles
        if creators is not None:
            self.creators = creators
        if date_accepted is not None:
            self.date_accepted = date_accepted
        if date_created is not None:
            self.date_created = date_created
        if date_modified is not None:
            self.date_modified = date_modified
        if date_published_in_print is not None:
            self.date_published_in_print = date_published_in_print
        if date_published_online is not None:
            self.date_published_online = date_published_online
        if date_submitted is not None:
            self.date_submitted = date_submitted
        if degree is not None:
            self.degree = degree
        if event is not None:
            self.event = event
        if free_keywords is not None:
            self.free_keywords = free_keywords
        if genre is not None:
            self.genre = genre
        if identifiers is not None:
            self.identifiers = identifiers
        if languages is not None:
            self.languages = languages
        if legal_case is not None:
            self.legal_case = legal_case
        if location is not None:
            self.location = location
        if project_info is not None:
            self.project_info = project_info
        if publishing_info is not None:
            self.publishing_info = publishing_info
        if review_method is not None:
            self.review_method = review_method
        if sources is not None:
            self.sources = sources
        if subjects is not None:
            self.subjects = subjects
        if table_of_contents is not None:
            self.table_of_contents = table_of_contents
        if title is not None:
            self.title = title
        if total_number_of_pages is not None:
            self.total_number_of_pages = total_number_of_pages

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


        :return: The abstracts of this MdsPublicationVO.  # noqa: E501
        :rtype: list[AbstractVO]
        """
        return self._abstracts

    @abstracts.setter
    def abstracts(self, abstracts):
        """Sets the abstracts of this MdsPublicationVO.


        :param abstracts: The abstracts of this MdsPublicationVO.  # noqa: E501
        :type: list[AbstractVO]
        """

        self._abstracts = abstracts

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


        :return: The alternative_titles of this MdsPublicationVO.  # noqa: E501
        :rtype: list[AlternativeTitleVO]
        """
        return self._alternative_titles

    @alternative_titles.setter
    def alternative_titles(self, alternative_titles):
        """Sets the alternative_titles of this MdsPublicationVO.


        :param alternative_titles: The alternative_titles of this MdsPublicationVO.  # noqa: E501
        :type: list[AlternativeTitleVO]
        """

        self._alternative_titles = alternative_titles

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


        :return: The creators of this MdsPublicationVO.  # noqa: E501
        :rtype: list[CreatorVO]
        """
        return self._creators

    @creators.setter
    def creators(self, creators):
        """Sets the creators of this MdsPublicationVO.


        :param creators: The creators of this MdsPublicationVO.  # noqa: E501
        :type: list[CreatorVO]
        """

        self._creators = creators

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


        :return: The date_accepted of this MdsPublicationVO.  # noqa: E501
        :rtype: str
        """
        return self._date_accepted

    @date_accepted.setter
    def date_accepted(self, date_accepted):
        """Sets the date_accepted of this MdsPublicationVO.


        :param date_accepted: The date_accepted of this MdsPublicationVO.  # noqa: E501
        :type: str
        """

        self._date_accepted = date_accepted

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


        :return: The date_created of this MdsPublicationVO.  # noqa: E501
        :rtype: str
        """
        return self._date_created

    @date_created.setter
    def date_created(self, date_created):
        """Sets the date_created of this MdsPublicationVO.


        :param date_created: The date_created of this MdsPublicationVO.  # noqa: E501
        :type: str
        """

        self._date_created = date_created

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


        :return: The date_modified of this MdsPublicationVO.  # noqa: E501
        :rtype: str
        """
        return self._date_modified

    @date_modified.setter
    def date_modified(self, date_modified):
        """Sets the date_modified of this MdsPublicationVO.


        :param date_modified: The date_modified of this MdsPublicationVO.  # noqa: E501
        :type: str
        """

        self._date_modified = date_modified

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


        :return: The date_published_in_print of this MdsPublicationVO.  # noqa: E501
        :rtype: str
        """
        return self._date_published_in_print

    @date_published_in_print.setter
    def date_published_in_print(self, date_published_in_print):
        """Sets the date_published_in_print of this MdsPublicationVO.


        :param date_published_in_print: The date_published_in_print of this MdsPublicationVO.  # noqa: E501
        :type: str
        """

        self._date_published_in_print = date_published_in_print

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


        :return: The date_published_online of this MdsPublicationVO.  # noqa: E501
        :rtype: str
        """
        return self._date_published_online

    @date_published_online.setter
    def date_published_online(self, date_published_online):
        """Sets the date_published_online of this MdsPublicationVO.


        :param date_published_online: The date_published_online of this MdsPublicationVO.  # noqa: E501
        :type: str
        """

        self._date_published_online = date_published_online

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


        :return: The date_submitted of this MdsPublicationVO.  # noqa: E501
        :rtype: str
        """
        return self._date_submitted

    @date_submitted.setter
    def date_submitted(self, date_submitted):
        """Sets the date_submitted of this MdsPublicationVO.


        :param date_submitted: The date_submitted of this MdsPublicationVO.  # noqa: E501
        :type: str
        """

        self._date_submitted = date_submitted

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


        :return: The degree of this MdsPublicationVO.  # noqa: E501
        :rtype: str
        """
        return self._degree

    @degree.setter
    def degree(self, degree):
        """Sets the degree of this MdsPublicationVO.


        :param degree: The degree of this MdsPublicationVO.  # noqa: E501
        :type: str
        """
        allowed_values = ["BACHELOR", "DIPLOMA", "HABILITATION", "MAGISTER", "MASTER", "PHD", "STAATSEXAMEN"]  # noqa: E501
        if degree not in allowed_values:
            raise ValueError(
                "Invalid value for `degree` ({0}), must be one of {1}"  # noqa: E501
                .format(degree, allowed_values)
            )

        self._degree = degree

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


        :return: The event of this MdsPublicationVO.  # noqa: E501
        :rtype: EventVO
        """
        return self._event

    @event.setter
    def event(self, event):
        """Sets the event of this MdsPublicationVO.


        :param event: The event of this MdsPublicationVO.  # noqa: E501
        :type: EventVO
        """

        self._event = event

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


        :return: The free_keywords of this MdsPublicationVO.  # noqa: E501
        :rtype: str
        """
        return self._free_keywords

    @free_keywords.setter
    def free_keywords(self, free_keywords):
        """Sets the free_keywords of this MdsPublicationVO.


        :param free_keywords: The free_keywords of this MdsPublicationVO.  # noqa: E501
        :type: str
        """

        self._free_keywords = free_keywords

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


        :return: The genre of this MdsPublicationVO.  # noqa: E501
        :rtype: str
        """
        return self._genre

    @genre.setter
    def genre(self, genre):
        """Sets the genre of this MdsPublicationVO.


        :param genre: The genre of this MdsPublicationVO.  # noqa: E501
        :type: str
        """
        allowed_values = ["ARTICLE", "BOOK", "BOOK_ITEM", "BOOK_REVIEW", "CASE_NOTE", "CASE_STUDY", "COLLECTED_EDITION", "COMMENTARY", "CONFERENCE_PAPER", "CONFERENCE_REPORT", "CONTRIBUTION_TO_COLLECTED_EDITION", "CONTRIBUTION_TO_COMMENTARY", "CONTRIBUTION_TO_ENCYCLOPEDIA", "CONTRIBUTION_TO_FESTSCHRIFT", "CONTRIBUTION_TO_HANDBOOK", "COURSEWARE_LECTURE", "EDITORIAL", "ENCYCLOPEDIA", "FESTSCHRIFT", "FILM", "HANDBOOK", "ISSUE", "JOURNAL", "MANUAL", "MANUSCRIPT", "MEETING_ABSTRACT", "MONOGRAPH", "MULTI_VOLUME", "NEWSPAPER", "NEWSPAPER_ARTICLE", "OPINION", "OTHER", "PAPER", "PATENT", "POSTER", "PROCEEDINGS", "REPORT", "SERIES", "TALK_AT_EVENT", "THESIS"]  # noqa: E501
        if genre not in allowed_values:
            raise ValueError(
                "Invalid value for `genre` ({0}), must be one of {1}"  # noqa: E501
                .format(genre, allowed_values)
            )

        self._genre = genre

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


        :return: The identifiers of this MdsPublicationVO.  # noqa: E501
        :rtype: list[IdentifierVO]
        """
        return self._identifiers

    @identifiers.setter
    def identifiers(self, identifiers):
        """Sets the identifiers of this MdsPublicationVO.


        :param identifiers: The identifiers of this MdsPublicationVO.  # noqa: E501
        :type: list[IdentifierVO]
        """

        self._identifiers = identifiers

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


        :return: The languages of this MdsPublicationVO.  # noqa: E501
        :rtype: list[str]
        """
        return self._languages

    @languages.setter
    def languages(self, languages):
        """Sets the languages of this MdsPublicationVO.


        :param languages: The languages of this MdsPublicationVO.  # noqa: E501
        :type: list[str]
        """

        self._languages = languages

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


        :return: The legal_case of this MdsPublicationVO.  # noqa: E501
        :rtype: LegalCaseVO
        """
        return self._legal_case

    @legal_case.setter
    def legal_case(self, legal_case):
        """Sets the legal_case of this MdsPublicationVO.


        :param legal_case: The legal_case of this MdsPublicationVO.  # noqa: E501
        :type: LegalCaseVO
        """

        self._legal_case = legal_case

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


        :return: The location of this MdsPublicationVO.  # noqa: E501
        :rtype: str
        """
        return self._location

    @location.setter
    def location(self, location):
        """Sets the location of this MdsPublicationVO.


        :param location: The location of this MdsPublicationVO.  # noqa: E501
        :type: str
        """

        self._location = location

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


        :return: The project_info of this MdsPublicationVO.  # noqa: E501
        :rtype: list[ProjectInfoVO]
        """
        return self._project_info

    @project_info.setter
    def project_info(self, project_info):
        """Sets the project_info of this MdsPublicationVO.


        :param project_info: The project_info of this MdsPublicationVO.  # noqa: E501
        :type: list[ProjectInfoVO]
        """

        self._project_info = project_info

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


        :return: The publishing_info of this MdsPublicationVO.  # noqa: E501
        :rtype: PublishingInfoVO
        """
        return self._publishing_info

    @publishing_info.setter
    def publishing_info(self, publishing_info):
        """Sets the publishing_info of this MdsPublicationVO.


        :param publishing_info: The publishing_info of this MdsPublicationVO.  # noqa: E501
        :type: PublishingInfoVO
        """

        self._publishing_info = publishing_info

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


        :return: The review_method of this MdsPublicationVO.  # noqa: E501
        :rtype: str
        """
        return self._review_method

    @review_method.setter
    def review_method(self, review_method):
        """Sets the review_method of this MdsPublicationVO.


        :param review_method: The review_method of this MdsPublicationVO.  # noqa: E501
        :type: str
        """
        allowed_values = ["INTERNAL", "NO_REVIEW", "PEER"]  # noqa: E501
        if review_method not in allowed_values:
            raise ValueError(
                "Invalid value for `review_method` ({0}), must be one of {1}"  # noqa: E501
                .format(review_method, allowed_values)
            )

        self._review_method = review_method

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


        :return: The sources of this MdsPublicationVO.  # noqa: E501
        :rtype: list[SourceVO]
        """
        return self._sources

    @sources.setter
    def sources(self, sources):
        """Sets the sources of this MdsPublicationVO.


        :param sources: The sources of this MdsPublicationVO.  # noqa: E501
        :type: list[SourceVO]
        """

        self._sources = sources

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


        :return: The subjects of this MdsPublicationVO.  # noqa: E501
        :rtype: list[SubjectVO]
        """
        return self._subjects

    @subjects.setter
    def subjects(self, subjects):
        """Sets the subjects of this MdsPublicationVO.


        :param subjects: The subjects of this MdsPublicationVO.  # noqa: E501
        :type: list[SubjectVO]
        """

        self._subjects = subjects

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


        :return: The table_of_contents of this MdsPublicationVO.  # noqa: E501
        :rtype: str
        """
        return self._table_of_contents

    @table_of_contents.setter
    def table_of_contents(self, table_of_contents):
        """Sets the table_of_contents of this MdsPublicationVO.


        :param table_of_contents: The table_of_contents of this MdsPublicationVO.  # noqa: E501
        :type: str
        """

        self._table_of_contents = table_of_contents

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


        :return: The title of this MdsPublicationVO.  # noqa: E501
        :rtype: str
        """
        return self._title

    @title.setter
    def title(self, title):
        """Sets the title of this MdsPublicationVO.


        :param title: The title of this MdsPublicationVO.  # noqa: E501
        :type: str
        """

        self._title = title

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


        :return: The total_number_of_pages of this MdsPublicationVO.  # noqa: E501
        :rtype: str
        """
        return self._total_number_of_pages

    @total_number_of_pages.setter
    def total_number_of_pages(self, total_number_of_pages):
        """Sets the total_number_of_pages of this MdsPublicationVO.


        :param total_number_of_pages: The total_number_of_pages of this MdsPublicationVO.  # noqa: E501
        :type: str
        """

        self._total_number_of_pages = total_number_of_pages

    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
        if issubclass(MdsPublicationVO, dict):
            for key, value in self.items():
                result[key] = 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, MdsPublicationVO):
            return False

        return self.__dict__ == other.__dict__

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