Beispiel #1
0
        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);
        }
Beispiel #2
0
        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\">&lt;</span>").
                                       ReplaceLastOccurrence(">", "<span class=\"dm-std\">&gt;</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);
        }
Beispiel #3
0
        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);
        }