コード例 #1
0
        private void AppendHyperlinkCell(TableRow row, string text, string hyperlink)
        {
            TableCell cell = new TableCell(
                new Paragraph(
                    new ParagraphProperties(
                        new ParagraphStyleId()
            {
                Val = Properties.Settings.Default.TableContentStyle
            }),
                    DocHelper.CreateAnchorHyperlink(text, hyperlink, Properties.Settings.Default.TableLinkStyle)));

            row.AppendChild(cell);
        }
コード例 #2
0
        private void AddDocumentTemplateListTable()
        {
            string[] headers = new string[] { GenerationConstants.USED_TEMPLATE_TABLE_TITLE, GenerationConstants.USED_TEMPLATE_TABLE_TYPE, GenerationConstants.USED_TEMPLATE_TABLE_ID };
            Table    t       = this.tables.AddTable("Template List", headers);

            List <Template> sortedTemplates = this._templates
                                              .OrderBy(y => y.TemplateTypeId)
                                              .ThenBy(y => y.Name)
                                              .ToList();

            foreach (Template cTemplate in sortedTemplates)
            {
                t.AppendChild(
                    new TableRow(
                        new TableCell(
                            new Paragraph(
                                new ParagraphProperties(
                                    new ParagraphStyleId()
                {
                    Val = Properties.Settings.Default.TableContentStyle
                }),
                                DocHelper.CreateAnchorHyperlink(cTemplate.Name, cTemplate.Bookmark, Properties.Settings.Default.TableLinkStyle))),
                        new TableCell(
                            new Paragraph(
                                new ParagraphProperties(
                                    new ParagraphStyleId()
                {
                    Val = Properties.Settings.Default.TableContentStyle
                }),
                                new Run(
                                    new Text(cTemplate.TemplateType.Name)
                {
                    Space = SpaceProcessingModeValues.Preserve
                }))),
                        new TableCell(
                            new Paragraph(
                                new ParagraphProperties(
                                    new ParagraphStyleId()
                {
                    Val = Properties.Settings.Default.TableContentStyle
                }),
                                new Run(
                                    new Text(cTemplate.Oid)
                {
                    Space = SpaceProcessingModeValues.Preserve
                })))));
            }
        }
コード例 #3
0
        private void AddValuesetListTable()
        {
            string[] headers = new string[] { "Name", "OID", "URL" };
            Table    t       = this.tables.AddTable("Value Sets", headers);

            foreach (ValueSet cValueSet in this.appendixValueSets.Keys.OrderBy(y => y.Name))
            {
                string         cAnchor = Helper.GetCleanName(cValueSet.Name, 39);
                OpenXmlElement urlRun  = DocHelper.CreateRun("N/A");

                if (!string.IsNullOrEmpty(cValueSet.Source))
                {
                    urlRun = DocHelper.CreateUrlHyperlink(this.mainPart, cValueSet.Source, cValueSet.Source, Properties.Settings.Default.TableLinkStyle);
                }

                TableRow newRow = new TableRow(
                    new TableCell(
                        new Paragraph(
                            new ParagraphProperties(
                                new ParagraphStyleId()
                {
                    Val = Properties.Settings.Default.TableContentStyle
                }),
                            DocHelper.CreateAnchorHyperlink(cValueSet.Name, cAnchor, Properties.Settings.Default.TableLinkStyle))),
                    new TableCell(
                        new Paragraph(
                            new ParagraphProperties(
                                new ParagraphStyleId()
                {
                    Val = Properties.Settings.Default.TableContentStyle
                }),
                            DocHelper.CreateRun(cValueSet.Oid))),
                    new TableCell(
                        new Paragraph(
                            new ParagraphProperties(
                                new ParagraphStyleId()
                {
                    Val = Properties.Settings.Default.TableContentStyle
                }),
                            urlRun)));
                t.Append(newRow);
            }
        }
