| | 1 | | using Fluorite.Extensions; |
| | 2 | | using Fluorite.Strainer.Models.Metadata; |
| | 3 | |
|
| | 4 | | namespace Fluorite.Strainer.Services.Metadata.Attributes; |
| | 5 | |
|
| | 6 | | public class AttributeMetadataProvider : IMetadataProvider |
| | 7 | | { |
| | 8 | | private readonly IMetadataSourceTypeProvider _metadataSourceTypeProvider; |
| | 9 | | private readonly IMetadataAssemblySourceProvider _metadataAssemblySourceProvider; |
| | 10 | | private readonly IAttributeMetadataRetriever _attributeMetadataRetriever; |
| | 11 | |
|
| 17 | 12 | | public AttributeMetadataProvider( |
| 17 | 13 | | IMetadataSourceTypeProvider metadataSourceTypeProvider, |
| 17 | 14 | | IMetadataAssemblySourceProvider metadataAssemblySourceProvider, |
| 17 | 15 | | IAttributeMetadataRetriever attributeMetadataRetriever) |
| | 16 | | { |
| 17 | 17 | | _metadataSourceTypeProvider = Guard.Against.Null(metadataSourceTypeProvider); |
| 17 | 18 | | _metadataAssemblySourceProvider = Guard.Against.Null(metadataAssemblySourceProvider); |
| 17 | 19 | | _attributeMetadataRetriever = Guard.Against.Null(attributeMetadataRetriever); |
| 17 | 20 | | } |
| | 21 | |
|
| | 22 | | public IReadOnlyDictionary<Type, IReadOnlyDictionary<string, IPropertyMetadata>> GetAllPropertyMetadata() |
| | 23 | | { |
| 1 | 24 | | var assemblies = _metadataAssemblySourceProvider.GetAssemblies(); |
| 1 | 25 | | var types = _metadataSourceTypeProvider.GetSourceTypes(assemblies); |
| 1 | 26 | | var objectMetadatas = _attributeMetadataRetriever.GetMetadataDictionaryFromObjectAttributes(types); |
| 1 | 27 | | var propertyMetadatas = _attributeMetadataRetriever.GetMetadataDictionaryFromPropertyAttributes(types); |
| | 28 | |
|
| 1 | 29 | | return objectMetadatas |
| 1 | 30 | | .MergeLeft(propertyMetadatas) |
| 1 | 31 | | .ToReadOnly(); |
| | 32 | | } |
| | 33 | |
|
| | 34 | | public IPropertyMetadata? GetDefaultMetadata(Type modelType) |
| | 35 | | { |
| 3 | 36 | | Guard.Against.Null(modelType); |
| | 37 | |
|
| 3 | 38 | | var propertyMetadata = _attributeMetadataRetriever.GetDefaultMetadataFromPropertyAttribute(modelType); |
| 3 | 39 | | propertyMetadata ??= _attributeMetadataRetriever.GetDefaultMetadataFromObjectAttribute(modelType); |
| | 40 | |
|
| 3 | 41 | | return propertyMetadata; |
| | 42 | | } |
| | 43 | |
|
| | 44 | | public IPropertyMetadata? GetPropertyMetadata( |
| | 45 | | Type modelType, |
| | 46 | | bool isSortableRequired, |
| | 47 | | bool isFilterableRequired, |
| | 48 | | string name) |
| | 49 | | { |
| 3 | 50 | | Guard.Against.Null(modelType); |
| 3 | 51 | | Guard.Against.NullOrWhiteSpace(name); |
| | 52 | |
|
| 3 | 53 | | var propertyMetadata = _attributeMetadataRetriever.GetMetadataFromPropertyAttribute(modelType, isSortableRequire |
| 3 | 54 | | propertyMetadata ??= _attributeMetadataRetriever.GetMetadataFromObjectAttribute(modelType, isSortableRequired, i |
| | 55 | |
|
| 3 | 56 | | return propertyMetadata; |
| | 57 | | } |
| | 58 | |
|
| | 59 | | public IReadOnlyList<IPropertyMetadata>? GetPropertyMetadatas(Type modelType) |
| | 60 | | { |
| 2 | 61 | | Guard.Against.Null(modelType); |
| | 62 | |
|
| 2 | 63 | | return _attributeMetadataRetriever.GetMetadataFromPropertyAttribute(modelType) |
| 2 | 64 | | ?? _attributeMetadataRetriever.GetMetadataFromObjectAttribute(modelType); |
| | 65 | | } |
| | 66 | | } |