# coding: utf-8

from __future__ import absolute_import
from swagger_server.models.datasource_model import DatasourceModel
from swagger_server.models.relationship_model import RelationshipModel
from swagger_server.models.scholix_resource_model import ScholixResourceModel
from .base_model_ import Model
from datetime import date, datetime
from typing import List, Dict
from ..util import deserialize_model


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

        :param link_provider: The link_provider of this ScholixDataModel.
        :type link_provider: List[DatasourceModel]
        :param target: The target of this ScholixDataModel.
        :type target: ScholixResourceModel
        :param source: The source of this ScholixDataModel.
        :type source: ScholixResourceModel
        :param license_url: The license_url of this ScholixDataModel.
        :type license_url: str
        :param harvested_date: The harvested_date of this ScholixDataModel.
        :type harvested_date: date
        :param link_publication_date: The link_publication_date of this ScholixDataModel.
        :type link_publication_date: str
        :param relationship_type: The relationship_type of this ScholixDataModel.
        :type relationship_type: RelationshipModel
        """
        self.swagger_types = {
            'link_provider': List[DatasourceModel],
            'target': ScholixResourceModel,
            'source': ScholixResourceModel,
            'license_url': str,
            'harvested_date': date,
            'link_publication_date': str,
            'relationship_type': RelationshipModel
        }

        self.attribute_map = {
            'link_provider': 'LinkProvider',
            'target': 'target',
            'source': 'source',
            'license_url': 'LicenseURL',
            'harvested_date': 'HarvestedDate',
            'link_publication_date': 'LinkPublicationDate',
            'relationship_type': 'RelationshipType'
        }

        self._link_provider = link_provider
        self._target = target
        self._source = source
        self._license_url = license_url
        self._harvested_date = harvested_date
        self._link_publication_date = link_publication_date
        self._relationship_type = relationship_type

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

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

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

        :return: The link_provider of this ScholixDataModel.
        :rtype: List[DatasourceModel]
        """
        return self._link_provider

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

        :param link_provider: The link_provider of this ScholixDataModel.
        :type link_provider: List[DatasourceModel]
        """

        self._link_provider = link_provider

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

        :return: The target of this ScholixDataModel.
        :rtype: ScholixResourceModel
        """
        return self._target

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

        :param target: The target of this ScholixDataModel.
        :type target: ScholixResourceModel
        """

        self._target = target

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

        :return: The source of this ScholixDataModel.
        :rtype: ScholixResourceModel
        """
        return self._source

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

        :param source: The source of this ScholixDataModel.
        :type source: ScholixResourceModel
        """

        self._source = source

    @property
    def license_url(self):
        """
        Gets the license_url of this ScholixDataModel.

        :return: The license_url of this ScholixDataModel.
        :rtype: str
        """
        return self._license_url

    @license_url.setter
    def license_url(self, license_url):
        """
        Sets the license_url of this ScholixDataModel.

        :param license_url: The license_url of this ScholixDataModel.
        :type license_url: str
        """

        self._license_url = license_url

    @property
    def harvested_date(self):
        """
        Gets the harvested_date of this ScholixDataModel.

        :return: The harvested_date of this ScholixDataModel.
        :rtype: date
        """
        return self._harvested_date

    @harvested_date.setter
    def harvested_date(self, harvested_date):
        """
        Sets the harvested_date of this ScholixDataModel.

        :param harvested_date: The harvested_date of this ScholixDataModel.
        :type harvested_date: date
        """

        self._harvested_date = harvested_date

    @property
    def link_publication_date(self):
        """
        Gets the link_publication_date of this ScholixDataModel.

        :return: The link_publication_date of this ScholixDataModel.
        :rtype: str
        """
        return self._link_publication_date

    @link_publication_date.setter
    def link_publication_date(self, link_publication_date):
        """
        Sets the link_publication_date of this ScholixDataModel.

        :param link_publication_date: The link_publication_date of this ScholixDataModel.
        :type link_publication_date: str
        """

        self._link_publication_date = link_publication_date

    @property
    def relationship_type(self):
        """
        Gets the relationship_type of this ScholixDataModel.

        :return: The relationship_type of this ScholixDataModel.
        :rtype: RelationshipModel
        """
        return self._relationship_type

    @relationship_type.setter
    def relationship_type(self, relationship_type):
        """
        Sets the relationship_type of this ScholixDataModel.

        :param relationship_type: The relationship_type of this ScholixDataModel.
        :type relationship_type: RelationshipModel
        """

        self._relationship_type = relationship_type

