Пример #1
0
        public async Task <V> AddViewForJsonSchemaField(V parentView, JsonSchema field, string fieldName)
        {
            JTokenType type = field.GetJTokenType();

            if (type == JTokenType.Boolean)
            {
                return(await AddAndInit(parentView, field, fieldName, await NewBoolFieldView(field)));
            }
            if (type == JTokenType.Integer)
            {
                if (!field.contentEnum.IsNullOrEmpty())
                {
                    return(await AddAndInit(parentView, field, fieldName, await NewEnumFieldView(field)));
                }
                else
                {
                    return(await AddAndInit(parentView, field, fieldName, await NewIntegerFieldView(field)));
                }
            }
            if (type == JTokenType.Float)
            {
                return(await AddAndInit(parentView, field, fieldName, await NewFloatFieldView(field)));
            }
            if (type == JTokenType.String)
            {
                if (!field.contentEnum.IsNullOrEmpty())
                {
                    return(await AddAndInit(parentView, field, fieldName, await NewEnumFieldView(field)));
                }
                else
                {
                    return(await AddAndInit(parentView, field, fieldName, await NewStringFieldView(field)));
                }
            }
            if (type == JTokenType.Object)
            {
                if (field.properties == null)
                {
                    return(await AddAndInit(parentView, field, fieldName, await NewRecursiveSchemaView(field)));
                }
                else
                {
                    var objectFieldView = await NewObjectFieldView(field);
                    await InitChild(await AddChild(parentView, objectFieldView), fieldName, field);
                    await ObjectJsonSchemaToView(field, await SelectInnerViewContainerFromObjectFieldView(objectFieldView));

                    return(objectFieldView);
                }
            }
            if (type == JTokenType.Array)
            {
                var e = field.items;
                if (e.Count == 1)
                {
                    JsonSchema item       = e.First();
                    var        childJType = item.GetJTokenType();
                    if (schemaGenerator.IsSimpleType(childJType))
                    {
                        return(await AddAndInit(parentView, field, fieldName, await NewListFieldView(field)));
                    }
                    else if (childJType == JTokenType.Object)
                    {
                        return(await AddAndInit(parentView, field, fieldName, await NewListFieldView(field)));
                    }
                    else
                    {
                        throw new NotImplementedException("Array handling not impl. for type " + item.type);
                    }
                }
                else
                {
                    return(await HandleMixedObjectArray(parentView, fieldName, field));
                }
            }
            throw new NotImplementedException($"Did not handle field {field.title} of type={type}");
        }
Пример #2
0
 public abstract Task <V> NewListFieldView(JsonSchema field);
Пример #3
0
 public abstract Task <V> HandleMixedObjectArray(V parentView, string fieldName, JsonSchema field);
Пример #4
0
 public abstract Task <V> NewObjectFieldView(JsonSchema field);
Пример #5
0
 public abstract Task <V> NewRecursiveSchemaView(JsonSchema field);
Пример #6
0
 public abstract Task <V> NewEnumFieldView(JsonSchema field);
Пример #7
0
 public abstract Task <V> NewIntegerFieldView(JsonSchema field);
Пример #8
0
 public abstract Task <V> NewStringFieldView(JsonSchema field);
Пример #9
0
 public abstract Task <V> NewBoolFieldView(JsonSchema field);
Пример #10
0
 public abstract Task InitChild(V view, string fieldName, JsonSchema field);