# coding: utf-8

"""
    tosca-sure

    TOSCA Simple qUeRy sErvice (SURE).   # noqa: E501

    OpenAPI spec version: 1.0.0
    Contact: S.Koulouzis@uva.nl
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""


import pprint
import re  # noqa: F401

import six


class ToscaTemplate(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 = {
        'tosca_definitions_version': 'str',
        'tosca_default_namespace': 'str',
        'template_name': 'str',
        'topology_template': 'TopologyTemplate',
        'template_author': 'str',
        'template_version': 'str',
        'description': 'str',
        'imports': 'list[dict(str, object)]',
        'dsl_definitions': 'dict(str, object)',
        'node_types': 'dict(str, object)',
        'relationship_types': 'dict(str, object)',
        'relationship_templates': 'dict(str, object)',
        'capability_types': 'dict(str, object)',
        'artifact_types': 'dict(str, object)',
        'data_types': 'dict(str, object)',
        'interface_types': 'dict(str, object)',
        'policy_types': 'dict(str, object)',
        'group_types': 'dict(str, object)',
        'repositories': 'dict(str, object)'
    }

    attribute_map = {
        'tosca_definitions_version': 'tosca_definitions_version',
        'tosca_default_namespace': 'tosca_default_namespace',
        'template_name': 'template_name',
        'topology_template': 'topology_template',
        'template_author': 'template_author',
        'template_version': 'template_version',
        'description': 'description',
        'imports': 'imports',
        'dsl_definitions': 'dsl_definitions',
        'node_types': 'node_types',
        'relationship_types': 'relationship_types',
        'relationship_templates': 'relationship_templates',
        'capability_types': 'capability_types',
        'artifact_types': 'artifact_types',
        'data_types': 'data_types',
        'interface_types': 'interface_types',
        'policy_types': 'policy_types',
        'group_types': 'group_types',
        'repositories': 'repositories'
    }

    def __init__(self, tosca_definitions_version=None, tosca_default_namespace=None, template_name=None, topology_template=None, template_author=None, template_version=None, description=None, imports=None, dsl_definitions=None, node_types=None, relationship_types=None, relationship_templates=None, capability_types=None, artifact_types=None, data_types=None, interface_types=None, policy_types=None, group_types=None, repositories=None):  # noqa: E501
        """ToscaTemplate - a model defined in Swagger"""  # noqa: E501

        self._tosca_definitions_version = None
        self._tosca_default_namespace = None
        self._template_name = None
        self._topology_template = None
        self._template_author = None
        self._template_version = None
        self._description = None
        self._imports = None
        self._dsl_definitions = None
        self._node_types = None
        self._relationship_types = None
        self._relationship_templates = None
        self._capability_types = None
        self._artifact_types = None
        self._data_types = None
        self._interface_types = None
        self._policy_types = None
        self._group_types = None
        self._repositories = None
        self.discriminator = None

        if tosca_definitions_version is not None:
            self.tosca_definitions_version = tosca_definitions_version
        if tosca_default_namespace is not None:
            self.tosca_default_namespace = tosca_default_namespace
        if template_name is not None:
            self.template_name = template_name
        if topology_template is not None:
            self.topology_template = topology_template
        if template_author is not None:
            self.template_author = template_author
        if template_version is not None:
            self.template_version = template_version
        if description is not None:
            self.description = description
        if imports is not None:
            self.imports = imports
        if dsl_definitions is not None:
            self.dsl_definitions = dsl_definitions
        if node_types is not None:
            self.node_types = node_types
        if relationship_types is not None:
            self.relationship_types = relationship_types
        if relationship_templates is not None:
            self.relationship_templates = relationship_templates
        if capability_types is not None:
            self.capability_types = capability_types
        if artifact_types is not None:
            self.artifact_types = artifact_types
        if data_types is not None:
            self.data_types = data_types
        if interface_types is not None:
            self.interface_types = interface_types
        if policy_types is not None:
            self.policy_types = policy_types
        if group_types is not None:
            self.group_types = group_types
        if repositories is not None:
            self.repositories = repositories

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


        :return: The tosca_definitions_version of this ToscaTemplate.  # noqa: E501
        :rtype: str
        """
        return self._tosca_definitions_version

    @tosca_definitions_version.setter
    def tosca_definitions_version(self, tosca_definitions_version):
        """Sets the tosca_definitions_version of this ToscaTemplate.


        :param tosca_definitions_version: The tosca_definitions_version of this ToscaTemplate.  # noqa: E501
        :type: str
        """

        self._tosca_definitions_version = tosca_definitions_version

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


        :return: The tosca_default_namespace of this ToscaTemplate.  # noqa: E501
        :rtype: str
        """
        return self._tosca_default_namespace

    @tosca_default_namespace.setter
    def tosca_default_namespace(self, tosca_default_namespace):
        """Sets the tosca_default_namespace of this ToscaTemplate.


        :param tosca_default_namespace: The tosca_default_namespace of this ToscaTemplate.  # noqa: E501
        :type: str
        """

        self._tosca_default_namespace = tosca_default_namespace

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


        :return: The template_name of this ToscaTemplate.  # noqa: E501
        :rtype: str
        """
        return self._template_name

    @template_name.setter
    def template_name(self, template_name):
        """Sets the template_name of this ToscaTemplate.


        :param template_name: The template_name of this ToscaTemplate.  # noqa: E501
        :type: str
        """

        self._template_name = template_name

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


        :return: The topology_template of this ToscaTemplate.  # noqa: E501
        :rtype: TopologyTemplate
        """
        return self._topology_template

    @topology_template.setter
    def topology_template(self, topology_template):
        """Sets the topology_template of this ToscaTemplate.


        :param topology_template: The topology_template of this ToscaTemplate.  # noqa: E501
        :type: TopologyTemplate
        """

        self._topology_template = topology_template

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


        :return: The template_author of this ToscaTemplate.  # noqa: E501
        :rtype: str
        """
        return self._template_author

    @template_author.setter
    def template_author(self, template_author):
        """Sets the template_author of this ToscaTemplate.


        :param template_author: The template_author of this ToscaTemplate.  # noqa: E501
        :type: str
        """

        self._template_author = template_author

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


        :return: The template_version of this ToscaTemplate.  # noqa: E501
        :rtype: str
        """
        return self._template_version

    @template_version.setter
    def template_version(self, template_version):
        """Sets the template_version of this ToscaTemplate.


        :param template_version: The template_version of this ToscaTemplate.  # noqa: E501
        :type: str
        """

        self._template_version = template_version

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


        :return: The description of this ToscaTemplate.  # noqa: E501
        :rtype: str
        """
        return self._description

    @description.setter
    def description(self, description):
        """Sets the description of this ToscaTemplate.


        :param description: The description of this ToscaTemplate.  # noqa: E501
        :type: str
        """

        self._description = description

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


        :return: The imports of this ToscaTemplate.  # noqa: E501
        :rtype: list[dict(str, object)]
        """
        return self._imports

    @imports.setter
    def imports(self, imports):
        """Sets the imports of this ToscaTemplate.


        :param imports: The imports of this ToscaTemplate.  # noqa: E501
        :type: list[dict(str, object)]
        """

        self._imports = imports

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


        :return: The dsl_definitions of this ToscaTemplate.  # noqa: E501
        :rtype: dict(str, object)
        """
        return self._dsl_definitions

    @dsl_definitions.setter
    def dsl_definitions(self, dsl_definitions):
        """Sets the dsl_definitions of this ToscaTemplate.


        :param dsl_definitions: The dsl_definitions of this ToscaTemplate.  # noqa: E501
        :type: dict(str, object)
        """

        self._dsl_definitions = dsl_definitions

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


        :return: The node_types of this ToscaTemplate.  # noqa: E501
        :rtype: dict(str, object)
        """
        return self._node_types

    @node_types.setter
    def node_types(self, node_types):
        """Sets the node_types of this ToscaTemplate.


        :param node_types: The node_types of this ToscaTemplate.  # noqa: E501
        :type: dict(str, object)
        """

        self._node_types = node_types

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


        :return: The relationship_types of this ToscaTemplate.  # noqa: E501
        :rtype: dict(str, object)
        """
        return self._relationship_types

    @relationship_types.setter
    def relationship_types(self, relationship_types):
        """Sets the relationship_types of this ToscaTemplate.


        :param relationship_types: The relationship_types of this ToscaTemplate.  # noqa: E501
        :type: dict(str, object)
        """

        self._relationship_types = relationship_types

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


        :return: The relationship_templates of this ToscaTemplate.  # noqa: E501
        :rtype: dict(str, object)
        """
        return self._relationship_templates

    @relationship_templates.setter
    def relationship_templates(self, relationship_templates):
        """Sets the relationship_templates of this ToscaTemplate.


        :param relationship_templates: The relationship_templates of this ToscaTemplate.  # noqa: E501
        :type: dict(str, object)
        """

        self._relationship_templates = relationship_templates

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


        :return: The capability_types of this ToscaTemplate.  # noqa: E501
        :rtype: dict(str, object)
        """
        return self._capability_types

    @capability_types.setter
    def capability_types(self, capability_types):
        """Sets the capability_types of this ToscaTemplate.


        :param capability_types: The capability_types of this ToscaTemplate.  # noqa: E501
        :type: dict(str, object)
        """

        self._capability_types = capability_types

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


        :return: The artifact_types of this ToscaTemplate.  # noqa: E501
        :rtype: dict(str, object)
        """
        return self._artifact_types

    @artifact_types.setter
    def artifact_types(self, artifact_types):
        """Sets the artifact_types of this ToscaTemplate.


        :param artifact_types: The artifact_types of this ToscaTemplate.  # noqa: E501
        :type: dict(str, object)
        """

        self._artifact_types = artifact_types

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


        :return: The data_types of this ToscaTemplate.  # noqa: E501
        :rtype: dict(str, object)
        """
        return self._data_types

    @data_types.setter
    def data_types(self, data_types):
        """Sets the data_types of this ToscaTemplate.


        :param data_types: The data_types of this ToscaTemplate.  # noqa: E501
        :type: dict(str, object)
        """

        self._data_types = data_types

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


        :return: The interface_types of this ToscaTemplate.  # noqa: E501
        :rtype: dict(str, object)
        """
        return self._interface_types

    @interface_types.setter
    def interface_types(self, interface_types):
        """Sets the interface_types of this ToscaTemplate.


        :param interface_types: The interface_types of this ToscaTemplate.  # noqa: E501
        :type: dict(str, object)
        """

        self._interface_types = interface_types

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


        :return: The policy_types of this ToscaTemplate.  # noqa: E501
        :rtype: dict(str, object)
        """
        return self._policy_types

    @policy_types.setter
    def policy_types(self, policy_types):
        """Sets the policy_types of this ToscaTemplate.


        :param policy_types: The policy_types of this ToscaTemplate.  # noqa: E501
        :type: dict(str, object)
        """

        self._policy_types = policy_types

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


        :return: The group_types of this ToscaTemplate.  # noqa: E501
        :rtype: dict(str, object)
        """
        return self._group_types

    @group_types.setter
    def group_types(self, group_types):
        """Sets the group_types of this ToscaTemplate.


        :param group_types: The group_types of this ToscaTemplate.  # noqa: E501
        :type: dict(str, object)
        """

        self._group_types = group_types

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


        :return: The repositories of this ToscaTemplate.  # noqa: E501
        :rtype: dict(str, object)
        """
        return self._repositories

    @repositories.setter
    def repositories(self, repositories):
        """Sets the repositories of this ToscaTemplate.


        :param repositories: The repositories of this ToscaTemplate.  # noqa: E501
        :type: dict(str, object)
        """

        self._repositories = repositories

    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(ToscaTemplate, 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, ToscaTemplate):
            return False

        return self.__dict__ == other.__dict__

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