# coding: utf-8

"""
    herd

    No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)  # noqa: E501

    OpenAPI spec version: 0.178.0-SNAPSHOT
    Generated by: https://openapi-generator.tech
"""


import pprint
import re  # noqa: F401

import six


class BusinessObjectFormatDdlRequest(object):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.
    """

    """
    Attributes:
      openapi_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.
    """
    openapi_types = {
        'namespace': 'str',
        'business_object_definition_name': 'str',
        'business_object_format_usage': 'str',
        'business_object_format_file_type': 'str',
        'business_object_format_version': 'int',
        'output_format': 'str',
        'table_name': 'str',
        'custom_ddl_name': 'str',
        'include_drop_table_statement': 'bool',
        'include_if_not_exists_option': 'bool',
        'replace_columns': 'bool'
    }

    attribute_map = {
        'namespace': 'namespace',
        'business_object_definition_name': 'businessObjectDefinitionName',
        'business_object_format_usage': 'businessObjectFormatUsage',
        'business_object_format_file_type': 'businessObjectFormatFileType',
        'business_object_format_version': 'businessObjectFormatVersion',
        'output_format': 'outputFormat',
        'table_name': 'tableName',
        'custom_ddl_name': 'customDdlName',
        'include_drop_table_statement': 'includeDropTableStatement',
        'include_if_not_exists_option': 'includeIfNotExistsOption',
        'replace_columns': 'replaceColumns'
    }

    def __init__(self, namespace=None, business_object_definition_name=None, business_object_format_usage=None, business_object_format_file_type=None, business_object_format_version=None, output_format=None, table_name=None, custom_ddl_name=None, include_drop_table_statement=None, include_if_not_exists_option=None, replace_columns=None):  # noqa: E501
        """BusinessObjectFormatDdlRequest - a model defined in OpenAPI"""  # noqa: E501

        self._namespace = None
        self._business_object_definition_name = None
        self._business_object_format_usage = None
        self._business_object_format_file_type = None
        self._business_object_format_version = None
        self._output_format = None
        self._table_name = None
        self._custom_ddl_name = None
        self._include_drop_table_statement = None
        self._include_if_not_exists_option = None
        self._replace_columns = None
        self.discriminator = None

        self.namespace = namespace
        self.business_object_definition_name = business_object_definition_name
        self.business_object_format_usage = business_object_format_usage
        self.business_object_format_file_type = business_object_format_file_type
        if business_object_format_version is not None:
            self.business_object_format_version = business_object_format_version
        self.output_format = output_format
        self.table_name = table_name
        if custom_ddl_name is not None:
            self.custom_ddl_name = custom_ddl_name
        if include_drop_table_statement is not None:
            self.include_drop_table_statement = include_drop_table_statement
        if include_if_not_exists_option is not None:
            self.include_if_not_exists_option = include_if_not_exists_option
        if replace_columns is not None:
            self.replace_columns = replace_columns

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

        The Namespace to which a Business Object Format is related  # noqa: E501

        :return: The namespace of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :rtype: str
        """
        return self._namespace

    @namespace.setter
    def namespace(self, namespace):
        """Sets the namespace of this BusinessObjectFormatDdlRequest.

        The Namespace to which a Business Object Format is related  # noqa: E501

        :param namespace: The namespace of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :type: str
        """
        if namespace is None:
            raise ValueError("Invalid value for `namespace`, must not be `None`")  # noqa: E501

        self._namespace = namespace

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

        The name of the Business Object Definition to which a Business Object Format is related  # noqa: E501

        :return: The business_object_definition_name of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :rtype: str
        """
        return self._business_object_definition_name

    @business_object_definition_name.setter
    def business_object_definition_name(self, business_object_definition_name):
        """Sets the business_object_definition_name of this BusinessObjectFormatDdlRequest.

        The name of the Business Object Definition to which a Business Object Format is related  # noqa: E501

        :param business_object_definition_name: The business_object_definition_name of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :type: str
        """
        if business_object_definition_name is None:
            raise ValueError("Invalid value for `business_object_definition_name`, must not be `None`")  # noqa: E501

        self._business_object_definition_name = business_object_definition_name

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

        The Usage of this Business Object Format - a string describing how this format is used. Often used as a label for the Business                   Object Format. Does not have to be unique in the system, the Usage string is frequently shared across formats for multiple Business Object                   Definitions                  # noqa: E501

        :return: The business_object_format_usage of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :rtype: str
        """
        return self._business_object_format_usage

    @business_object_format_usage.setter
    def business_object_format_usage(self, business_object_format_usage):
        """Sets the business_object_format_usage of this BusinessObjectFormatDdlRequest.

        The Usage of this Business Object Format - a string describing how this format is used. Often used as a label for the Business                   Object Format. Does not have to be unique in the system, the Usage string is frequently shared across formats for multiple Business Object                   Definitions                  # noqa: E501

        :param business_object_format_usage: The business_object_format_usage of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :type: str
        """
        if business_object_format_usage is None:
            raise ValueError("Invalid value for `business_object_format_usage`, must not be `None`")  # noqa: E501

        self._business_object_format_usage = business_object_format_usage

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

        A File Type known to the system that describes the file type of data stored under a Business Object Format  # noqa: E501

        :return: The business_object_format_file_type of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :rtype: str
        """
        return self._business_object_format_file_type

    @business_object_format_file_type.setter
    def business_object_format_file_type(self, business_object_format_file_type):
        """Sets the business_object_format_file_type of this BusinessObjectFormatDdlRequest.

        A File Type known to the system that describes the file type of data stored under a Business Object Format  # noqa: E501

        :param business_object_format_file_type: The business_object_format_file_type of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :type: str
        """
        if business_object_format_file_type is None:
            raise ValueError("Invalid value for `business_object_format_file_type`, must not be `None`")  # noqa: E501

        self._business_object_format_file_type = business_object_format_file_type

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

        The numeric version of a Business Object Format. If not supplied, the latest version will be used  # noqa: E501

        :return: The business_object_format_version of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :rtype: int
        """
        return self._business_object_format_version

    @business_object_format_version.setter
    def business_object_format_version(self, business_object_format_version):
        """Sets the business_object_format_version of this BusinessObjectFormatDdlRequest.

        The numeric version of a Business Object Format. If not supplied, the latest version will be used  # noqa: E501

        :param business_object_format_version: The business_object_format_version of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :type: int
        """

        self._business_object_format_version = business_object_format_version

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

        The output format for the generated DDL. The only format currently supported is HIVE_13_DDL  # noqa: E501

        :return: The output_format of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :rtype: str
        """
        return self._output_format

    @output_format.setter
    def output_format(self, output_format):
        """Sets the output_format of this BusinessObjectFormatDdlRequest.

        The output format for the generated DDL. The only format currently supported is HIVE_13_DDL  # noqa: E501

        :param output_format: The output_format of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :type: str
        """
        if output_format is None:
            raise ValueError("Invalid value for `output_format`, must not be `None`")  # noqa: E501
        allowed_values = ["HIVE_13_DDL"]  # noqa: E501
        if output_format not in allowed_values:
            raise ValueError(
                "Invalid value for `output_format` ({0}), must be one of {1}"  # noqa: E501
                .format(output_format, allowed_values)
            )

        self._output_format = output_format

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

        The table name to be used in the generated DDL  # noqa: E501

        :return: The table_name of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :rtype: str
        """
        return self._table_name

    @table_name.setter
    def table_name(self, table_name):
        """Sets the table_name of this BusinessObjectFormatDdlRequest.

        The table name to be used in the generated DDL  # noqa: E501

        :param table_name: The table_name of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :type: str
        """
        if table_name is None:
            raise ValueError("Invalid value for `table_name`, must not be `None`")  # noqa: E501

        self._table_name = table_name

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

        The name of the Custom DDL. When Custom DDL name is specified, the Custom DDL which had previously been stored Business Object                   Format is returned instead of generated DDL. Must not be specified when replaceColumns is true                  # noqa: E501

        :return: The custom_ddl_name of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :rtype: str
        """
        return self._custom_ddl_name

    @custom_ddl_name.setter
    def custom_ddl_name(self, custom_ddl_name):
        """Sets the custom_ddl_name of this BusinessObjectFormatDdlRequest.

        The name of the Custom DDL. When Custom DDL name is specified, the Custom DDL which had previously been stored Business Object                   Format is returned instead of generated DDL. Must not be specified when replaceColumns is true                  # noqa: E501

        :param custom_ddl_name: The custom_ddl_name of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :type: str
        """

        self._custom_ddl_name = custom_ddl_name

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

        If true, drop table statement for existing table will be added to the generated DDL. Must not be specified when replaceColumns                   is true.                  # noqa: E501

        :return: The include_drop_table_statement of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :rtype: bool
        """
        return self._include_drop_table_statement

    @include_drop_table_statement.setter
    def include_drop_table_statement(self, include_drop_table_statement):
        """Sets the include_drop_table_statement of this BusinessObjectFormatDdlRequest.

        If true, drop table statement for existing table will be added to the generated DDL. Must not be specified when replaceColumns                   is true.                  # noqa: E501

        :param include_drop_table_statement: The include_drop_table_statement of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :type: bool
        """

        self._include_drop_table_statement = include_drop_table_statement

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

        If true, IF NOT EXISTS option will be added to the CREATE TABLE ... statement in the generrated DDL. Please note that this                   parameter value has no effect on the relative CREATE TABLE ... statement, if generated DDL uses custom DDL. Must not be specified when                   replaceColumns is true.                  # noqa: E501

        :return: The include_if_not_exists_option of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :rtype: bool
        """
        return self._include_if_not_exists_option

    @include_if_not_exists_option.setter
    def include_if_not_exists_option(self, include_if_not_exists_option):
        """Sets the include_if_not_exists_option of this BusinessObjectFormatDdlRequest.

        If true, IF NOT EXISTS option will be added to the CREATE TABLE ... statement in the generrated DDL. Please note that this                   parameter value has no effect on the relative CREATE TABLE ... statement, if generated DDL uses custom DDL. Must not be specified when                   replaceColumns is true.                  # noqa: E501

        :param include_if_not_exists_option: The include_if_not_exists_option of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :type: bool
        """

        self._include_if_not_exists_option = include_if_not_exists_option

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

        If true, an ALTER TABLE ... REPLACE COLUMNS will be generated  # noqa: E501

        :return: The replace_columns of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :rtype: bool
        """
        return self._replace_columns

    @replace_columns.setter
    def replace_columns(self, replace_columns):
        """Sets the replace_columns of this BusinessObjectFormatDdlRequest.

        If true, an ALTER TABLE ... REPLACE COLUMNS will be generated  # noqa: E501

        :param replace_columns: The replace_columns of this BusinessObjectFormatDdlRequest.  # noqa: E501
        :type: bool
        """

        self._replace_columns = replace_columns

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in six.iteritems(self.openapi_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

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

        return self.__dict__ == other.__dict__

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