private void GenerateComment(Field field, string padding) { WriteLine("{0} /// <summary>", padding); if (field.IsHeterogenous) { string types = string.Join(", ", field.Types.Select(x => x.Name).OrderBy(x => x)); if (field.IsMultivalue) { WriteLine("{0} /// <para>List of either: {1}</para>", padding, types); } else { WriteLine("{0} /// <para>Can be one of: {1}</para>", padding, types); } } if (field.IsMandatory) { WriteLine("{0} /// <para>Mandatory field</para>", padding); } else { WriteLine("{0} /// <para>Optional field might be null</para>", padding); } WriteLine("{0} /// </summary>", padding); }
private string GetPropertyType(Field field) { string type; if (field.IsHeterogenous) { type = "ModelBase"; } else { type = Util.GetPropertyType(field.Type); } if (field.IsMultivalue) { type = string.Format("IList<{0}>", type); } return type; }
public FieldsBuilder(XElement fieldsElement, IList<Field> fields) { if (fieldsElement == null) { return; } foreach (XElement fieldElement in fieldsElement.Descendants(Constants.XSD_NAMESPACE + "element")) { Field field = new Field { Name = fieldElement.Attribute("name").Value, IsMandatory = fieldElement.Attribute("minOccurs").Value == "1", IsMultivalue = fieldElement.Attribute("maxOccurs").Value == "unbounded" }; fields.Add(field); TypesBuilder typeBuilder = new TypesBuilder(fieldElement); field.Types.UnionWith(typeBuilder.Types); } }
protected string GetPropertyName(Field field) { string name = Util.MakePropertyName(field.Name); switch (name) { case "Id": case "Title": case "Schema": name += "Field"; break; } return name; }
protected string GetFieldInitializer(Field field, string baseName) { StringBuilder result = new StringBuilder(); if (field.IsHeterogenous) { result.AppendFormat("HeterogenousBuilder.Instance.Build({0}.LinkedComponentValue{1}(\"{2}\"))", baseName, field.IsMultivalue ? "s" : "", field.Name); } else { Mitza.ModelGenerator.Model.Type fieldType = field.Type; switch (fieldType.TypeKind) { case TypeKind.ComponentLink: result.AppendFormat("{0}.Instance.Build({1}.LinkedComponentValue{2}(\"{3}\"))", Util.MakeBuilderClassName(fieldType.Name), baseName, field.IsMultivalue ? "s" : "", field.Name); break; case TypeKind.Date: result.AppendFormat("{0}.DateTimeValue{1}(\"{2}\")", baseName, field.IsMultivalue ? "s" : "", field.Name); break; case TypeKind.Embedded: result.AppendFormat("{0}.Instance.Build({1}.EmbeddedValue{2}(\"{3}\"))", Util.MakeEmbeddedBuilderClassName(fieldType.Name), baseName, field.IsMultivalue ? "s" : "", field.Name); break; case TypeKind.Keyword: result.AppendFormat("{0}.KeywordValue{1}(\"{2}\")", baseName, field.IsMultivalue ? "s" : "", field.Name); break; case TypeKind.MultimediaLink: result.AppendFormat("{0}.Instance.Build({1}.LinkedComponentValue{2}(\"{3}\"))", Util.MakeMultimediaBuilderClassName(fieldType.Name), baseName, field.IsMultivalue ? "s" : "", field.Name); break; case TypeKind.Numeric: result.AppendFormat("{0}.NumericValue{1}(\"{2}\")", baseName, field.IsMultivalue ? "s" : "", field.Name); break; case TypeKind.RichText: result.AppendFormat("{0}.ResolveRichText{1}(\"{2}\")", baseName, field.IsMultivalue ? "s" : "", field.Name); break; case TypeKind.Text: default: result.AppendFormat("{0}.StringValue{1}(\"{2}\")", baseName, field.IsMultivalue ? "s" : "", field.Name); break; } } return result.ToString(); }
private void GenerateField(Field field, string padding) { GenerateComment(field, padding); WriteLine("{0} public {1} {2} {{ get; set; }}", padding, GetPropertyType(field), GetPropertyName(field)); }