# 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 BusinessObjectDataAvailabilityRequest(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',
        'partition_value_filters': 'list[PartitionValueFilter]',
        'partition_value_filter': 'PartitionValueFilter',
        'business_object_data_version': 'int',
        'business_object_data_status': 'str',
        'storage_names': 'list[str]',
        'storage_name': 'str',
        'include_all_registered_sub_partitions': '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',
        'partition_value_filters': 'partitionValueFilters',
        'partition_value_filter': 'partitionValueFilter',
        'business_object_data_version': 'businessObjectDataVersion',
        'business_object_data_status': 'businessObjectDataStatus',
        'storage_names': 'storageNames',
        'storage_name': 'storageName',
        'include_all_registered_sub_partitions': 'includeAllRegisteredSubPartitions'
    }

    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, partition_value_filters=None, partition_value_filter=None, business_object_data_version=None, business_object_data_status=None, storage_names=None, storage_name=None, include_all_registered_sub_partitions=None):  # noqa: E501
        """BusinessObjectDataAvailabilityRequest - 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._partition_value_filters = None
        self._partition_value_filter = None
        self._business_object_data_version = None
        self._business_object_data_status = None
        self._storage_names = None
        self._storage_name = None
        self._include_all_registered_sub_partitions = 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
        if partition_value_filters is not None:
            self.partition_value_filters = partition_value_filters
        if partition_value_filter is not None:
            self.partition_value_filter = partition_value_filter
        if business_object_data_version is not None:
            self.business_object_data_version = business_object_data_version
        if business_object_data_status is not None:
            self.business_object_data_status = business_object_data_status
        if storage_names is not None:
            self.storage_names = storage_names
        if storage_name is not None:
            self.storage_name = storage_name
        if include_all_registered_sub_partitions is not None:
            self.include_all_registered_sub_partitions = include_all_registered_sub_partitions

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

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

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

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

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

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

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

        The Usage of a 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 BusinessObjectDataAvailabilityRequest.  # 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 BusinessObjectDataAvailabilityRequest.

        The Usage of a 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 BusinessObjectDataAvailabilityRequest.  # 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 BusinessObjectDataAvailabilityRequest.  # 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 BusinessObjectDataAvailabilityRequest.  # 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 BusinessObjectDataAvailabilityRequest.

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

        The Business Object Format Version for a previously registered Business Object Format  # noqa: E501

        :return: The business_object_format_version of this BusinessObjectDataAvailabilityRequest.  # 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 BusinessObjectDataAvailabilityRequest.

        The Business Object Format Version for a previously registered Business Object Format  # noqa: E501

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

        self._business_object_format_version = business_object_format_version

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

        A container for Partition Value Filters  # noqa: E501

        :return: The partition_value_filters of this BusinessObjectDataAvailabilityRequest.  # noqa: E501
        :rtype: list[PartitionValueFilter]
        """
        return self._partition_value_filters

    @partition_value_filters.setter
    def partition_value_filters(self, partition_value_filters):
        """Sets the partition_value_filters of this BusinessObjectDataAvailabilityRequest.

        A container for Partition Value Filters  # noqa: E501

        :param partition_value_filters: The partition_value_filters of this BusinessObjectDataAvailabilityRequest.  # noqa: E501
        :type: list[PartitionValueFilter]
        """

        self._partition_value_filters = partition_value_filters

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


        :return: The partition_value_filter of this BusinessObjectDataAvailabilityRequest.  # noqa: E501
        :rtype: PartitionValueFilter
        """
        return self._partition_value_filter

    @partition_value_filter.setter
    def partition_value_filter(self, partition_value_filter):
        """Sets the partition_value_filter of this BusinessObjectDataAvailabilityRequest.


        :param partition_value_filter: The partition_value_filter of this BusinessObjectDataAvailabilityRequest.  # noqa: E501
        :type: PartitionValueFilter
        """

        self._partition_value_filter = partition_value_filter

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

        The numeric version of a Business Object Data  # noqa: E501

        :return: The business_object_data_version of this BusinessObjectDataAvailabilityRequest.  # noqa: E501
        :rtype: int
        """
        return self._business_object_data_version

    @business_object_data_version.setter
    def business_object_data_version(self, business_object_data_version):
        """Sets the business_object_data_version of this BusinessObjectDataAvailabilityRequest.

        The numeric version of a Business Object Data  # noqa: E501

        :param business_object_data_version: The business_object_data_version of this BusinessObjectDataAvailabilityRequest.  # noqa: E501
        :type: int
        """

        self._business_object_data_version = business_object_data_version

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

        An optional Business Object Data Status value for available Business Object Data. Accepted values are VALID and all                   pre-registration status values, such as PROCESSING, UPLOADING, and PENDING_VALID. Default value is VALID. The request cannot                   contain both businessObjectDataVersion and businessObjectDataStatus values                  # noqa: E501

        :return: The business_object_data_status of this BusinessObjectDataAvailabilityRequest.  # noqa: E501
        :rtype: str
        """
        return self._business_object_data_status

    @business_object_data_status.setter
    def business_object_data_status(self, business_object_data_status):
        """Sets the business_object_data_status of this BusinessObjectDataAvailabilityRequest.

        An optional Business Object Data Status value for available Business Object Data. Accepted values are VALID and all                   pre-registration status values, such as PROCESSING, UPLOADING, and PENDING_VALID. Default value is VALID. The request cannot                   contain both businessObjectDataVersion and businessObjectDataStatus values                  # noqa: E501

        :param business_object_data_status: The business_object_data_status of this BusinessObjectDataAvailabilityRequest.  # noqa: E501
        :type: str
        """

        self._business_object_data_status = business_object_data_status

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

        A container for Storage Names to include when checking for Business Object Data availability  # noqa: E501

        :return: The storage_names of this BusinessObjectDataAvailabilityRequest.  # noqa: E501
        :rtype: list[str]
        """
        return self._storage_names

    @storage_names.setter
    def storage_names(self, storage_names):
        """Sets the storage_names of this BusinessObjectDataAvailabilityRequest.

        A container for Storage Names to include when checking for Business Object Data availability  # noqa: E501

        :param storage_names: The storage_names of this BusinessObjectDataAvailabilityRequest.  # noqa: E501
        :type: list[str]
        """

        self._storage_names = storage_names

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

        Name of an existing storage known to the System. Required when StorageName is present  # noqa: E501

        :return: The storage_name of this BusinessObjectDataAvailabilityRequest.  # noqa: E501
        :rtype: str
        """
        return self._storage_name

    @storage_name.setter
    def storage_name(self, storage_name):
        """Sets the storage_name of this BusinessObjectDataAvailabilityRequest.

        Name of an existing storage known to the System. Required when StorageName is present  # noqa: E501

        :param storage_name: The storage_name of this BusinessObjectDataAvailabilityRequest.  # noqa: E501
        :type: str
        """

        self._storage_name = storage_name

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

        Specifies to perform an exhaustive search to return availability for ALL registered sub-partitions (registered as individual                   business object data instances) except for the ones with \"DELETED\" status. This parameter has no impact when business object data version is                   specified. Default value is false, which means that availability ignores any \"not available\" registered sub-partitions when it finds at least                   one \"VALID\" registered sub-partitions for a requested business object data partition value                  # noqa: E501

        :return: The include_all_registered_sub_partitions of this BusinessObjectDataAvailabilityRequest.  # noqa: E501
        :rtype: bool
        """
        return self._include_all_registered_sub_partitions

    @include_all_registered_sub_partitions.setter
    def include_all_registered_sub_partitions(self, include_all_registered_sub_partitions):
        """Sets the include_all_registered_sub_partitions of this BusinessObjectDataAvailabilityRequest.

        Specifies to perform an exhaustive search to return availability for ALL registered sub-partitions (registered as individual                   business object data instances) except for the ones with \"DELETED\" status. This parameter has no impact when business object data version is                   specified. Default value is false, which means that availability ignores any \"not available\" registered sub-partitions when it finds at least                   one \"VALID\" registered sub-partitions for a requested business object data partition value                  # noqa: E501

        :param include_all_registered_sub_partitions: The include_all_registered_sub_partitions of this BusinessObjectDataAvailabilityRequest.  # noqa: E501
        :type: bool
        """

        self._include_all_registered_sub_partitions = include_all_registered_sub_partitions

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

        return self.__dict__ == other.__dict__

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