コード例 #4
0
        private void AddTemplateContainmentTableEntry(IObjectRepository tdb, Table table, Template template, int level)
        {
            int spacing = 0;

            if (level > 1)
            {
                for (int i = 1; i < level; i++)
                {
                    spacing += 144;
                }
            }

            TableRow newRow = new TableRow(
                new TableCell(
                    new Paragraph(
                        new ParagraphProperties(
                            new ParagraphStyleId()
            {
                Val = Properties.Settings.Default.TableContentStyle
            },
                            new Indentation()
            {
                Left = new StringValue(spacing.ToString())
            }),
                        DocHelper.CreateAnchorHyperlink(template.Name, template.Bookmark, Properties.Settings.Default.TableLinkStyle))),
                new TableCell(
                    new Paragraph(
                        new ParagraphProperties(
                            new ParagraphStyleId()
            {
                Val = Properties.Settings.Default.TableContentStyle
            }),
                        DocHelper.CreateRun(template.TemplateType.Name))),
                new TableCell(
                    new Paragraph(
                        new ParagraphProperties(
                            new ParagraphStyleId()
            {
                Val = Properties.Settings.Default.TableContentStyle
            }),
                        DocHelper.CreateRun(template.Oid))));

            table.Append(newRow);

            List <Template> childTemplates = (from tc in template.ChildConstraints
                                              join t in this.allTemplates on tc.ContainedTemplateId equals t.Id
                                              where t.Id != template.Id
                                              orderby t.Name
                                              select t)
                                             .Distinct()
                                             .ToList();

            if (childTemplates != null)
            {
                foreach (Template cTemplate in childTemplates)
                {
                    if (this.parentTemplates.Exists(y => y.Id == cTemplate.Id))
                    {
                        Log.For(this).Warn("Circular reference found when generating containment tables for '{0}' ({1})", cTemplate.Name, cTemplate.Oid);
                        continue;
                    }

                    parentTemplates.Add(cTemplate);

                    AddTemplateContainmentTableEntry(tdb, table, cTemplate, level + 1);

                    parentTemplates.Remove(cTemplate);
                }
            }
        }
コード例 #5
0
        /// <summary>
        /// Adds a context table for the template. The context table lists all templates that are used by the current template, as
        /// well as all templates that this current template uses. Templates that use this template also indicate whether they are
        /// required or optional, depending on the conformance of the constraint that uses this template.
        /// </summary>
        /// <param name="template">The template in question</param>
        /// <param name="allConstraints">All constraints for the current template</param>
        private void AddTemplateContextTable()
        {
            TableRow  newRow        = new TableRow();
            TableCell usedByCell    = new TableCell();
            TableCell containedCell = new TableCell();

            var usedByTemplates = (from tc in this.tdb.TemplateConstraints
                                   join te in this.tdb.Templates on tc.TemplateId equals te.Id
                                   where tc.ContainedTemplateId == template.Id && tc.TemplateId != template.Id
                                   orderby tc.Conformance, te.Name
                                   select te)
                                  .Distinct().ToList();
            var containedTemplates = (from ac in allConstraints
                                      join ct in this.tdb.Templates on ac.ContainedTemplateId equals ct.Id
                                      where this.exportedTemplates.Exists(y => y.Id == ct.Id) && ac.ContainedTemplateId != null
                                      orderby ct.Name
                                      select ct)
                                     .Distinct().ToList();

            var usedByTemplatesSelectedForExport    = usedByTemplates.Where(e => this.exportedTemplates.Exists(y => y.Id == e.Id)).ToList();
            var containedTemplatesSelectedForExport = containedTemplates.Where(e => this.exportedTemplates.Exists(y => y.Id == e.Id)).ToList();

            int maxRows = containedTemplatesSelectedForExport.Count > usedByTemplatesSelectedForExport.Count ? containedTemplatesSelectedForExport.Count : usedByTemplatesSelectedForExport.Count;

            for (int i = 0; i < maxRows; i++)
            {
                Paragraph usedByPara = new Paragraph(
                    new ParagraphProperties(
                        new ParagraphStyleId()
                {
                    Val = Properties.Settings.Default.TableContentStyle
                }));
                Paragraph containedPara = new Paragraph(
                    new ParagraphProperties(
                        new ParagraphStyleId()
                {
                    Val = Properties.Settings.Default.TableContentStyle
                }));

                Template usedByTemplate    = i < usedByTemplatesSelectedForExport.Count ? usedByTemplatesSelectedForExport[i] : null;
                Template containedTemplate = i < containedTemplatesSelectedForExport.Count ? containedTemplatesSelectedForExport[i] : null;

                // Output the used by template
                if (usedByTemplate != null)
                {
                    List <TemplateConstraint> usedByConstraints = this.tdb.TemplateConstraints.Where(y =>
                                                                                                     y.TemplateId == usedByTemplate.Id &&
                                                                                                     y.ContainedTemplateId == template.Id).ToList();
                    bool isRequired = AreConstraintsRequiredByParents(usedByConstraints);

                    // Output a hyperlink if it is included in this doc, otherwise plain text
                    if (this.exportedTemplates.Exists(y => y.Id == usedByTemplate.Id))
                    {
                        usedByPara.Append(
                            DocHelper.CreateAnchorHyperlink(usedByTemplate.Name, usedByTemplate.Bookmark, Properties.Settings.Default.TableLinkStyle),
                            DocHelper.CreateRun(isRequired ? " (required)" : " (optional)"));
                    }
                    else
                    {
                        usedByPara.Append(
                            DocHelper.CreateRun(usedByTemplate.Name),
                            DocHelper.CreateRun(isRequired ? " (required)" : " (optional)"));
                    }

                    usedByCell.Append(usedByPara);
                }

                // Output the contained template
                if (containedTemplate != null)
                {
                    // Output a hyperlink if it is included in this doc, otherwise plain text
                    if (this.exportedTemplates.Exists(y => y.Id == containedTemplate.Id))
                    {
                        containedPara.Append(
                            DocHelper.CreateAnchorHyperlink(containedTemplate.Name, containedTemplate.Bookmark, Properties.Settings.Default.TableLinkStyle));
                    }
                    else
                    {
                        containedPara.Append(
                            DocHelper.CreateRun(containedTemplate.Name));
                    }

                    containedCell.Append(containedPara);
                }
            }

            // Make sure the cells have at least one paragraph in them
            if (containedCell.ChildElements.Count == 0)
            {
                containedCell.AppendChild(new Paragraph());
            }

            if (usedByCell.ChildElements.Count == 0)
            {
                usedByCell.AppendChild(new Paragraph());
            }

            // Only add the table to the document if there are conatined or used-by relationships
            if (maxRows > 0)
            {
                string[] headers = new string[] { TEMPLATE_CONTEXT_TABLE_USED_BY, TEMPLATE_CONTEXT_TABLE_CONTAINS };
                Table    t       = this.tables.AddTable(string.Format("{0} Contexts", template.Name), headers);

                t.Append(
                    new TableRow(usedByCell, containedCell));
            }
        }
