protected override JSBSchema BuildJsonSchema()
        {
            List <IJSBPart> items = new List <IJSBPart>();

            items.Add(new JSBInteger("SwanNumber", "Swans are relevant in the world"));

            JSBArray arrayPart = new JSBArray("MyTopPartArray", "TopPart", items);

            return(new JSBSchema("ArrayAsATopPart", Description, topPart: arrayPart));
        }
Esempio n. 2
0
 private string GenerateDefaultIfExisting(IdentifierString key, JSBArray jsonSchemaBuilderArray)
 {
     if (jsonSchemaBuilderArray.DefaultValue != null)
     {
         return($" = new List<{MakeCorrectItemType(jsonSchemaBuilderArray.Items[0])}>();{{{jsonSchemaBuilderArray.DefaultValue.ToString()}}}");
     }
     else
     {
         return($" = new List<{MakeCorrectItemType(jsonSchemaBuilderArray.Items[0])}>();");
     }
 }
        protected override JSBSchema BuildJsonSchema()
        {
            List <IJSBPart> items = new List <IJSBPart>();

            if (Uri.TryCreate("./dateAsTopPart", UriKind.RelativeOrAbsolute, out Uri uri))
            {
                items.Add(new JSBRef("ArrayUriReference", "Array of UriReference", iriReference: uri));

                JSBArray arrayPart = new JSBArray("MyTopPartArray", "TopPart", items);

                return(new JSBSchema("ArrayAsATopPart", Description, topPart: arrayPart));
            }
            else
            {
                throw new Exception("Uri not valid");
            }
        }
        protected override JSBSchema BuildJsonSchema()
        {
            JSBBoolean booleanPart = new JSBBoolean("BooleanPart", "BooleanPart for testing", isRequired: true);
            JSBInteger integerPart = new JSBInteger("IntegerPart", "IntegerPart for testing");

            List <IJSBPart> properties = new List <IJSBPart>();

            properties.Add(booleanPart);
            properties.Add(integerPart);

            JSBObject objectPart = new JSBObject("ObjectInAnArray", "ObjectInAnArray is fun", props: properties);

            List <IJSBPart> items = new List <IJSBPart>();

            items.Add(objectPart);
            JSBArray arrayPart = new JSBArray("MyTopPartArray", "TopPart", items);

            return(new JSBSchema("ArrayOfObjectsAsATopPart", Description, topPart: arrayPart));
        }
Esempio n. 5
0
        private void DoReferenceResolution(IJSBPart jsonSchemaBuilderPart, NamespaceString module)
        {
            switch (jsonSchemaBuilderPart.PartType)
            {
            case JSBPartType.IriReference:
                JSBRef jsonSchemaBuilderIriReference = jsonSchemaBuilderPart as JSBRef;
                if (!jsonSchemaBuilderIriReference.IsFragmentOnly)
                {
                    string relativeLocalFileWithExpandedDot = jsonSchemaBuilderIriReference.RelativeLocalFile;
                    if (relativeLocalFileWithExpandedDot.StartsWith("./") || relativeLocalFileWithExpandedDot.StartsWith(".\\"))
                    {
                        relativeLocalFileWithExpandedDot = Path.Combine(module.ToFilePath, relativeLocalFileWithExpandedDot.Remove(0, 2));
                    }

                    string localFile = Path.Combine(JsonSchemaApplicationRoot, TransformToCamelCase(relativeLocalFileWithExpandedDot));
                    string uriWithoutFragmentString = jsonSchemaBuilderIriReference.IriReference.OriginalString;
                    if (!string.IsNullOrWhiteSpace(jsonSchemaBuilderIriReference.Fragment))
                    {
                        uriWithoutFragmentString = uriWithoutFragmentString.Replace("#" + jsonSchemaBuilderIriReference.Fragment, "");
                    }
                    if (Uri.TryCreate(uriWithoutFragmentString, UriKind.RelativeOrAbsolute, out Uri uriWithoutFragment))
                    {
                        if (!File.Exists(localFile))
                        {
                            if (jsonSchemaBuilderIriReference.IriReference.IsAbsoluteUri && !jsonSchemaBuilderIriReference.IriReference.IsLoopback)
                            {
                                try
                                {
                                    FileInfo fileInfo  = new FileInfo(localFile);
                                    string   directory = fileInfo.Directory.FullName;
                                    if (!Directory.Exists(directory))
                                    {
                                        Directory.CreateDirectory(directory);
                                    }
                                    using (WebClient myWebClient = new WebClient())
                                    {
                                        // Download the Web resource and save it into the current filesystem folder.
                                        myWebClient.DownloadFile(uriWithoutFragment, localFile);
                                        //TODO generate builderparts from schema and register in _registeredJsonSchemas
                                    }
                                }
                                catch (Exception ex)
                                {
                                    throw new CodeGenerationException($"Resource at {uriWithoutFragment} could not be downloaded", ex);
                                }
                            }
                            else
                            {
                                throw new CodeGenerationException($"Iri reference {uriWithoutFragment} was not found locally at {localFile}");
                            }
                        }
                    }
                }
                break;

            case JSBPartType.Schema:
                JSBSchema jsonSchemaBuilderSchema = jsonSchemaBuilderPart as JSBSchema;
                foreach (IJSBPart definition in jsonSchemaBuilderSchema.Definitions.Values)
                {
                    DoReferenceResolution(definition, module);
                }
                if (jsonSchemaBuilderSchema.TopPart != null)
                {
                    DoReferenceResolution(jsonSchemaBuilderSchema.TopPart, module);
                }
                break;

            case JSBPartType.Array:
                JSBArray jsonSchemaBuilderArray = jsonSchemaBuilderPart as JSBArray;
                foreach (IJSBPart part in jsonSchemaBuilderArray.Items)
                {
                    DoReferenceResolution(part, module);
                }
                break;

            case JSBPartType.Object:
                JSBObject jsonSchemaBuilderObject = jsonSchemaBuilderPart as JSBObject;
                foreach (IJSBPart property in jsonSchemaBuilderObject.Properties.Values)
                {
                    DoReferenceResolution(property, module);
                }
                break;

            default:
                break;
            }
        }
