private List<BaseUsage> GetCompoundAttributeUsages(BaseUsage usage)
{
List<BaseUsage> list = new List<BaseUsage>();
if (usage is MetadataPackageUsage)
{
MetadataPackageUsage mpu = (MetadataPackageUsage)usage;
foreach (MetadataAttributeUsage mau in mpu.MetadataPackage.MetadataAttributeUsages)
{
list.AddRange(GetCompoundAttributeUsages(mau));
}
}
if (usage is MetadataAttributeUsage)
{
MetadataAttributeUsage mau = (MetadataAttributeUsage)usage;
if (mau.MetadataAttribute.Self is MetadataCompoundAttribute)
{
list.Add(mau);
MetadataCompoundAttribute mca = (MetadataCompoundAttribute)mau.MetadataAttribute.Self;
foreach (MetadataNestedAttributeUsage mnau in mca.MetadataNestedAttributeUsages)
{
list.AddRange(GetCompoundAttributeUsages(mnau));
}
}
}
if (usage is MetadataNestedAttributeUsage)
{
MetadataNestedAttributeUsage mnau = (MetadataNestedAttributeUsage)usage;
if (mnau.Member.Self is MetadataCompoundAttribute)
{
list.Add(mnau);
MetadataCompoundAttribute mca = (MetadataCompoundAttribute)mnau.Member.Self;
foreach (MetadataNestedAttributeUsage m in mca.MetadataNestedAttributeUsages)
{
list.AddRange(GetCompoundAttributeUsages(m));
}
}
}
return list;
}