# Copyright (c) 2012-2022, Mark Peek <mark@peek.org>
# All rights reserved.
#
# See LICENSE file for full license.
#
# *** Do not modify - this file is autogenerated ***


from . import AWSObject, AWSProperty, PropsDictType, Tags
from .validators import boolean, double


class DataEncryptionMetadata(AWSProperty):
    """
    `DataEncryptionMetadata <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-dataencryptionmetadata.html>`__
    """

    props: PropsDictType = {
        "AllowCleartext": (boolean, True),
        "AllowDuplicates": (boolean, True),
        "AllowJoinsOnColumnsWithDifferentNames": (boolean, True),
        "PreserveNulls": (boolean, True),
    }


class MemberSpecification(AWSProperty):
    """
    `MemberSpecification <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-memberspecification.html>`__
    """

    props: PropsDictType = {
        "AccountId": (str, True),
        "DisplayName": (str, True),
        "MemberAbilities": ([str], True),
    }


class Collaboration(AWSObject):
    """
    `Collaboration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-collaboration.html>`__
    """

    resource_type = "AWS::CleanRooms::Collaboration"

    props: PropsDictType = {
        "CreatorDisplayName": (str, True),
        "CreatorMemberAbilities": ([str], True),
        "DataEncryptionMetadata": (DataEncryptionMetadata, False),
        "Description": (str, True),
        "Members": ([MemberSpecification], True),
        "Name": (str, True),
        "QueryLogStatus": (str, True),
        "Tags": (Tags, False),
    }


class AggregateColumn(AWSProperty):
    """
    `AggregateColumn <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-aggregatecolumn.html>`__
    """

    props: PropsDictType = {
        "ColumnNames": ([str], True),
        "Function": (str, True),
    }


class AggregationConstraint(AWSProperty):
    """
    `AggregationConstraint <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-aggregationconstraint.html>`__
    """

    props: PropsDictType = {
        "ColumnName": (str, True),
        "Minimum": (double, True),
        "Type": (str, True),
    }


class AnalysisRuleAggregation(AWSProperty):
    """
    `AnalysisRuleAggregation <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisruleaggregation.html>`__
    """

    props: PropsDictType = {
        "AggregateColumns": ([AggregateColumn], True),
        "AllowedJoinOperators": ([str], False),
        "DimensionColumns": ([str], True),
        "JoinColumns": ([str], True),
        "JoinRequired": (str, False),
        "OutputConstraints": ([AggregationConstraint], True),
        "ScalarFunctions": ([str], True),
    }


class AnalysisRuleCustom(AWSProperty):
    """
    `AnalysisRuleCustom <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrulecustom.html>`__
    """

    props: PropsDictType = {
        "AllowedAnalyses": ([str], True),
        "AllowedAnalysisProviders": ([str], False),
    }


class AnalysisRuleList(AWSProperty):
    """
    `AnalysisRuleList <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrulelist.html>`__
    """

    props: PropsDictType = {
        "AllowedJoinOperators": ([str], False),
        "JoinColumns": ([str], True),
        "ListColumns": ([str], True),
    }


class ConfiguredTableAnalysisRulePolicyV1(AWSProperty):
    """
    `ConfiguredTableAnalysisRulePolicyV1 <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-configuredtableanalysisrulepolicyv1.html>`__
    """

    props: PropsDictType = {
        "Aggregation": (AnalysisRuleAggregation, False),
        "Custom": (AnalysisRuleCustom, False),
        "List": (AnalysisRuleList, False),
    }


class ConfiguredTableAnalysisRulePolicy(AWSProperty):
    """
    `ConfiguredTableAnalysisRulePolicy <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-configuredtableanalysisrulepolicy.html>`__
    """

    props: PropsDictType = {
        "V1": (ConfiguredTableAnalysisRulePolicyV1, True),
    }


class AnalysisRule(AWSProperty):
    """
    `AnalysisRule <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrule.html>`__
    """

    props: PropsDictType = {
        "Policy": (ConfiguredTableAnalysisRulePolicy, True),
        "Type": (str, True),
    }


class GlueTableReference(AWSProperty):
    """
    `GlueTableReference <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-gluetablereference.html>`__
    """

    props: PropsDictType = {
        "DatabaseName": (str, True),
        "TableName": (str, True),
    }


class TableReference(AWSProperty):
    """
    `TableReference <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-tablereference.html>`__
    """

    props: PropsDictType = {
        "Glue": (GlueTableReference, True),
    }


class ConfiguredTable(AWSObject):
    """
    `ConfiguredTable <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtable.html>`__
    """

    resource_type = "AWS::CleanRooms::ConfiguredTable"

    props: PropsDictType = {
        "AllowedColumns": ([str], True),
        "AnalysisMethod": (str, True),
        "AnalysisRules": ([AnalysisRule], False),
        "Description": (str, False),
        "Name": (str, True),
        "TableReference": (TableReference, True),
        "Tags": (Tags, False),
    }


class ConfiguredTableAssociation(AWSObject):
    """
    `ConfiguredTableAssociation <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtableassociation.html>`__
    """

    resource_type = "AWS::CleanRooms::ConfiguredTableAssociation"

    props: PropsDictType = {
        "ConfiguredTableIdentifier": (str, True),
        "Description": (str, False),
        "MembershipIdentifier": (str, True),
        "Name": (str, True),
        "RoleArn": (str, True),
        "Tags": (Tags, False),
    }


class Membership(AWSObject):
    """
    `Membership <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-membership.html>`__
    """

    resource_type = "AWS::CleanRooms::Membership"

    props: PropsDictType = {
        "CollaborationIdentifier": (str, True),
        "QueryLogStatus": (str, True),
        "Tags": (Tags, False),
    }
