Esempio n. 1
0
        private static void MapRecursive(IMetadata metadata, Type entityType, Type dtoType, MetadataDto dtoMetadata)
        {
            dtoMetadata.AddMetadataItemRange(MapMetadataItems(metadata.MetadataItems));

            foreach (var propertyInfo in entityType.GetProperties())
            {
                if ((typeof(IAggregateRoot).IsAssignableFrom(propertyInfo.PropertyType) ||
                     typeof(IAggregateRoot).IsAssignableFrom(propertyInfo.PropertyType)) &&
                    metadata.HasChild(propertyInfo.PropertyType.FullName))
                {
                    var dtoPropertyName = TryFindDestinationPropertyName(entityType, dtoType, propertyInfo);
                    if (dtoPropertyName == null)
                    {
                        continue;
                    }

                    var dtoPropertyInfo = dtoType.GetProperty(dtoPropertyName);
                    if (typeof(IDataTransferObject).IsAssignableFrom(dtoPropertyInfo.PropertyType))
                    {
                        MapRecursive(
                            metadata.FindChildMetadata(propertyInfo.PropertyType.FullName),
                            propertyInfo.PropertyType,
                            dtoPropertyInfo.PropertyType,
                            dtoMetadata.GetChildMetadata(dtoPropertyInfo.PropertyType.FullName));
                    }
                    else
                    {
                        var subDtoPropertyMetadata = dtoMetadata.GetChildMetadata(dtoPropertyInfo.Name);
                        var subPropertyMetadata    = metadata.FindChildMetadata(propertyInfo.PropertyType.FullName);
                        subDtoPropertyMetadata.AddMetadataItemRange(
                            MapMetadataItems(subPropertyMetadata.MetadataItems));
                    }
                }
                else if (metadata.HasChild(propertyInfo.Name))
                {
                    var dtoPropertyName = PropertyNameMapper.GetDistinctDestinationPropertyName(entityType, dtoType, propertyInfo.Name);
                    if (dtoPropertyName == null)
                    {
                        continue;
                    }

                    var subDtoPropertyMetadata = dtoMetadata.GetChildMetadata(dtoPropertyName);
                    var subPropertyMetadata    = metadata.FindChildMetadata(propertyInfo.Name);
                    subDtoPropertyMetadata.AddMetadataItemRange(
                        MapMetadataItems(subPropertyMetadata.MetadataItems));
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Handles the metadata item dto.
        /// </summary>
        /// <typeparam name="T">The type of metadataitemdto.</typeparam>
        /// <param name="metadataDto">The metadata dto.</param>
        /// <param name="resourceName">Name of the resource.</param>
        /// <param name="apply">If set to <c>true</c> [apply].</param>
        /// <param name="metaDataItemToApply">The meta data item to apply.</param>
        /// <returns>A <see cref="System.Boolean"/></returns>
        private static bool HandleMetadataItemDto <T> (this MetadataDto metadataDto, string resourceName, bool apply, T metaDataItemToApply)
            where T : IMetadataItemDto
        {
            var done            = false;
            var metaDataToApply = metadataDto;

            if (metaDataToApply.ResourceName != resourceName)
            {
                metaDataToApply = metadataDto.GetChildMetadata(resourceName);
            }

            var exists = metaDataToApply.FindMetadataItem <T> () != null;

            if (!apply && exists)
            {
                metaDataToApply.RemoveMetadataItem <T> ();
                done = true;
            }

            if (apply && !exists)
            {
                metaDataToApply.AddMetadataItem(metaDataItemToApply);
                done = true;
            }

            return(done);
        }