IfcDoc.DocumentationISO.FormatView C# (CSharp) Method

FormatView() private static method

Formats table for all exchanges within a view
private static FormatView ( DocProject docProject, DocModelView docView, DocObject>.Dictionary mapEntity, string>.Dictionary mapSchema ) : string
docProject DocProject
docView DocModelView
mapEntity DocObject>.Dictionary
mapSchema string>.Dictionary
return string
        private static string FormatView(DocProject docProject, DocModelView docView, Dictionary<string, DocObject> mapEntity, Dictionary<string, string> mapSchema)
        {
            // format content
            StringBuilder sb = new StringBuilder();

            // 1. manual content
            sb.Append(docView.Documentation);

            #if false // don't show anymore
            // 2. map of entities and templates -- Identity | Template | Import | Export
            sb.AppendLine("<p></p>");

            SortedList<string, DocConceptRoot> sortlist = new SortedList<string, DocConceptRoot>();

            // base view
            DocModelView docBase = docView;
            while (docBase != null)
            {
                foreach (DocConceptRoot docRoot in docBase.ConceptRoots)
                {
                    if (!sortlist.ContainsKey(docRoot.ApplicableEntity.Name))
                    {
                        sortlist.Add(docRoot.ApplicableEntity.Name, docRoot);
                    }
                }

                if (!String.IsNullOrEmpty(docBase.BaseView))
                {
                    docBase = docProject.GetView(Guid.Parse(docBase.BaseView));
                }
                else
                {
                    docBase = null;
                }
            }

            int cols = 3 + docView.Exchanges.Count;

            // new style - table
            sb.AppendLine("<table class=\"exchange\">");
            sb.AppendLine("<tr><th colspan=\"" + cols.ToString() + "\">" + docView.Name + "</th></tr>");
            sb.Append("<tr><th>Entity/Concept</th><th>Attributes</th><th>Constraints</th>");
            //<th>I</th><th>E</th></tr>");
            foreach (DocExchangeDefinition docExchange in docView.Exchanges)
            {
                sb.Append("<th>");
                sb.Append("<img src=\"../../../img/mvd-");
                sb.Append(docExchange.Name.ToLower().Replace(' ', '-'));
                sb.Append(".png\" title=\"");
                sb.Append(docExchange.Name);
                sb.Append("\" />");
                sb.Append("</th>");
            }
            sb.AppendLine("</tr>");

            foreach (string ent in sortlist.Keys)
            {
                DocConceptRoot docRoot = sortlist[ent];

                sb.Append("<tr><td colspan=\"" + cols.ToString() + "\"><b><i>");
                sb.Append(docRoot.ApplicableEntity.Name);
                sb.AppendLine("</i></b></td></tr>");

                // determine schema
                string schema = mapSchema[ent];

                foreach (DocTemplateUsage docConcept in docRoot.Concepts)
                {
                    if (docConcept.Definition != null)
                    {

                        sb.Append("<tr><td>&nbsp;&nbsp;<a href=\"../../");
                        sb.Append(schema.ToLower());
                        sb.Append("/lexical/");
                        sb.Append(ent.ToLower());
                        sb.Append(".htm#");
                        sb.Append(docConcept.Definition.Name.ToLower().Replace(' ', '-'));
                        sb.Append("\">");
                        sb.Append(docConcept.Definition.Name);
                        sb.Append("</a></td><td>");

                        bool first = true;
                        if (docConcept.Definition.Rules != null)
                        {
                            foreach (DocModelRule docRule in docConcept.Definition.Rules)
                            {
                                if (!first)
                                {
                                    sb.Append("<br/>");
                                }
                                sb.Append(docRule.Name);
                                first = false;
                            }
                        }

                        sb.Append("</td><td>");

                        // IfcDoc 6.4: use tables
                        string table = FormatConceptTable(docProject, docView, docRoot.ApplicableEntity, docRoot, docConcept, mapEntity, mapSchema);
                        sb.Append(table);
            #if false
                    // build list of inherited items
                    first = true;
                    DocTemplateItem[] items = FindTemplateItems(docProject, docRoot.ApplicableEntity, docConcept.Definition, docView);
                    foreach (DocTemplateItem docItem in items)
                    {
                        if (!first)
                        {
                            sb.Append("<br/>");
                        }
                        sb.Append(docItem.RuleParameters);
                        first = false;
                    }
            #endif

                        sb.Append("</td>");

                        foreach (DocExchangeDefinition docExchange in docView.Exchanges)
                        {
                            DocExchangeRequirementEnum reqExport = DocExchangeRequirementEnum.NotRelevant;
                            foreach (DocExchangeItem docItem in docConcept.Exchanges)
                            {
                                if (docItem.Exchange == docExchange && docItem.Applicability == DocExchangeApplicabilityEnum.Export)
                                {
                                    reqExport = docItem.Requirement;
                                }
                            }

                            sb.Append("<td>");
                            AppendRequirement(sb, reqExport, 3);
                            sb.Append("</td>");
                        }

                        sb.AppendLine("</tr>");
                    }

                }
            }
            sb.AppendLine("</table>");
            #endif
            return sb.ToString();
        }