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> <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();
}