internal IList <CodeMemberField> GenerateAllFields(string name, JsonSchema schema, IDictionary <JsonSchema, SchemaImplementationDetails> implDetails, INestedClassProvider internalClassProvider) { schema.ThrowIfNull("schema"); name.ThrowIfNull("name"); implDetails.ThrowIfNull("details"); internalClassProvider.ThrowIfNull("internalClassProvider"); var fields = new List <CodeMemberField>(); if (schema.Properties.IsNullOrEmpty()) { logger.Debug("No Properties found for " + name); return(fields); } int index = 0; foreach (var propertyPair in schema.Properties) { SchemaImplementationDetails details = implDetails[propertyPair.Value]; fields.Add( GenerateField( propertyPair.Key, propertyPair.Value, details, index, internalClassProvider, schema.Properties.Keys.Without(propertyPair.Key))); index++; } return(fields); }
internal IList<CodeMemberField> GenerateAllFields(string name, JsonSchema schema, IDictionary<JsonSchema, SchemaImplementationDetails> implDetails, INestedClassProvider internalClassProvider) { schema.ThrowIfNull("schema"); name.ThrowIfNull("name"); implDetails.ThrowIfNull("details"); internalClassProvider.ThrowIfNull("internalClassProvider"); var fields = new List<CodeMemberField>(); if (schema.Properties.IsNullOrEmpty()) { logger.Debug("No Properties found for " + name); return fields; } int index = 0; foreach (var propertyPair in schema.Properties) { SchemaImplementationDetails details = implDetails[propertyPair.Value]; fields.Add( GenerateField( propertyPair.Key, propertyPair.Value, details, index, internalClassProvider, schema.Properties.Keys.Without(propertyPair.Key))); index++; } return fields; }
/// <summary> /// Returns a code type references for the specified json schema. /// Generates the appropriate references. /// </summary> internal static CodeTypeReference GetCodeType(JsonSchema propertySchema, SchemaImplementationDetails details, INestedClassProvider internalClassProvider) { propertySchema.ThrowIfNull("propertySchema"); internalClassProvider.ThrowIfNull("internalClassProvider"); if (propertySchema.Type.HasValue == false) { throw new NotSupportedException("propertySchema has no Type. " + propertySchema); } switch (propertySchema.Type.Value) { case JsonSchemaType.String: return new CodeTypeReference(typeof(string)); case JsonSchemaType.Integer: return new CodeTypeReference(typeof(long?)); case JsonSchemaType.Boolean: return new CodeTypeReference(typeof(bool?)); case JsonSchemaType.Float: return new CodeTypeReference(typeof(double?)); case JsonSchemaType.Array: return GetArrayTypeReference(propertySchema, details, internalClassProvider); case JsonSchemaType.Object: return GetObjectTypeReference(propertySchema, details, internalClassProvider); case JsonSchemaType.Any: return new CodeTypeReference(typeof(string)); default: logger.Warning( "Found currently unsupported type {0} as part of {1}", propertySchema.Type.Value, propertySchema); return new CodeTypeReference(typeof(object)); } }
public void DecorateClass(CodeTypeDeclaration typeDeclaration, ISchema schema, IDictionary<JsonSchema, SchemaImplementationDetails> implDetails, INestedClassProvider internalClassProvider) { typeDeclaration.ThrowIfNull("typeDeclaration"); schema.ThrowIfNull("schema"); implDetails.ThrowIfNull("implDetails"); internalClassProvider.ThrowIfNull("internalClassProvider"); JsonSchema details = schema.SchemaDetails; details.ThrowIfNull("schemaDetails"); // Check if this decorator can be applied to the schema); if (details.Type != JsonSchemaType.Array) { return; } if (details.Items == null || details.Items.Count != 1) { logger.Warning("Found array scheme of unhandled type. {0}", details); return; // not supported } // Generate or find the nested type JsonSchema itemScheme = details.Items[0]; SchemaImplementationDetails implDetail = implDetails[itemScheme]; implDetail.ProposedName = "Entry"; // Change the name to a custom one. CodeTypeReference item = SchemaDecoratorUtil.GetCodeType(itemScheme, implDetail, internalClassProvider); // Insert the base type before any interface declaration var baseType = string.Format("List<{0}>", item.BaseType); typeDeclaration.BaseTypes.Insert(0, new CodeTypeReference(baseType)); }
public void DecorateClass(CodeTypeDeclaration typeDeclaration, ISchema schema, IDictionary <JsonSchema, SchemaImplementationDetails> implDetails, INestedClassProvider internalClassProvider) { typeDeclaration.ThrowIfNull("typeDeclaration"); schema.ThrowIfNull("schema"); internalClassProvider.ThrowIfNull("internalClassProvider"); Count++; }
public void DecorateClass(CodeTypeDeclaration typeDeclaration, ISchema schema, IDictionary <JsonSchema, SchemaImplementationDetails> implDetails, INestedClassProvider internalClassProvider) { typeDeclaration.ThrowIfNull("typeDeclaration"); schema.ThrowIfNull("schema"); implDetails.ThrowIfNull("details"); internalClassProvider.ThrowIfNull("internalClassProvider"); typeDeclaration.Members.AddRange( GenerateAllFields(schema.Name, schema.SchemaDetails, implDetails, internalClassProvider).ToArray()); }
public void DecorateClass(CodeTypeDeclaration typeDeclaration, ISchema schema, IDictionary<JsonSchema, SchemaImplementationDetails> implDetails, INestedClassProvider internalClassProvider) { typeDeclaration.ThrowIfNull("typeDeclaration"); schema.ThrowIfNull("schema"); implDetails.ThrowIfNull("details"); internalClassProvider.ThrowIfNull("internalClassProvider"); typeDeclaration.Members.AddRange( GenerateAllFields(schema.Name, schema.SchemaDetails, implDetails, internalClassProvider).ToArray()); }
public void DecorateClass(CodeTypeDeclaration typeDeclaration, ISchema schema, IDictionary <JsonSchema, SchemaImplementationDetails> implDetails, INestedClassProvider internalClassProvider) { typeDeclaration.ThrowIfNull("typeDeclaration"); schema.ThrowIfNull("schema"); implDetails.ThrowIfNull("implDetails"); internalClassProvider.ThrowIfNull("internalClassProvider"); schema.SchemaDetails.ThrowIfNull("schema.SchemaDetails"); typeDeclaration.Comments.AddRange(CreateComment(schema.SchemaDetails)); }
public void DecorateInternalClass(CodeTypeDeclaration typeDeclaration, string name, JsonSchema schema, IDictionary<JsonSchema, SchemaImplementationDetails> implDetails, INestedClassProvider internalClassProvider) { typeDeclaration.ThrowIfNull("typeDeclaration"); schema.ThrowIfNull("schema"); implDetails.ThrowIfNull("details"); internalClassProvider.ThrowIfNull("internalClassProvider"); typeDeclaration.Comments.AddRange(CreateComment(schema)); }
public void DecorateClass(CodeTypeDeclaration typeDeclaration, ISchema schema, IDictionary<JsonSchema, SchemaImplementationDetails> implDetails, INestedClassProvider internalClassProvider) { typeDeclaration.ThrowIfNull("typeDeclaration"); schema.ThrowIfNull("schema"); implDetails.ThrowIfNull("implDetails"); internalClassProvider.ThrowIfNull("internalClassProvider"); schema.SchemaDetails.ThrowIfNull("schema.SchemaDetails"); typeDeclaration.Comments.AddRange(CreateComment(schema.SchemaDetails)); AddCommentsToAllProperties(schema.Name, schema.SchemaDetails, typeDeclaration); }
public void DecorateInternalClass(CodeTypeDeclaration typeDeclaration, string name, JsonSchema schema, IDictionary<JsonSchema, SchemaImplementationDetails> implDetails, INestedClassProvider internalClassProvider) { typeDeclaration.ThrowIfNull("typeDeclatation"); schema.ThrowIfNull("schema"); implDetails.ThrowIfNull("details"); internalClassProvider.ThrowIfNull("internalClassProvider"); typeDeclaration.Members.AddRange( GenerateAllProperties(name, schema, implDetails, internalClassProvider, typeDeclaration.Name).ToArray( )); }
public void DecorateInternalClass(CodeTypeDeclaration typeDeclaration, string name, JsonSchema schema, IDictionary <JsonSchema, SchemaImplementationDetails> implDetails, INestedClassProvider internalClassProvider) { typeDeclaration.ThrowIfNull("typeDeclatation"); schema.ThrowIfNull("schema"); implDetails.ThrowIfNull("details"); internalClassProvider.ThrowIfNull("internalClassProvider"); SchemaImplementationDetails details = implDetails[schema]; typeDeclaration.Members.AddRange( GenerateAllProperties(name, schema, implDetails, internalClassProvider, typeDeclaration.Name) .ToArray()); }
internal CodeMemberField GenerateField(string name, JsonSchema propertySchema, SchemaImplementationDetails details, int index, INestedClassProvider internalClassProvider, IEnumerable <string> otherFieldNames) { name.ThrowIfNullOrEmpty("name"); propertySchema.ThrowIfNull("propertySchema"); internalClassProvider.ThrowIfNull("internalClassProvider"); details.ThrowIfNull("details"); var ret = new CodeMemberField( SchemaDecoratorUtil.GetCodeType(propertySchema, details, internalClassProvider), SchemaDecoratorUtil.GetFieldName(name, otherFieldNames)); ret.Attributes = MemberAttributes.Private; return(ret); }
/// <summary> /// Returns a code type references for the specified json schema. /// Generates the appropriate references. /// </summary> internal static CodeTypeReference GetCodeType(JsonSchema propertySchema, SchemaImplementationDetails details, INestedClassProvider internalClassProvider) { propertySchema.ThrowIfNull("propertySchema"); internalClassProvider.ThrowIfNull("internalClassProvider"); if (propertySchema.Type.HasValue == false) { throw new NotSupportedException("propertySchema has no Type. " + propertySchema); } switch (propertySchema.Type.Value) { case JsonSchemaType.String: return(new CodeTypeReference(typeof(string))); case JsonSchemaType.Integer: return(new CodeTypeReference(typeof(long?))); case JsonSchemaType.Boolean: return(new CodeTypeReference(typeof(bool?))); case JsonSchemaType.Float: return(new CodeTypeReference(typeof(double?))); case JsonSchemaType.Array: return(GetArrayTypeReference(propertySchema, details, internalClassProvider)); case JsonSchemaType.Object: return(GetObjectTypeReference(propertySchema, details, internalClassProvider)); case JsonSchemaType.Any: return(new CodeTypeReference(typeof(string))); default: logger.Warning( "Found currently unsupported type {0} as part of {1}", propertySchema.Type.Value, propertySchema); return(new CodeTypeReference(typeof(object))); } }
internal void ImplementAdditionalProperties(CodeTypeDeclaration type, JsonSchema schema, IDictionary <JsonSchema, SchemaImplementationDetails> implDetails, INestedClassProvider internalClassProvider) { // Validate the input parameters. type.ThrowIfNull("type"); schema.ThrowIfNull("schema"); implDetails.ThrowIfNull("implDetails"); internalClassProvider.ThrowIfNull("internalClassProvider"); // Check if this decorator applies to the specified json schema. if (schema.AdditionalProperties == null) { return; } // Note/ToDo: Currently we only support AdditionalProperties for schemas // specifiying no normal properties, as these won't be used // by the newtonsoft json library if a dictionary is specified. if (schema.Properties != null && schema.Properties.Count > 0) { type.Comments.Add(new CodeCommentStatement("TODO: Add support for additionalProperties on schemas")); type.Comments.Add(new CodeCommentStatement(" which have normal properties defined.")); return; } // Generate the underlying type. SchemaImplementationDetails details = implDetails[schema]; CodeTypeReference underlyingTypeRef = SchemaDecoratorUtil.GetCodeType( schema.AdditionalProperties, details, internalClassProvider); // Add the base type reference. CodeTypeReference dictionaryRef = new CodeTypeReference(typeof(Dictionary <,>)); dictionaryRef.TypeArguments.Add(typeof(string)); dictionaryRef.TypeArguments.Add(underlyingTypeRef); type.BaseTypes.Add(dictionaryRef); }
public void DecorateClass(CodeTypeDeclaration typeDeclaration, ISchema schema, IDictionary <JsonSchema, SchemaImplementationDetails> implDetails, INestedClassProvider internalClassProvider) { typeDeclaration.ThrowIfNull("typeDeclaration"); schema.ThrowIfNull("schema"); implDetails.ThrowIfNull("implDetails"); internalClassProvider.ThrowIfNull("internalClassProvider"); JsonSchema details = schema.SchemaDetails; details.ThrowIfNull("schemaDetails"); // Check if this decorator can be applied to the schema); if (details.Type != JsonSchemaType.Array) { return; } if (details.Items == null || details.Items.Count != 1) { logger.Warning("Found array scheme of unhandled type. {0}", details); return; // not supported } // Generate or find the nested type JsonSchema itemScheme = details.Items[0]; SchemaImplementationDetails implDetail = implDetails[itemScheme]; implDetail.ProposedName = "Entry"; // Change the name to a custom one. CodeTypeReference item = SchemaDecoratorUtil.GetCodeType(itemScheme, implDetail, internalClassProvider); // Insert the base type before any interface declaration typeDeclaration.BaseTypes.Insert(0, new CodeTypeReference(typeof(List <>)) { TypeArguments = { item } }); }
internal void ImplementAdditionalProperties(CodeTypeDeclaration type, JsonSchema schema, IDictionary<JsonSchema, SchemaImplementationDetails> implDetails, INestedClassProvider internalClassProvider) { // Validate the input parameters. type.ThrowIfNull("type"); schema.ThrowIfNull("schema"); implDetails.ThrowIfNull("implDetails"); internalClassProvider.ThrowIfNull("internalClassProvider"); // Check if this decorator applies to the specified json schema. if (schema.AdditionalProperties == null) { return; } // Note/ToDo: Currently we only support AdditionalProperties for schemas // specifiying no normal properties, as these won't be used // by the newtonsoft json library if a dictionary is specified. if (schema.Properties != null && schema.Properties.Count > 0) { type.Comments.Add(new CodeCommentStatement("TODO: Add support for additionalProperties on schemas")); type.Comments.Add(new CodeCommentStatement(" which have normal properties defined.")); return; } // Generate the underlying type. SchemaImplementationDetails details = implDetails[schema]; CodeTypeReference underlyingTypeRef = SchemaDecoratorUtil.GetCodeType( schema.AdditionalProperties, details, internalClassProvider); // Add the base type reference. CodeTypeReference dictionaryRef = new CodeTypeReference(typeof(Dictionary<,>)); dictionaryRef.TypeArguments.Add(typeof(string)); dictionaryRef.TypeArguments.Add(underlyingTypeRef); type.BaseTypes.Add(dictionaryRef); }
public void DecorateClass(CodeTypeDeclaration typeDeclaration, ISchema schema, IDictionary<JsonSchema, SchemaImplementationDetails> implDetails, INestedClassProvider internalClassProvider) { typeDeclaration.ThrowIfNull("typeDeclaration"); schema.ThrowIfNull("schema"); internalClassProvider.ThrowIfNull("internalClassProvider"); Count++; }
internal CodeMemberField GenerateField(string name, JsonSchema propertySchema, SchemaImplementationDetails details, int index, INestedClassProvider internalClassProvider, IEnumerable<string> otherFieldNames) { name.ThrowIfNullOrEmpty("name"); propertySchema.ThrowIfNull("propertySchema"); internalClassProvider.ThrowIfNull("internalClassProvider"); details.ThrowIfNull("details"); var ret = new CodeMemberField( SchemaDecoratorUtil.GetCodeType(propertySchema, details, internalClassProvider), SchemaDecoratorUtil.GetFieldName(name, otherFieldNames)); ret.Attributes = MemberAttributes.Private; return ret; }