# coding: utf-8

from __future__ import absolute_import
from swagger_server.models.ds_type import DSType
from swagger_server.models.object_type import ObjectType
from swagger_server.models.relationship_type import RelationshipType
from .base_model_ import Model
from datetime import date, datetime
from typing import List, Dict
from ..util import deserialize_model


class Scholix(Model):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self, publication_date=None, link_publisher=None, link_provider=None, relationship=None, source=None, target=None):
        """
        Scholix - a model defined in Swagger

        :param publication_date: The publication_date of this Scholix.
        :type publication_date: date
        :param link_publisher: The link_publisher of this Scholix.
        :type link_publisher: DSType
        :param link_provider: The link_provider of this Scholix.
        :type link_provider: List[DSType]
        :param relationship: The relationship of this Scholix.
        :type relationship: RelationshipType
        :param source: The source of this Scholix.
        :type source: ObjectType
        :param target: The target of this Scholix.
        :type target: ObjectType
        """
        self.swagger_types = {
            'publication_date': date,
            'link_publisher': DSType,
            'link_provider': List[DSType],
            'relationship': RelationshipType,
            'source': ObjectType,
            'target': ObjectType
        }

        self.attribute_map = {
            'publication_date': 'publicationDate',
            'link_publisher': 'linkPublisher',
            'link_provider': 'linkProvider',
            'relationship': 'relationship',
            'source': 'source',
            'target': 'target'
        }

        self._publication_date = publication_date
        self._link_publisher = link_publisher
        self._link_provider = link_provider
        self._relationship = relationship
        self._source = source
        self._target = target

    @classmethod
    def from_dict(cls, dikt):
        """
        Returns the dict as a model

        :param dikt: A dict.
        :type: dict
        :return: The Scholix of this Scholix.
        :rtype: Scholix
        """
        return deserialize_model(dikt, cls)

    @property
    def publication_date(self):
        """
        Gets the publication_date of this Scholix.

        :return: The publication_date of this Scholix.
        :rtype: date
        """
        return self._publication_date

    @publication_date.setter
    def publication_date(self, publication_date):
        """
        Sets the publication_date of this Scholix.

        :param publication_date: The publication_date of this Scholix.
        :type publication_date: date
        """

        self._publication_date = publication_date

    @property
    def link_publisher(self):
        """
        Gets the link_publisher of this Scholix.

        :return: The link_publisher of this Scholix.
        :rtype: DSType
        """
        return self._link_publisher

    @link_publisher.setter
    def link_publisher(self, link_publisher):
        """
        Sets the link_publisher of this Scholix.

        :param link_publisher: The link_publisher of this Scholix.
        :type link_publisher: DSType
        """

        self._link_publisher = link_publisher

    @property
    def link_provider(self):
        """
        Gets the link_provider of this Scholix.

        :return: The link_provider of this Scholix.
        :rtype: List[DSType]
        """
        return self._link_provider

    @link_provider.setter
    def link_provider(self, link_provider):
        """
        Sets the link_provider of this Scholix.

        :param link_provider: The link_provider of this Scholix.
        :type link_provider: List[DSType]
        """

        self._link_provider = link_provider

    @property
    def relationship(self):
        """
        Gets the relationship of this Scholix.

        :return: The relationship of this Scholix.
        :rtype: RelationshipType
        """
        return self._relationship

    @relationship.setter
    def relationship(self, relationship):
        """
        Sets the relationship of this Scholix.

        :param relationship: The relationship of this Scholix.
        :type relationship: RelationshipType
        """

        self._relationship = relationship

    @property
    def source(self):
        """
        Gets the source of this Scholix.

        :return: The source of this Scholix.
        :rtype: ObjectType
        """
        return self._source

    @source.setter
    def source(self, source):
        """
        Sets the source of this Scholix.

        :param source: The source of this Scholix.
        :type source: ObjectType
        """

        self._source = source

    @property
    def target(self):
        """
        Gets the target of this Scholix.

        :return: The target of this Scholix.
        :rtype: ObjectType
        """
        return self._target

    @target.setter
    def target(self, target):
        """
        Sets the target of this Scholix.

        :param target: The target of this Scholix.
        :type target: ObjectType
        """

        self._target = target

