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);
        }
Example #2
0
        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);
        }
Example #3
0
        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));
        }
Example #4
0
        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;
        }