internal QueryFind BuildFind(IAssetType assetType) { if (!string.IsNullOrEmpty(Find.SearchString)) { var attributes = new AttributeSelection(); if (Find.Fields.Count > 0) { attributes.AddRange(Find.Fields.Select(field => assetType.GetAttributeDefinition(ResolvePropertyName(field)))); } else { if (assetType.ShortNameAttribute != null) { attributes.Add(assetType.ShortNameAttribute); } if (assetType.NameAttribute != null) { attributes.Add(assetType.NameAttribute); } if (assetType.DescriptionAttribute != null) { attributes.Add(assetType.DescriptionAttribute); } } return(new QueryFind(Find.SearchString, attributes)); } return(null); }
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 ICollection <T> QueryToEntityEnum <T>(Query query) where T : Entity { var assetStateSelection = new AttributeSelection(); IAttributeDefinition assetStateDef; if (query.AssetType.TryGetAttributeDefinition("AssetState", out assetStateDef)) { assetStateSelection.Add(assetStateDef); } var suggestedSelection = GetSuggestedSelection(query.AssetType, typeof(T)); var flattenedSelection = FlattenSelection(query.AssetType, query.Selection); query.Selection = AttributeSelection.Merge(assetStateSelection, suggestedSelection, flattenedSelection); return(AssetEnumToEntityEnum <T>(Services.Retrieve(query).Assets)); }
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); }
internal QueryFind BuildFind(IAssetType assetType) { if (!string.IsNullOrEmpty(Find.SearchString)) { var attributes = new AttributeSelection(); if (Find.Fields.Count > 0) { attributes.AddRange(Find.Fields.Select(field => assetType.GetAttributeDefinition(ResolvePropertyName(field)))); } else { if(assetType.ShortNameAttribute != null) { attributes.Add(assetType.ShortNameAttribute); } if(assetType.NameAttribute != null) { attributes.Add(assetType.NameAttribute); } if(assetType.DescriptionAttribute != null) { attributes.Add(assetType.DescriptionAttribute); } } return new QueryFind(Find.SearchString, attributes); } return null; }