Esempio n. 6
0
        private void GenerateOrdinaryArray(CodeBuilder codeBuilder, IdentifierString key, JSBArray jsonSchemaBuilderArray)
        {
            foreach (IJSBPart part in jsonSchemaBuilderArray.Items)
            {
                GenerateCodeForBuilderPart(codeBuilder, part.Name, part, parentIsArray: true);
            }
            GenerateComments(codeBuilder, key, jsonSchemaBuilderArray);

            if (jsonSchemaBuilderArray.Items.Count == 1)
            {
                codeBuilder
                .L($"[JsonProperty(\"{TransformToCamelCase(key)}\")]")
                .L($"public List<{MakeCorrectItemType(jsonSchemaBuilderArray.Items[0])}> {TransformToTitleCase(key)} {{ get; set; }}{GenerateDefaultIfExisting(key, jsonSchemaBuilderArray)}")
                .EmptyLine();
            }
            else
            {
                throw new NotImplementedException("Array with more than one item is not implemented");
            }
        }
Esempio n. 7
0
 private void GenerateEnumArray(CodeBuilder codeBuilder, IdentifierString key, JSBArray jsonSchemaBuilderArray)
 {
     throw new NotImplementedException("Enum for array has not been implemented");
 }
Esempio n. 8
0
        private void GenerateCodeForBuilderPart(CodeBuilder codeBuilder, IdentifierString key, IJSBPart value, Dictionary <string, IJSBPart> definitions = null, bool parentIsArray = false, bool isDefinition = false)
        {
            switch (value.PartType)
            {
            case JSBPartType.Array:
                JSBArray jsonSchemaBuilderArray = value as JSBArray;
                if (jsonSchemaBuilderArray.Enums != null && jsonSchemaBuilderArray.Enums.Count > 0)
                {
                    GenerateEnumArray(codeBuilder, key, jsonSchemaBuilderArray);
                }
                else
                {
                    GenerateOrdinaryArray(codeBuilder, key, jsonSchemaBuilderArray);
                }
                break;

            case JSBPartType.Boolean:
                JSBBoolean jsonSchemaBuilderBoolean = value as JSBBoolean;
                if (jsonSchemaBuilderBoolean.Enums != null && jsonSchemaBuilderBoolean.Enums.Count > 0)
                {
                    GenerateEnumBoolean(codeBuilder, key, jsonSchemaBuilderBoolean);
                }
                else
                {
                    if (!parentIsArray)
                    {
                        GenerateOrdinaryBoolaen(codeBuilder, key, jsonSchemaBuilderBoolean);
                    }
                }
                break;

            case JSBPartType.Date:
                JSBDate jsonSchemaBuilderDate = value as JSBDate;
                if (jsonSchemaBuilderDate.Enums != null && jsonSchemaBuilderDate.Enums.Count > 0)
                {
                    GenerateEnumDate(codeBuilder, key, jsonSchemaBuilderDate);
                }
                else
                {
                    if (!parentIsArray)
                    {
                        GenerateOrdinaryDate(codeBuilder, key, jsonSchemaBuilderDate);
                    }
                }
                break;

            case JSBPartType.DateTime:
                JSBDateTime jsonSchemaBuilderDateTime = value as JSBDateTime;
                if (jsonSchemaBuilderDateTime.Enums != null && jsonSchemaBuilderDateTime.Enums.Count > 0)
                {
                    GenerateEnumDateTime(codeBuilder, key, jsonSchemaBuilderDateTime);
                }
                else
                {
                    if (!parentIsArray)
                    {
                        GenerateOrdinaryDateTime(codeBuilder, key, jsonSchemaBuilderDateTime);
                    }
                }
                break;

            case JSBPartType.Email:
                JSBEmail jsonSchemaBuilderEmail = value as JSBEmail;
                if (jsonSchemaBuilderEmail.Enums != null && jsonSchemaBuilderEmail.Enums.Count > 0)
                {
                    GenerateEnumEmail(codeBuilder, key, jsonSchemaBuilderEmail);
                }
                else
                {
                    GenerateOrdinaryEmail(codeBuilder, key, jsonSchemaBuilderEmail);
                }
                break;

            case JSBPartType.Integer:
                JSBInteger jsonSchemaBuilderInteger = value as JSBInteger;
                if (jsonSchemaBuilderInteger.Enums != null && jsonSchemaBuilderInteger.Enums.Count > 0)
                {
                    GenerateEnumInteger(codeBuilder, key, jsonSchemaBuilderInteger);
                }
                else
                {
                    if (!parentIsArray)
                    {
                        GenerateOrdinaryInteger(codeBuilder, key, jsonSchemaBuilderInteger);
                    }
                }
                break;

            case JSBPartType.Number:
                JSBNumber jsonSchemaBuilderNumber = value as JSBNumber;
                if (jsonSchemaBuilderNumber.Enums != null && jsonSchemaBuilderNumber.Enums.Count > 0)
                {
                    GenerateEnumNumber(codeBuilder, key, jsonSchemaBuilderNumber);
                }
                else
                {
                    if (!parentIsArray)
                    {
                        GenerateOrdinaryNumber(codeBuilder, key, jsonSchemaBuilderNumber);
                    }
                }
                break;

            case JSBPartType.Object:
                JSBObject jsonSchemaBuilderObject = value as JSBObject;
                if (jsonSchemaBuilderObject.Enums != null && jsonSchemaBuilderObject.Enums.Count > 0)
                {
                    GenerateEnumObject(codeBuilder, key, jsonSchemaBuilderObject, definitions);
                }
                else
                {
                    GenerateOrdinaryObject(codeBuilder, key, jsonSchemaBuilderObject, definitions, parentIsArray);
                }
                break;

            case JSBPartType.String:
                JSBString jsonSchemaBuilderString = value as JSBString;
                if (jsonSchemaBuilderString.Enums != null && jsonSchemaBuilderString.Enums.Count > 0)
                {
                    GenerateEnumString(codeBuilder, key, jsonSchemaBuilderString, isDefinition);
                }
                else
                {
                    GenerateOrdinaryString(codeBuilder, key, jsonSchemaBuilderString);
                }
                break;

            case JSBPartType.Time:
                JSBTime jsonSchemaBuilderTime = value as JSBTime;
                if (jsonSchemaBuilderTime.Enums != null && jsonSchemaBuilderTime.Enums.Count > 0)
                {
                    GenerateEnumTime(codeBuilder, key, jsonSchemaBuilderTime);
                }
                else
                {
                    GenerateOrdinaryTime(codeBuilder, key, jsonSchemaBuilderTime);
                }
                break;

            case JSBPartType.IriReference:
                //Reference cannot be an enum
                if (!parentIsArray)
                {
                    JSBRef jsonSchemaBuilderUriReference = value as JSBRef;
                    GenerateOrdinaryUriReference(codeBuilder, key, jsonSchemaBuilderUriReference);
                }
                break;

            default:
                codeBuilder.L($"throw new NotImplementedException(\"PartType {value.PartType} is not implemented\");");
                break;
            }
        }