internal Associations(TaggedValues taggedValues, Classes classes, MultiTypes multiTypes)
        {
            Ascc = new MetaAssociation
            {
                Stereotype                = MetaStereotype.ASCC,
                ClassName                 = "Ascc",
                Name                      = "Asccs",
                Cardinality               = MetaCardinality.Many,
                AggregationKind           = MetaAggregationKind.Shared,
                AssociatingClassifierType = classes.Acc,
                AssociatedClassifierType  = classes.Acc,
                TaggedValues              = new[]
                {
                    taggedValues.BusinessTerm,
                    taggedValues.Definition,
                    taggedValues.DictionaryEntryName,
                    taggedValues.LanguageCode,
                    taggedValues.SequencingKey,
                    taggedValues.UniqueIdentifier,
                    taggedValues.VersionIdentifier,
                    taggedValues.UsageRule,
                },
            };

            Asbie = new MetaAssociation
            {
                Stereotype                = MetaStereotype.ASBIE,
                ClassName                 = "Asbie",
                Name                      = "Asbies",
                Cardinality               = MetaCardinality.Many,
                AggregationKind           = MetaAggregationKind.SharedOrComposite,
                AssociatingClassifierType = classes.Abie,
                AssociatedClassifierType  = classes.Abie,
                TaggedValues              = new[]
                {
                    taggedValues.BusinessTerm,
                    taggedValues.Definition,
                    taggedValues.DictionaryEntryName,
                    taggedValues.LanguageCode,
                    taggedValues.SequencingKey,
                    taggedValues.UniqueIdentifier,
                    taggedValues.VersionIdentifier,
                    taggedValues.UsageRule,
                },
            };

            Asma = new MetaAssociation
            {
                Stereotype                = MetaStereotype.ASMA,
                ClassName                 = "Asma",
                Name                      = "Asmas",
                Cardinality               = MetaCardinality.Many,
                AggregationKind           = MetaAggregationKind.Shared,
                AssociatingClassifierType = classes.Ma,
                AssociatedClassifierType  = multiTypes.BieAggregator,
                TaggedValues              = new MetaTaggedValue[0],
            };
        }
        private MetaModel()
        {
            taggedValues = new TaggedValues();

            packages = new Packages(taggedValues);

            enumerations = new Enumerations(taggedValues);
            dataTypes    = new DataTypes(taggedValues);
            classes      = new Classes(taggedValues);
            multiTypes   = new MultiTypes(classes, dataTypes, enumerations);

            attributes              = new Attributes(taggedValues, classes, multiTypes);
            enumerationLiterals     = new EnumerationLiterals(taggedValues, enumerations);
            associations            = new Associations(taggedValues, classes, multiTypes);
            dependencies            = new Dependencies(classes, dataTypes, enumerations);
            attributeDependencies   = new AttributeDependencies(attributes);
            associationDependencies = new AssociationDependencies(associations);

            packageSubPackageRelations = new PackageSubPackageRelations(packages);
            packageClassifierRelations = new PackageClassifierRelations(packages, dataTypes, classes, enumerations);
        }
        internal Attributes(TaggedValues taggedValues, Classes classes, MultiTypes multiTypes)
        {
            CdtCon = new MetaAttribute
            {
                Stereotype = MetaStereotype.CON,
                ContainingClassifierType = classes.Cdt,
                ClassName     = "CdtCon",
                AttributeName = "Con",
                Type          = multiTypes.BasicType,
                Cardinality   = MetaCardinality.One,
                TaggedValues  = new[]
                {
                    taggedValues.BusinessTerm,
                    taggedValues.Definition,
                    taggedValues.DictionaryEntryName.WithDefaultValue("Cdt.Name + \". Content\""),
                    taggedValues.LanguageCode,
                    taggedValues.ModificationAllowedIndicator,
                    taggedValues.UniqueIdentifier,
                    taggedValues.VersionIdentifier,
                    taggedValues.UsageRule,
                },
            };

            CdtSup = new MetaAttribute
            {
                Stereotype = MetaStereotype.SUP,
                ContainingClassifierType = classes.Cdt,
                ClassName     = "CdtSup",
                AttributeName = "Sups",
                Type          = multiTypes.BasicType,
                Cardinality   = MetaCardinality.Many,
                TaggedValues  = new[]
                {
                    taggedValues.BusinessTerm,
                    taggedValues.Definition,
                    taggedValues.DictionaryEntryName.WithDefaultValue("Cdt.Name + \". \" + Name + \". \" + Type.Name"),
                    taggedValues.LanguageCode,
                    taggedValues.ModificationAllowedIndicator,
                    taggedValues.UniqueIdentifier,
                    taggedValues.VersionIdentifier,
                    taggedValues.UsageRule,
                },
            };

            Bcc = new MetaAttribute
            {
                Stereotype = MetaStereotype.BCC,
                ContainingClassifierType = classes.Acc,
                ClassName     = "Bcc",
                AttributeName = "Bccs",
                Type          = classes.Cdt,
                Cardinality   = MetaCardinality.Many,
                TaggedValues  = new[]
                {
                    taggedValues.BusinessTerm,
                    taggedValues.Definition,
                    taggedValues.DictionaryEntryName.WithDefaultValue("Acc.Name + \". \" + Name + \". \" + Type.Name"),
                    taggedValues.LanguageCode,
                    taggedValues.SequencingKey,
                    taggedValues.UniqueIdentifier,
                    taggedValues.VersionIdentifier,
                    taggedValues.UsageRule,
                },
            };

            BdtCon = new MetaAttribute
            {
                Stereotype = MetaStereotype.CON,
                ContainingClassifierType = classes.Bdt,
                ClassName     = "BdtCon",
                AttributeName = "Con",
                Type          = multiTypes.BasicType,
                Cardinality   = MetaCardinality.One,
                TaggedValues  = new[]
                {
                    taggedValues.BusinessTerm,
                    taggedValues.Definition,
                    taggedValues.DictionaryEntryName.WithDefaultValue("Bdt.Name + \". Content\""),
                    taggedValues.Enumeration,
                    taggedValues.FractionDigits,
                    taggedValues.LanguageCode,
                    taggedValues.MaximumExclusive,
                    taggedValues.MaximumInclusive,
                    taggedValues.MaximumLength,
                    taggedValues.MinimumExclusive,
                    taggedValues.MinimumInclusive,
                    taggedValues.MinimumLength,
                    taggedValues.ModificationAllowedIndicator,
                    taggedValues.Pattern,
                    taggedValues.TotalDigits,
                    taggedValues.UniqueIdentifier,
                    taggedValues.UsageRule,
                    taggedValues.VersionIdentifier,
                },
            };

            BdtSup = new MetaAttribute
            {
                Stereotype = MetaStereotype.SUP,
                ContainingClassifierType = classes.Bdt,
                ClassName     = "BdtSup",
                AttributeName = "Sups",
                Type          = multiTypes.BasicType,
                Cardinality   = MetaCardinality.Many,
                TaggedValues  = new[]
                {
                    taggedValues.BusinessTerm,
                    taggedValues.Definition,
                    taggedValues.DictionaryEntryName.WithDefaultValue("Bdt.Name + \". \" + Name + \". \" + Type.Name"),
                    taggedValues.Enumeration,
                    taggedValues.FractionDigits,
                    taggedValues.LanguageCode,
                    taggedValues.MaximumExclusive,
                    taggedValues.MaximumInclusive,
                    taggedValues.MaximumLength,
                    taggedValues.MinimumExclusive,
                    taggedValues.MinimumInclusive,
                    taggedValues.MinimumLength,
                    taggedValues.ModificationAllowedIndicator,
                    taggedValues.Pattern,
                    taggedValues.TotalDigits,
                    taggedValues.UniqueIdentifier,
                    taggedValues.UsageRule,
                    taggedValues.VersionIdentifier,
                },
            };

            Bbie = new MetaAttribute
            {
                Stereotype = MetaStereotype.BBIE,
                ContainingClassifierType = classes.Abie,
                ClassName     = "Bbie",
                AttributeName = "Bbies",
                Type          = classes.Bdt,
                Cardinality   = MetaCardinality.Many,
                TaggedValues  = new[]
                {
                    taggedValues.BusinessTerm,
                    taggedValues.Definition,
                    taggedValues.DictionaryEntryName.WithDefaultValue("Abie.Name + \". \" + Name + \". \" + Type.Name"),
                    taggedValues.LanguageCode,
                    taggedValues.SequencingKey,
                    taggedValues.UniqueIdentifier,
                    taggedValues.VersionIdentifier,
                    taggedValues.UsageRule,
                },
            };
        }