# 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 BusinessObjectFormatCreateRequest(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',
        'partition_key': 'str',
        'description': 'str',
        'document_schema': 'str',
        'document_schema_url': 'str',
        'attributes': 'list[Attribute]',
        'attribute_definitions': 'list[AttributeDefinition]',
        'enable_business_object_data_published_attributes_change_event_notification': 'bool',
        'schema': 'Schema',
        'relational_schema_name': 'str',
        'relational_table_name': 'str'
    }

    attribute_map = {
        'namespace': 'namespace',
        'business_object_definition_name': 'businessObjectDefinitionName',
        'business_object_format_usage': 'businessObjectFormatUsage',
        'business_object_format_file_type': 'businessObjectFormatFileType',
        'partition_key': 'partitionKey',
        'description': 'description',
        'document_schema': 'documentSchema',
        'document_schema_url': 'documentSchemaUrl',
        'attributes': 'attributes',
        'attribute_definitions': 'attributeDefinitions',
        'enable_business_object_data_published_attributes_change_event_notification': 'enableBusinessObjectDataPublishedAttributesChangeEventNotification',
        'schema': 'schema',
        'relational_schema_name': 'relationalSchemaName',
        'relational_table_name': 'relationalTableName'
    }

    def __init__(self, namespace=None, business_object_definition_name=None, business_object_format_usage=None, business_object_format_file_type=None, partition_key=None, description=None, document_schema=None, document_schema_url=None, attributes=None, attribute_definitions=None, enable_business_object_data_published_attributes_change_event_notification=None, schema=None, relational_schema_name=None, relational_table_name=None):  # noqa: E501
        """BusinessObjectFormatCreateRequest - 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._partition_key = None
        self._description = None
        self._document_schema = None
        self._document_schema_url = None
        self._attributes = None
        self._attribute_definitions = None
        self._enable_business_object_data_published_attributes_change_event_notification = None
        self._schema = None
        self._relational_schema_name = None
        self._relational_table_name = 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
        self.partition_key = partition_key
        if description is not None:
            self.description = description
        if document_schema is not None:
            self.document_schema = document_schema
        if document_schema_url is not None:
            self.document_schema_url = document_schema_url
        if attributes is not None:
            self.attributes = attributes
        if attribute_definitions is not None:
            self.attribute_definitions = attribute_definitions
        if enable_business_object_data_published_attributes_change_event_notification is not None:
            self.enable_business_object_data_published_attributes_change_event_notification = enable_business_object_data_published_attributes_change_event_notification
        if schema is not None:
            self.schema = schema
        if relational_schema_name is not None:
            self.relational_schema_name = relational_schema_name
        if relational_table_name is not None:
            self.relational_table_name = relational_table_name

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

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

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

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

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

        :param namespace: The namespace of this BusinessObjectFormatCreateRequest.  # 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 BusinessObjectFormatCreateRequest.  # noqa: E501

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

        :return: The business_object_definition_name of this BusinessObjectFormatCreateRequest.  # 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 BusinessObjectFormatCreateRequest.

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

        :param business_object_definition_name: The business_object_definition_name of this BusinessObjectFormatCreateRequest.  # 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 BusinessObjectFormatCreateRequest.  # 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 BusinessObjectFormatCreateRequest.  # 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 BusinessObjectFormatCreateRequest.

        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 BusinessObjectFormatCreateRequest.  # 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 BusinessObjectFormatCreateRequest.  # noqa: E501

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

        :return: The business_object_format_file_type of this BusinessObjectFormatCreateRequest.  # 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 BusinessObjectFormatCreateRequest.

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

        :param business_object_format_file_type: The business_object_format_file_type of this BusinessObjectFormatCreateRequest.  # 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 partition_key(self):
        """Gets the partition_key of this BusinessObjectFormatCreateRequest.  # noqa: E501

        The partition key for this Business Object Format  # noqa: E501

        :return: The partition_key of this BusinessObjectFormatCreateRequest.  # noqa: E501
        :rtype: str
        """
        return self._partition_key

    @partition_key.setter
    def partition_key(self, partition_key):
        """Sets the partition_key of this BusinessObjectFormatCreateRequest.

        The partition key for this Business Object Format  # noqa: E501

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

        self._partition_key = partition_key

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

        Description of the Business Object Format  # noqa: E501

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

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

        Description of the Business Object Format  # noqa: E501

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

        self._description = description

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

        The schema for document-style business object data registered with Herd.                   The schema allows the publisher to perform self-service validation of incoming data when registering business object data. It also allows                   the consumers to perform self-service downstream actions like hydrating objects when consuming business object data. The documentSchema is                   optional. Currently any documentSchema is accepted. Its content is not validated                  # noqa: E501

        :return: The document_schema of this BusinessObjectFormatCreateRequest.  # noqa: E501
        :rtype: str
        """
        return self._document_schema

    @document_schema.setter
    def document_schema(self, document_schema):
        """Sets the document_schema of this BusinessObjectFormatCreateRequest.

        The schema for document-style business object data registered with Herd.                   The schema allows the publisher to perform self-service validation of incoming data when registering business object data. It also allows                   the consumers to perform self-service downstream actions like hydrating objects when consuming business object data. The documentSchema is                   optional. Currently any documentSchema is accepted. Its content is not validated                  # noqa: E501

        :param document_schema: The document_schema of this BusinessObjectFormatCreateRequest.  # noqa: E501
        :type: str
        """

        self._document_schema = document_schema

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

        An optional URL of the documentSchema to an externally hosted XSD or JSON. Herd will not access this URL,                   it will simply store and retrieve the URL                  # noqa: E501

        :return: The document_schema_url of this BusinessObjectFormatCreateRequest.  # noqa: E501
        :rtype: str
        """
        return self._document_schema_url

    @document_schema_url.setter
    def document_schema_url(self, document_schema_url):
        """Sets the document_schema_url of this BusinessObjectFormatCreateRequest.

        An optional URL of the documentSchema to an externally hosted XSD or JSON. Herd will not access this URL,                   it will simply store and retrieve the URL                  # noqa: E501

        :param document_schema_url: The document_schema_url of this BusinessObjectFormatCreateRequest.  # noqa: E501
        :type: str
        """

        self._document_schema_url = document_schema_url

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

        Custom user-defined metadata associated with this Business Object Format. \"name\" is the attribute name (i.e. the key) and                   \"value\" is the attribute value                  # noqa: E501

        :return: The attributes of this BusinessObjectFormatCreateRequest.  # noqa: E501
        :rtype: list[Attribute]
        """
        return self._attributes

    @attributes.setter
    def attributes(self, attributes):
        """Sets the attributes of this BusinessObjectFormatCreateRequest.

        Custom user-defined metadata associated with this Business Object Format. \"name\" is the attribute name (i.e. the key) and                   \"value\" is the attribute value                  # noqa: E501

        :param attributes: The attributes of this BusinessObjectFormatCreateRequest.  # noqa: E501
        :type: list[Attribute]
        """

        self._attributes = attributes

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

        List of attribute definitions (for storage of custom user-defined metadata with objects) which are required to be specified                   when registering Business Object Data against this format. This list will define which metadata must be specified, but additional metadata can                   still be registered which is not specified in this list. The metadata (attributes) will allow applications to store custom data with                   registered data for use by consumers of the data                  # noqa: E501

        :return: The attribute_definitions of this BusinessObjectFormatCreateRequest.  # noqa: E501
        :rtype: list[AttributeDefinition]
        """
        return self._attribute_definitions

    @attribute_definitions.setter
    def attribute_definitions(self, attribute_definitions):
        """Sets the attribute_definitions of this BusinessObjectFormatCreateRequest.

        List of attribute definitions (for storage of custom user-defined metadata with objects) which are required to be specified                   when registering Business Object Data against this format. This list will define which metadata must be specified, but additional metadata can                   still be registered which is not specified in this list. The metadata (attributes) will allow applications to store custom data with                   registered data for use by consumers of the data                  # noqa: E501

        :param attribute_definitions: The attribute_definitions of this BusinessObjectFormatCreateRequest.  # noqa: E501
        :type: list[AttributeDefinition]
        """

        self._attribute_definitions = attribute_definitions

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

        If true, enables Business Object Data Published Attributes Change Event Notification for all business object data registered                   under this business object format version                  # noqa: E501

        :return: The enable_business_object_data_published_attributes_change_event_notification of this BusinessObjectFormatCreateRequest.  # noqa: E501
        :rtype: bool
        """
        return self._enable_business_object_data_published_attributes_change_event_notification

    @enable_business_object_data_published_attributes_change_event_notification.setter
    def enable_business_object_data_published_attributes_change_event_notification(self, enable_business_object_data_published_attributes_change_event_notification):
        """Sets the enable_business_object_data_published_attributes_change_event_notification of this BusinessObjectFormatCreateRequest.

        If true, enables Business Object Data Published Attributes Change Event Notification for all business object data registered                   under this business object format version                  # noqa: E501

        :param enable_business_object_data_published_attributes_change_event_notification: The enable_business_object_data_published_attributes_change_event_notification of this BusinessObjectFormatCreateRequest.  # noqa: E501
        :type: bool
        """

        self._enable_business_object_data_published_attributes_change_event_notification = enable_business_object_data_published_attributes_change_event_notification

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


        :return: The schema of this BusinessObjectFormatCreateRequest.  # noqa: E501
        :rtype: Schema
        """
        return self._schema

    @schema.setter
    def schema(self, schema):
        """Sets the schema of this BusinessObjectFormatCreateRequest.


        :param schema: The schema of this BusinessObjectFormatCreateRequest.  # noqa: E501
        :type: Schema
        """

        self._schema = schema

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

        Contains Relational Schema Name if the Format is of type Relational Table  # noqa: E501

        :return: The relational_schema_name of this BusinessObjectFormatCreateRequest.  # noqa: E501
        :rtype: str
        """
        return self._relational_schema_name

    @relational_schema_name.setter
    def relational_schema_name(self, relational_schema_name):
        """Sets the relational_schema_name of this BusinessObjectFormatCreateRequest.

        Contains Relational Schema Name if the Format is of type Relational Table  # noqa: E501

        :param relational_schema_name: The relational_schema_name of this BusinessObjectFormatCreateRequest.  # noqa: E501
        :type: str
        """

        self._relational_schema_name = relational_schema_name

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

        Contains Relational Table Name if the Format is of type Relational Table  # noqa: E501

        :return: The relational_table_name of this BusinessObjectFormatCreateRequest.  # noqa: E501
        :rtype: str
        """
        return self._relational_table_name

    @relational_table_name.setter
    def relational_table_name(self, relational_table_name):
        """Sets the relational_table_name of this BusinessObjectFormatCreateRequest.

        Contains Relational Table Name if the Format is of type Relational Table  # noqa: E501

        :param relational_table_name: The relational_table_name of this BusinessObjectFormatCreateRequest.  # noqa: E501
        :type: str
        """

        self._relational_table_name = relational_table_name

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

        return self.__dict__ == other.__dict__

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