コード例 #6
0
        /// <summary>
        /// Adds a single template to the implementation guide document.
        /// </summary>
        /// <param name="template">The template to add to the document</param>
        private void AddTemplate(Template template)
        {
            Log.For(this).Trace("BEGIN: Adding template '{0}'.", template.Oid);

            List <TemplateConstraint> templateConstraints = (from tc in this._tdb.TemplateConstraints
                                                             where tc.TemplateId == template.Id
                                                             select tc).ToList();
            List <TemplateConstraint> rootConstraints = templateConstraints
                                                        .Where(y => y.ParentConstraintId == null)
                                                        .OrderBy(y => y.Order)
                                                        .ToList();
            GreenTemplate greenTemplate      = template.GreenTemplates.FirstOrDefault();
            string        bookmarkId         = template.Bookmark;
            string        templateIdentifier = string.Format("identifier: {0}", template.Oid);

            if (!string.IsNullOrEmpty(template.PrimaryContext))
            {
                templateIdentifier = string.Format("{0} (identifier: {1})", template.PrimaryContext, template.Oid);
            }

            this.templateCount++;

            string headingLevel = Properties.Settings.Default.TemplateHeaderStyle;

            if (_exportSettings.AlphaHierarchicalOrder && template.ImpliedTemplateId != null && this._templates.Exists(y => y.Id == template.ImpliedTemplateId))
            {
                headingLevel = Properties.Settings.Default.TemplateHeaderSecondLevelStyle;
            }

            StringBuilder lTitleBuilder = new StringBuilder(string.Format("{0}", template.Name.Substring(1)));

            bool   lDirectlyOwnedTemplate = template.OwningImplementationGuideId == this.implementationGuide.Id;
            bool   lStatusMatches         = template.StatusId == template.OwningImplementationGuide.PublishStatusId;
            string status = "Draft";

            if (_exportSettings.IncludeTemplateStatus || !lDirectlyOwnedTemplate || !lStatusMatches || template.Status == PublishStatus.GetDeprecatedStatus(this._tdb))
            {
                status = template.Status != null ? template.Status.Status : status;
            }

            string lTemplateTitle = lTitleBuilder.ToString();

            // Output the title of the template
            Paragraph pHeading = new Paragraph(
                new ParagraphProperties(
                    new ParagraphStyleId()
            {
                Val = headingLevel
            }),
                new Run(
                    new Text(template.Name.Substring(0, 1))),
                new Run(
                    new RunProperties(
                        new BookmarkStart()
            {
                Id = bookmarkId, Name = bookmarkId
            },
                        new BookmarkEnd()
            {
                Id = bookmarkId
            }),
                    new Text(lTemplateTitle)));

            if (!string.IsNullOrEmpty(template.Notes) && this._exportSettings.IncludeNotes)
            {
                this._commentManager.AddCommentRange(pHeading, template.Notes);
            }

            this._document.MainDocumentPart.Document.Body.AppendChild(pHeading);

            // Output the "bracket data" for the template
            string detailsText = string.Format("identifier: {0} ({1})", template.Oid, template.IsOpen == true ? "open" : "closed");

            if (!string.IsNullOrEmpty(template.PrimaryContext))
            {
                detailsText = string.Format("[{0}: identifier {1} ({2})]",
                                            template.PrimaryContext,
                                            template.Oid,
                                            template.IsOpen == true ? "open" : "closed");
            }

            Paragraph pDetails = new Paragraph(
                new ParagraphProperties(
                    new ParagraphStyleId()
            {
                Val = Properties.Settings.Default.TemplateLocationStyle
            }),
                DocHelper.CreateRun(detailsText));

            this._document.MainDocumentPart.Document.Body.AppendChild(pDetails);

            //Output IG publish/draft info with "bracket data" format
            string igText = string.Format("{0} as part of {1}", status, template.OwningImplementationGuide.GetDisplayName());

            Paragraph igDetails = new Paragraph(
                new ParagraphProperties(
                    new ParagraphStyleId()
            {
                Val = Properties.Settings.Default.TemplateLocationStyle
            }),
                DocHelper.CreateRun(igText));

            this._document.MainDocumentPart.Document.Body.AppendChild(igDetails);

            // If we were told to generate context tables for the template...
            if (_exportSettings.GenerateTemplateContextTable)
            {
                TemplateContextTable.AddTable(this._tdb, this.tables, this._document.MainDocumentPart.Document.Body, template, this._templates);
            }

            // Output the template's description
            if (!string.IsNullOrEmpty(template.Description))
            {
                this.wikiParser.ParseAndAppend(template.Description, this._document.MainDocumentPart.Document.Body);
            }

            // If we were told to generate tables for the template...
            if (_exportSettings.GenerateTemplateConstraintTable)
            {
                this.constraintTableGenerator.AddTemplateConstraintTable(template, this._document.MainDocumentPart.Document.Body, templateIdentifier);
            }

            if (templateConstraints.Count(y => y.IsHeading) > 0)
            {
                Paragraph propertiesHeading = new Paragraph(
                    new ParagraphProperties(
                        new ParagraphStyleId()
                {
                    Val = Properties.Settings.Default.PropertiesHeadingStyle
                }),
                    DocHelper.CreateRun("Properties"));
                this._document.MainDocumentPart.Document.Body.AppendChild(propertiesHeading);
            }

            // Output the implied template conformance line
            if (template.ImpliedTemplate != null)
            {
                OpenXmlElement templateReference = !this._templates.Contains(template.ImpliedTemplate) ?
                                                   (OpenXmlElement)DocHelper.CreateRun(template.ImpliedTemplate.Name) :
                                                   (OpenXmlElement)DocHelper.CreateAnchorHyperlink(template.ImpliedTemplate.Name, template.ImpliedTemplate.Bookmark, Properties.Settings.Default.LinkStyle);

                Paragraph impliedConstraint = new Paragraph(
                    new ParagraphProperties(
                        new NumberingProperties(
                            new NumberingLevelReference()
                {
                    Val = 0
                },
                            new NumberingId()
                {
                    Val = GenerationConstants.BASE_TEMPLATE_INDEX + (int)template.Id
                })),
                    DocHelper.CreateRun("Conforms to "),
                    templateReference,
                    DocHelper.CreateRun(" template "),
                    DocHelper.CreateRun("(identifier: " + template.ImpliedTemplate.Oid + ")", style: Properties.Settings.Default.TemplateOidStyle),
                    DocHelper.CreateRun("."));
                this._document.MainDocumentPart.Document.Body.Append(impliedConstraint);
            }

            bool lCreateValueSetTables = _exportSettings.DefaultValueSetMaxMembers > 0;

            IConstraintGenerator constraintGenerator = ConstraintGenerationFactory.NewConstraintGenerator(
                this._settings,
                this._document.MainDocumentPart.Document.Body,
                this._commentManager,
                this.figures,
                this.wikiParser,
                _exportSettings.IncludeXmlSamples,
                _tdb,
                rootConstraints,
                templateConstraints,
                template,
                this._templates,
                Properties.Settings.Default.ConstraintHeadingStyle,
                _exportSettings.SelectedCategories);

            constraintGenerator.GenerateConstraints(lCreateValueSetTables, this._exportSettings.IncludeNotes);

            // Add value-set tables
            if (lCreateValueSetTables)
            {
                var constraintValueSets = (from c in templateConstraints
                                           where c.ValueSet != null
                                           select new { ValueSet = c.ValueSet, ValueSetDate = c.ValueSetDate })
                                          .Distinct();

                foreach (var cConstraintValueSet in constraintValueSets)
                {
                    DateTime?bindingDate = cConstraintValueSet.ValueSetDate != null ? cConstraintValueSet.ValueSetDate : this.implementationGuide.PublishDate;

                    if (bindingDate == null)
                    {
                        bindingDate = DateTime.Now;
                    }

                    this.valueSetsExport.AddValueSet(cConstraintValueSet.ValueSet, bindingDate.Value);
                }
            }

            if (_exportSettings.IncludeXmlSamples)
            {
                foreach (var lSample in template.TemplateSamples.OrderBy(y => y.Id))
                {
                    this.figures.AddSample(lSample.Name, lSample.XmlSample);
                }
            }

            Log.For(this).Trace("END: Adding template '{0}' with {1} constraints.", template.Oid, templateConstraints.Count);
        }
