예제 #1
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="interfaceBuilder"></param>
 /// <param name="builder"></param>
 /// <param name="block"></param>
 internal GenericUserInterfaceBlockBuilder(IGenericInterfaceBuilder interfaceBuilder, CrocoTypeDescriptionBuilder builder, UserInterfaceBlock block)
 {
     InterfaceBuilder = interfaceBuilder;
     DocsBuilder      = builder;
     Block            = block;
     DescribedType    = DocsBuilder.GetTypeDescriptionResult(typeof(TProp));
 }
        /// <summary>
        /// Создать из типа
        /// </summary>
        /// <param name="type"></param>
        /// <param name="valueJson"></param>
        /// <param name="opts"></param>
        /// <returns></returns>
        private GenerateGenericUserInterfaceModel CreateFromType(Type type, string valueJson = null, GenericInterfaceOptions opts = null)
        {
            var desc = TypeDescriptionBuilder.GetTypeDescriptionResult(type);

            var main = desc.GetMainTypeDescription();

            if (!main.IsClass)
            {
                throw new InvalidOperationException(ExceptionTexts.NonComplexTypesAreNotSupported);
            }

            var typeChecker = new CrocoClassDescriptionChecker();

            if (typeChecker.IsRecursiveType(desc))
            {
                throw new InvalidOperationException(ExceptionTexts.RecursiveTypesAreNotSupported);
            }

            if (typeChecker.HasMultiDimensionalArrays(desc))
            {
                throw new InvalidOperationException(ExceptionTexts.ClassesWithMultiDimensionalArrayPropertiesAreNotSupported);
            }

            if (opts == null)
            {
                opts = GenericInterfaceOptions.Default();
            }

            var prefix = string.Empty;

            var blocks = GenericUserInterfaceModelBuilderExtensions.GetBlocks(prefix, desc.GetMainTypeDescription(), desc, opts);

            return(new GenerateGenericUserInterfaceModel
            {
                TypeDescription = desc,
                Interface = new GenericInterfaceModel
                {
                    Prefix = prefix,
                    Blocks = blocks
                },
                ValueJson = valueJson
            });
        }