private static IEnumerable <IAttributeDefinition> GetSuggestedSelection(IAssetType assetType, Type type) { var result = new AttributeSelection(); for (var t = type; t != null; t = t.BaseType) { var attributes = t.GetCustomAttributes(typeof(MetaDataAttribute), false); foreach (MetaDataAttribute attrib in attributes) { var names = attrib.DefaultAttributeSelectionNames; if (!string.IsNullOrEmpty(names)) { foreach (var name in names.Split(',')) { IAttributeDefinition def; if (assetType.TryGetAttributeDefinition(name, out def)) { if (!result.Contains(def)) { result.Add(def); } } } } } } return(result); }
private static AttributeSelection FlattenSelection(IAssetType querytype, IEnumerable <IAttributeDefinition> orig) { var selection = new AttributeSelection(); foreach (var def in orig) { IAttributeDefinition newdef = null; if (def.AssetType.Is(querytype)) { if (def.AssetType == querytype || def.Base == null) { newdef = def; } else if (def.Base.AssetType.Is(querytype)) { newdef = def.Base; } else { newdef = querytype.GetAttributeDefinition(def.Name); } } else if (querytype.Is(def.AssetType)) { newdef = querytype.GetAttributeDefinition(def.Name); } if (newdef != null && !selection.Contains(newdef)) { selection.Add(newdef); } } return(selection); }