コード例 #7
0
        private void LoadDifferencesAsAppendix(string aIgName, List <IGDifferenceViewModel> aDifferences)
        {
            // Create the heading for the appendix
            Paragraph heading = new Paragraph(
                new ParagraphProperties(
                    new ParagraphStyleId()
            {
                Val = Properties.Settings.Default.TemplateTypeHeadingStyle
            }),
                new Run(
                    new Text("Changes from Previous Version")));

            this._document.MainDocumentPart.Document.Body.AppendChild(heading);

            foreach (IGDifferenceViewModel lDifference in aDifferences)
            {
                Paragraph changeHeadingPara = new Paragraph(
                    new ParagraphProperties(
                        new ParagraphStyleId()
                {
                    Val = Properties.Settings.Default.TemplateHeaderStyle
                }),
                    DocHelper.CreateRun(lDifference.TemplateName));
                this._document.MainDocumentPart.Document.Body.AppendChild(changeHeadingPara);

                Paragraph changeLinkPara = new Paragraph(
                    new ParagraphProperties(new KeepNext()),
                    DocHelper.CreateAnchorHyperlink(
                        string.Format("{0} ({1})", lDifference.TemplateName, lDifference.TemplateOid), lDifference.TemplateBookmark, Properties.Settings.Default.LinkStyle),
                    new Break());
                this._document.MainDocumentPart.Document.Body.AppendChild(changeLinkPara);

                Table t = this.tables.AddTable(null, new string[] { "Change", "Old", "New" });

                // Show template field changes first
                foreach (ComparisonFieldResult lResult in lDifference.Difference.ChangedFields)
                {
                    TableRow memberRow = new TableRow(
                        new TableCell(
                            new Paragraph(
                                new ParagraphProperties(
                                    new ParagraphStyleId()
                    {
                        Val = Properties.Settings.Default.TableContentStyle
                    }),
                                DocHelper.CreateRun(lResult.Name))),
                        new TableCell(
                            new Paragraph(
                                new ParagraphProperties(
                                    new ParagraphStyleId()
                    {
                        Val = Properties.Settings.Default.TableContentStyle
                    }),
                                DocHelper.CreateRun(lResult.Old))),
                        new TableCell(
                            new Paragraph(
                                new ParagraphProperties(
                                    new ParagraphStyleId()
                    {
                        Val = Properties.Settings.Default.TableContentStyle
                    }),
                                DocHelper.CreateRun(lResult.New)))
                        );

                    t.Append(memberRow);
                }

                // Show constraint changes second
                foreach (ComparisonConstraintResult lConstraintChange in lDifference.Difference.ChangedConstraints)
                {
                    if (lConstraintChange.Type == CompareStatuses.Unchanged)
                    {
                        continue;
                    }

                    TableRow memberRow = new TableRow(
                        new TableCell(
                            new Paragraph(
                                new ParagraphProperties(
                                    new ParagraphStyleId()
                    {
                        Val = Properties.Settings.Default.TableContentStyle
                    }),
                                DocHelper.CreateRun(string.Format("CONF #: {0} {1}", lConstraintChange.Number, lConstraintChange.Type)))),
                        new TableCell(
                            new Paragraph(
                                new ParagraphProperties(
                                    new ParagraphStyleId()
                    {
                        Val = Properties.Settings.Default.TableContentStyle
                    }),
                                DocHelper.CreateRun(lConstraintChange.OldNarrative))),
                        new TableCell(
                            new Paragraph(
                                new ParagraphProperties(
                                    new ParagraphStyleId()
                    {
                        Val = Properties.Settings.Default.TableContentStyle
                    }),
                                DocHelper.CreateRun(lConstraintChange.NewNarrative)))
                        );

                    t.Append(memberRow);
                }
            }
        }