private string PrintModelToHtml(MimicGeneratedClass model) { var builder = new StringBuilder(); if (model.ParentClass != null) { var parentClass = PrintModelToHtml(model.ParentClass); builder.Append(parentClass); } else { foreach (var composition in model.Compositions) { var compositionInterface = PrintClassInterfaceHtml(composition, ClassType.INTERFACE); builder.Append(compositionInterface); } } var classHtml = PrintClassInterfaceHtml(model, ClassType.CLASS); builder.Append(classHtml); var result = builder.ToString(); return(result); }
private string PrintClassInterfaceHtml(MimicGeneratedClass typeModels, ClassType classType) { var builder = new StringBuilder(); builder.Append(HtmlPrinter.Keyword("public")); builder.Append(HtmlPrinter.Keyword(classType.ToString().ToLower())); if (classType == ClassType.CLASS) { builder.Append(HtmlPrinter.Type(typeModels.ClassName)); if (typeModels.ParentClass == null) { if (typeModels.InheritedInterfaceNames != null && typeModels.InheritedInterfaceNames.Any()) { builder.Append(HtmlPrinter.Standard(" : ")); builder.Append(HtmlPrinter.Type(string.Join(", ", typeModels.InheritedInterfaceNames))); } } else { builder.Append(HtmlPrinter.Standard(" : ")); builder.Append(HtmlPrinter.Type(typeModels.ParentClass.ClassName)); } } else { builder.Append(HtmlPrinter.Type(typeModels.InterfaceName)); } builder.Append(HtmlPrinter.NewLine); builder.Append(HtmlPrinter.Standard("{")); builder.Append(HtmlPrinter.NewLine); var propertyTypes = typeModels.PropertyTypes; if (classType == ClassType.CLASS && typeModels.ParentClass == null) { List <MimicPropertyType> list = new List <MimicPropertyType>(); foreach (var i in typeModels.Compositions) { list.AddRange(i.PropertyTypes); } propertyTypes.AddRange(list); } foreach (var prop in propertyTypes.OrderByDescending(pt => pt.IsMandatory)) { var mandatory = classType == ClassType.CLASS && prop.IsMandatory; if (mandatory) { builder.Append(HtmlPrinter.Standard("[", false)); builder.Append(HtmlPrinter.Type("Required", false)); builder.Append(HtmlPrinter.Standard("]")); builder.Append(HtmlPrinter.NewLine); } if (classType == ClassType.CLASS) { builder.Append(HtmlPrinter.Keyword("public")); } var htmlClass = "dm-typ"; var propertyTypeName = prop.PropertyType. ReplaceFirstOccurrence("<", "<span class=\"dm-std\"><</span>"). ReplaceLastOccurrence(">", "<span class=\"dm-std\">></span>"); if (AliasTypesMap.Contains(propertyTypeName)) { htmlClass = "dm-kwd"; } builder.AppendFormat("<span class=\"{0}\">{1}</span>", htmlClass, propertyTypeName); builder.Append(HtmlPrinter.Space); builder.Append(HtmlPrinter.Standard(prop.Name)); builder.Append(HtmlPrinter.Standard("{")); builder.Append(HtmlPrinter.Keyword("get")); builder.Append(HtmlPrinter.Standard(";")); builder.Append(HtmlPrinter.Space); builder.Append(HtmlPrinter.Keyword("set")); builder.Append(HtmlPrinter.Standard(";")); builder.Append(HtmlPrinter.Space); builder.Append(HtmlPrinter.Standard("}")); builder.Append(HtmlPrinter.NewLine); if (mandatory) { builder.Append(HtmlPrinter.NewLine); } } builder.Append(HtmlPrinter.Standard("}")); builder.Append(HtmlPrinter.NewLine); builder.Append(HtmlPrinter.NewLine); var result = builder.ToString(); return(result); }
private MimicGeneratedClass GenerateClass(IContentType documentType, IEnumerable <PropertyGroup> properties, string className) { var root = new MimicGeneratedClass(); root.ClassName = className; //var publishedContentType = PublishedContentType.Get(PublishedItemType.Content, documentType.Alias); //PublishedContentType. //Current.PublishedContentTypeFactory IPublishedContentType PublishedContentType = new PublishedContentType(documentType, Current.PublishedContentTypeFactory); //var publishedContentType = PublishedContentType.GetPropertyType(documentType.Alias); foreach (var propertyGroup in properties) { foreach (var propertyType in propertyGroup.PropertyTypes.OrderBy(pt => pt.Name)) { var publishedPropertyType = PublishedContentType.GetPropertyType(propertyType.Alias); if (publishedPropertyType == null) { throw new Exception($"Chill: could not get published property type {documentType.Alias}.{propertyType.Alias}."); } var propertyModelClrType = publishedPropertyType.ClrType; var _propertyType = ResolvePropertyType(publishedPropertyType); var _propertyName = char.ToUpper(propertyType.Alias[0]) + propertyType.Alias.Substring(1); if (_propertyType.Contains("IPublishedContent")) { var preValue = GetDataTypePreValue(propertyType.DataTypeId, "filter"); //var preValues = ApplicationContext.Services.DataTypeService.GetPreValuesCollectionByDataTypeId(propertyType.DataTypeDefinitionId); //var filters = preValues.PreValuesAsDictionary.FirstOrDefault(x => x.Key == "filter"); if (preValue != null) { if (!string.IsNullOrEmpty(preValue) && !preValue.Contains(',')) { var mappedClass = char.ToUpper(preValue[0]) + preValue.Substring(1); _propertyType = _propertyType.Replace("IPublishedContent", mappedClass); } } else { //var contentTypes = preValues.PreValuesAsDictionary.FirstOrDefault(x => x.Key == "contentTypes"); var contentTypes = GetDataTypePreValue(propertyType.DataTypeId, "contentTypes"); if (contentTypes != null) { if (!string.IsNullOrEmpty(preValue)) { preValue = preValue.Trim('[').Trim(']'); var nestedContent = JsonConvert.DeserializeObject <MimicNestedContent>(preValue); if (!string.IsNullOrEmpty(nestedContent.ncAlias) && !nestedContent.ncAlias.Contains(',')) { var mappedClass = char.ToUpper(nestedContent.ncAlias[0]) + nestedContent.ncAlias.Substring(1); _propertyType = _propertyType.Replace("IPublishedContent", mappedClass); } } } } } if (_propertyName == className) { _propertyName = "_" + _propertyName; } root.PropertyTypes.Add(new MimicPropertyType { PropertyGroup = GetSafeName(propertyGroup.Name), Name = _propertyName, PropertyType = _propertyType, IsMandatory = propertyType.Mandatory }); } } return(root); }