# coding: utf-8

from __future__ import absolute_import
from datetime import date, datetime  # noqa: F401

from typing import List, Dict  # noqa: F401

from mistk.model.server.models.base_model_ import Model
from mistk.model.server import util


class ObjectReference(Model):
    """NOTE: This class is auto generated by the swagger code generator program.

    Do not edit the class manually.
    """

    def __init__(self, kind: str=None, project: str=None, id: str=None, name: str=None, instance: object=None):  # noqa: E501
        """ObjectReference - a model defined in Swagger

        :param kind: The kind of this ObjectReference.  # noqa: E501
        :type kind: str
        :param project: The project of this ObjectReference.  # noqa: E501
        :type project: str
        :param id: The id of this ObjectReference.  # noqa: E501
        :type id: str
        :param name: The name of this ObjectReference.  # noqa: E501
        :type name: str
        :param instance: The instance of this ObjectReference.  # noqa: E501
        :type instance: object
        """
        self.swagger_types = {
            'kind': str,
            'project': str,
            'id': str,
            'name': str,
            'instance': object
        }

        self.attribute_map = {
            'kind': 'kind',
            'project': 'project',
            'id': 'id',
            'name': 'name',
            'instance': 'instance'
        }

        self._kind = kind
        self._project = project
        self._id = id
        self._name = name
        self._instance = instance

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

        :param dikt: A dict.
        :type: dict
        :return: The ObjectReference of this ObjectReference.  # noqa: E501
        :rtype: ObjectReference
        """
        return util.deserialize_model(dikt, cls)

    @property
    def kind(self) -> str:
        """Gets the kind of this ObjectReference.

        The type of the object being referenced. This is often optional as it will be inferrred by the context.   # noqa: E501

        :return: The kind of this ObjectReference.
        :rtype: str
        """
        return self._kind

    @kind.setter
    def kind(self, kind: str):
        """Sets the kind of this ObjectReference.

        The type of the object being referenced. This is often optional as it will be inferrred by the context.   # noqa: E501

        :param kind: The kind of this ObjectReference.
        :type kind: str
        """

        self._kind = kind

    @property
    def project(self) -> str:
        """Gets the project of this ObjectReference.

        The project (namespace) of this object.   # noqa: E501

        :return: The project of this ObjectReference.
        :rtype: str
        """
        return self._project

    @project.setter
    def project(self, project: str):
        """Sets the project of this ObjectReference.

        The project (namespace) of this object.   # noqa: E501

        :param project: The project of this ObjectReference.
        :type project: str
        """

        self._project = project

    @property
    def id(self) -> str:
        """Gets the id of this ObjectReference.

        The unique identifier of the object.  # noqa: E501

        :return: The id of this ObjectReference.
        :rtype: str
        """
        return self._id

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

        The unique identifier of the object.  # noqa: E501

        :param id: The id of this ObjectReference.
        :type id: str
        """

        self._id = id

    @property
    def name(self) -> str:
        """Gets the name of this ObjectReference.

        The unique name of the object.  # noqa: E501

        :return: The name of this ObjectReference.
        :rtype: str
        """
        return self._name

    @name.setter
    def name(self, name: str):
        """Sets the name of this ObjectReference.

        The unique name of the object.  # noqa: E501

        :param name: The name of this ObjectReference.
        :type name: str
        """

        self._name = name

    @property
    def instance(self) -> object:
        """Gets the instance of this ObjectReference.

        Optionally, the object reference can contain the complete object.  This is useful for unit testing where you don't want to go out to the SRM to obtain the referenced object.   # noqa: E501

        :return: The instance of this ObjectReference.
        :rtype: object
        """
        return self._instance

    @instance.setter
    def instance(self, instance: object):
        """Sets the instance of this ObjectReference.

        Optionally, the object reference can contain the complete object.  This is useful for unit testing where you don't want to go out to the SRM to obtain the referenced object.   # noqa: E501

        :param instance: The instance of this ObjectReference.
        :type instance: object
        """

        self._instance = instance
