コード例 #1
0
        private void UpdateCardinalities(IGSettingsManager igSettings, ImportImplementationGuide importImplementationGuide)
        {
            foreach (var importCardinality in importImplementationGuide.CardinalityDisplay)
            {
                switch (importCardinality.cardinality)
                {
                case Shared.ImportExport.Model.CardinalityTypes.Zero:
                    igSettings.SaveSetting(IGSettingsManager.SettingProperty.CardinalityZero, importCardinality.display);
                    break;

                case Shared.ImportExport.Model.CardinalityTypes.ZeroOrOne:
                    igSettings.SaveSetting(IGSettingsManager.SettingProperty.CardinalityZeroToOne, importCardinality.display);
                    break;

                case Shared.ImportExport.Model.CardinalityTypes.ZeroToMany:
                    igSettings.SaveSetting(IGSettingsManager.SettingProperty.CardinalityZeroOrMore, importCardinality.display);
                    break;

                case Shared.ImportExport.Model.CardinalityTypes.One:
                    igSettings.SaveSetting(IGSettingsManager.SettingProperty.CardinalityOneToOne, importCardinality.display);
                    break;

                case Shared.ImportExport.Model.CardinalityTypes.OneToMany:
                    igSettings.SaveSetting(IGSettingsManager.SettingProperty.CardinalityAtLeastOne, importCardinality.display);
                    break;

                default:
                    throw new ArgumentException("Unexpected cardinality value " + importCardinality.cardinality);
                }
            }
        }
コード例 #2
0
        private void UpdateCustomSchematron(ImplementationGuide implementationGuide, ImportImplementationGuide importImplementationGuide)
        {
            var allCustomSchematrons = implementationGuide.SchematronPatterns.ToList();

            // Remove all first
            foreach (var customSchematron in allCustomSchematrons)
            {
                this.tdb.ImplementationGuideSchematronPatterns.DeleteObject(customSchematron);
            }

            // Add all in import as new
            foreach (var importCustomSchematron in importImplementationGuide.CustomSchematron)
            {
                var foundSchematronPattern = new ImplementationGuideSchematronPattern();
                foundSchematronPattern.PatternId = importCustomSchematron.patternId;
                implementationGuide.SchematronPatterns.Add(foundSchematronPattern);

                if (foundSchematronPattern.Phase != importCustomSchematron.phase)
                {
                    foundSchematronPattern.Phase = importCustomSchematron.phase;
                }

                if (foundSchematronPattern.PatternContent != importCustomSchematron.Rule)
                {
                    foundSchematronPattern.PatternContent = importCustomSchematron.Rule;
                }
            }
        }
コード例 #3
0
        private void UpdateTemplateTypes(ImplementationGuide implementationGuide, ImportImplementationGuide importImplementationGuide)
        {
            foreach (var importTemplateType in importImplementationGuide.CustomTemplateType)
            {
                var foundTemplateType = implementationGuide.ImplementationGuideType.TemplateTypes.SingleOrDefault(y => y.Name.ToLower() == importTemplateType.templateTypeName.ToLower());

                if (foundTemplateType == null)
                {
                    throw new Exception("Could not find template type " + importTemplateType.templateTypeName + " associated with implementation guide type");
                }

                var foundIgTemplateType = implementationGuide.TemplateTypes.SingleOrDefault(y => y.TemplateTypeId == foundTemplateType.Id);

                if (foundIgTemplateType == null)
                {
                    foundIgTemplateType = new ImplementationGuideTemplateType();
                    foundIgTemplateType.TemplateType        = foundTemplateType;
                    foundIgTemplateType.TemplateTypeId      = foundTemplateType.Id;
                    foundIgTemplateType.ImplementationGuide = implementationGuide;
                    implementationGuide.TemplateTypes.Add(foundIgTemplateType);
                }

                if (foundIgTemplateType.Name != importTemplateType.CustomName)
                {
                    foundIgTemplateType.Name = importTemplateType.CustomName;
                }

                if (foundIgTemplateType.DetailsText != importTemplateType.Description)
                {
                    foundIgTemplateType.DetailsText = importTemplateType.Description;
                }
            }
        }
コード例 #4
0
        private void UpdateFiles(ImplementationGuide implementationGuide, ImportImplementationGuide importImplementationGuide)
        {
            var    currentUser     = CheckPoint.Instance.GetUser(this.tdb);
            string currentUserName = currentUser != null?
                                     string.Format("{0} {1} ({2})", currentUser.FirstName, currentUser.LastName, currentUser.Email) :
                                         "Unknown user";

            foreach (var importFile in importImplementationGuide.File)
            {
                if (string.IsNullOrEmpty(importFile.name))
                {
                    continue;
                }

                var foundFile = implementationGuide.Files.SingleOrDefault(y => y.FileName.ToLower() == importFile.name.ToLower());

                if (foundFile == null)
                {
                    foundFile                     = new ImplementationGuideFile();
                    foundFile.FileName            = importFile.name;
                    foundFile.ImplementationGuide = implementationGuide;
                    this.tdb.ImplementationGuideFiles.Add(foundFile);
                }

                var    latestData = foundFile.Versions.Count > 0 ? foundFile.GetLatestData() : null;
                byte[] content    = Convert.FromBase64String(importFile.Content);

                if (latestData == null || latestData.Data.Length != content.Length)
                {
                    latestData = new ImplementationGuideFileData();
                    latestData.ImplementationGuideFile = foundFile;
                    latestData.Data        = content;
                    latestData.UpdatedDate = DateTime.Now;
                    latestData.UpdatedBy   = currentUserName;
                    this.tdb.ImplementationGuideFileDatas.Add(latestData);
                }

                // Update properties of the file
                foundFile.MimeType    = importFile.mimeType;
                foundFile.ContentType = importFile.type.ToString();
                foundFile.Description = importFile.Description;
            }
        }
コード例 #5
0
        private PublishStatus GetImportStatus(ImportImplementationGuide importIg)
        {
            switch (importIg.status)
            {
            case Shared.ImportExport.Model.ImplementationGuideStatus.Ballot:
                return(PublishStatus.GetBallotStatus(this.tdb));

            case Shared.ImportExport.Model.ImplementationGuideStatus.Published:
                return(PublishStatus.GetPublishedStatus(this.tdb));

            case Shared.ImportExport.Model.ImplementationGuideStatus.Deprecated:
                return(PublishStatus.GetDeprecatedStatus(this.tdb));

            case Shared.ImportExport.Model.ImplementationGuideStatus.Retired:
                return(PublishStatus.GetRetiredStatus(this.tdb));

            default:
                return(PublishStatus.GetDraftStatus(this.tdb));
            }
        }
コード例 #6
0
        private void UpdateVolume1(ImplementationGuide implementationGuide, IGSettingsManager igSettings, ImportImplementationGuide importImplementationGuide)
        {
            if (importImplementationGuide.Volume1 == null)
            {
                igSettings.SaveSetting(IGSettingsManager.SettingProperty.Volume1Html, string.Empty);
                this.RemoveVolume1Sections(implementationGuide);
                return;
            }

            if (importImplementationGuide.Volume1.Items.Count == 1 && importImplementationGuide.Volume1.Items.First() is string)
            {
                this.RemoveVolume1Sections(implementationGuide);
                igSettings.SaveSetting(IGSettingsManager.SettingProperty.Volume1Html, importImplementationGuide.Volume1.Items.First() as string);
            }
            else if (importImplementationGuide.Volume1.Items.Count > 0)
            {
                igSettings.SaveSetting(IGSettingsManager.SettingProperty.Volume1Html, string.Empty);

                foreach (ImportImplementationGuideSection importSection in importImplementationGuide.Volume1.Items)
                {
                    if (importSection.Heading == null)
                    {
                        throw new ArgumentException("All implementation guide sections must have a heading");
                    }

                    ImplementationGuideSection newSection = new ImplementationGuideSection()
                    {
                        Heading = importSection.Heading.Title,
                        Level   = importSection.Heading.Level,
                        Order   = implementationGuide.Sections.Count + 1
                    };
                    implementationGuide.Sections.Add(newSection);
                }
            }
        }
コード例 #7
0
        public ImplementationGuide Import(ImportImplementationGuide importImplementationGuide)
        {
            var implementationGuide = FindImplementationGuide(importImplementationGuide.name, importImplementationGuide.version);
            ImplementationGuide foundPreviousVersionIg = null;
            IGSettingsManager   igSettings             = null;
            var igType = this.tdb.ImplementationGuideTypes.SingleOrDefault(y => y.Name.ToLower() == importImplementationGuide.type.ToLower());

            this.Errors = new List <string>();

            if (igType == null)
            {
                this.Errors.Add("Implementation guide type \"" + importImplementationGuide.type + "\" is not found");
                return(null);
            }

            // Make sure IG's previous version is set
            // May not have an "id" for the previous version, so using the entity model to ensure the reference saves
            if (importImplementationGuide.PreviousVersion != null && !string.IsNullOrEmpty(importImplementationGuide.PreviousVersion.name) && importImplementationGuide.PreviousVersion.number > 0)
            {
                foundPreviousVersionIg = FindImplementationGuide(importImplementationGuide.PreviousVersion.name, importImplementationGuide.PreviousVersion.number);

                if (foundPreviousVersionIg != null && !foundPreviousVersionIg.PreviousVersion.Contains(implementationGuide))
                {
                    foundPreviousVersionIg.PreviousVersion.Add(implementationGuide);
                }
            }

            if (implementationGuide == null && foundPreviousVersionIg == null && this.tdb.ImplementationGuides.Count(y => y.Name.ToLower() == importImplementationGuide.name.ToLower()) > 0)
            {
                this.Errors.Add("Implementation guide with the same name already exists, and this is not a new version of that implementation guide.");
                return(null);
            }

            if (implementationGuide == null)
            {
                implementationGuide = new ImplementationGuide();
                implementationGuide.ImplementationGuideType   = igType;
                implementationGuide.ImplementationGuideTypeId = igType.Id;

                this.tdb.ImplementationGuides.AddObject(implementationGuide);
                igSettings = new IGSettingsManager(this.tdb);

                // Add default template types to new implementation guide
                foreach (var templateType in igType.TemplateTypes)
                {
                    var igTemplateType = new ImplementationGuideTemplateType()
                    {
                        TemplateType = templateType,
                        Name         = templateType.Name
                    };
                    implementationGuide.TemplateTypes.Add(igTemplateType);
                }
            }
            else
            {
                igSettings = new IGSettingsManager(this.tdb, implementationGuide.Id);
            }

            // Set changed/new properties of implementation guide
            this.UpdateProperties(implementationGuide, igType, importImplementationGuide);

            // Update cardinalities
            this.UpdateCardinalities(igSettings, importImplementationGuide);

            // Update custom template type names
            this.UpdateTemplateTypes(implementationGuide, importImplementationGuide);

            // Update custom schematron rules
            this.UpdateCustomSchematron(implementationGuide, importImplementationGuide);

            // Update volume1 HTML and/or Sections
            this.UpdateVolume1(implementationGuide, igSettings, importImplementationGuide);

            // Update categories
            this.UpdateCategories(implementationGuide, igSettings, importImplementationGuide);

            if (foundPreviousVersionIg != null && foundPreviousVersionIg.PublishStatus != PublishStatus.GetPublishedStatus(this.tdb))
            {
                this.Errors.Add("Previous version of implementation guide is not published, and cannot hav a new version associated with it");
                return(null);
            }

            var existingNextVersion = foundPreviousVersionIg != null?
                                      this.tdb.ImplementationGuides.SingleOrDefault(y => y.PreviousVersionImplementationGuideId == foundPreviousVersionIg.Id) :
                                          null;

            // Validate versioning of the implementation guide
            if (foundPreviousVersionIg == null && implementationGuide.Version != 1)
            {
                this.Errors.Add("Implementation guide cannot have a version greater than one when no previous version is specified");
                return(null);
            }

            if (foundPreviousVersionIg != null && existingNextVersion != null && existingNextVersion != implementationGuide)
            {
                this.Errors.Add("Previous version of implementation guide already has a new version created for it");
                return(null);
            }

            // If the object is changed, make sure the user has permissions to the implementation guide
            if (this.dataSource != null)
            {
                var igState = this.dataSource.ObjectStateManager.GetObjectStateEntry(implementationGuide);

                if (igState.State == System.Data.Entity.EntityState.Modified && !CheckPoint.Instance.GrantEditImplementationGuide(implementationGuide.Id) && !CheckPoint.Instance.IsDataAdmin)
                {
                    this.Errors.Add("You do not have permission to modify implementation guide \"" + implementationGuide.Name + "\" version " + implementationGuide.Version);
                    return(null);
                }
            }

            return(implementationGuide);
        }
コード例 #8
0
        private void UpdateCategories(ImplementationGuide implementationGuide, IGSettingsManager igSettings, ImportImplementationGuide importImplementationGuide)
        {
            var currentCategories = igSettings.GetSetting(IGSettingsManager.SettingProperty.Categories);

            if (importImplementationGuide.Category == null || importImplementationGuide.Category.Count == 0)
            {
                if (!string.IsNullOrEmpty(currentCategories))
                {
                    igSettings.SaveSetting(IGSettingsManager.SettingProperty.Categories, string.Empty);
                }

                return;
            }

            var categories       = importImplementationGuide.Category.Select(y => y.name.Replace(',', '-'));
            var categoriesString = String.Join(",", categories);

            if (currentCategories != categoriesString)
            {
                igSettings.SaveSetting(IGSettingsManager.SettingProperty.Categories, categoriesString);
            }
        }
コード例 #9
0
        private void UpdateProperties(ImplementationGuide implementationGuide, ImplementationGuideType igType, ImportImplementationGuide importImplementationGuide)
        {
            var importIgStatus = GetImportStatus(importImplementationGuide);

            if (implementationGuide.Organization == null)
            {
                implementationGuide.Organization = CheckPoint.Instance.GetUser(this.tdb).Organization;
            }

            if (implementationGuide.Name != importImplementationGuide.name)
            {
                implementationGuide.Name = importImplementationGuide.name;
            }

            if (implementationGuide.ImplementationGuideType != igType)
            {
                implementationGuide.ImplementationGuideType = igType;
            }

            if (implementationGuide.Version != importImplementationGuide.version)
            {
                implementationGuide.Version = importImplementationGuide.version;
            }

            if (implementationGuide.DisplayName != importImplementationGuide.displayName)
            {
                implementationGuide.DisplayName = importImplementationGuide.displayName;
            }

            if (implementationGuide.WebReadmeOverview != importImplementationGuide.WebReadmeOverview)
            {
                implementationGuide.WebReadmeOverview = importImplementationGuide.WebReadmeOverview;
            }

            if (implementationGuide.WebDisplayName != importImplementationGuide.webDisplayName)
            {
                implementationGuide.WebDisplayName = importImplementationGuide.webDisplayName;
            }

            if (implementationGuide.WebDescription != importImplementationGuide.WebDescription)
            {
                implementationGuide.WebDescription = importImplementationGuide.WebDescription;
            }

            if (implementationGuide.PublishStatus != importIgStatus)
            {
                implementationGuide.PublishStatus = importIgStatus;
            }
        }
コード例 #10
0
        public static ExportImplementationGuide Export(this ImplementationGuide ig, IObjectRepository tdb, IGSettingsManager igSettings)
        {
            ExportImplementationGuide exportIg = new ExportImplementationGuide()
            {
                name              = ig.Name,
                type              = ig.ImplementationGuideType.Name,
                version           = ig.Version != null ? ig.Version.Value : 1,
                status            = ig.GetExportStatus(),
                displayName       = ig.DisplayName,
                webDisplayName    = ig.WebDisplayName,
                WebDescription    = ig.WebDescription,
                WebReadmeOverview = ig.WebReadmeOverview,
                Volume1           = null,
                PreviousVersion   = null    // Needed so that the generated model doesn't produce an empty <PreviousVersion> element when serialized
            };

            if (ig.PreviousVersionImplementationGuideId != null)
            {
                var previousVersionIg = tdb.ImplementationGuides.Single(y => y.Id == ig.PreviousVersionImplementationGuideId);
                exportIg.PreviousVersion = new Shared.ImportExport.Model.TrifoliaImplementationGuidePreviousVersion()
                {
                    name   = previousVersionIg.Name,
                    number = previousVersionIg.Version != null ? previousVersionIg.Version.Value : 1
                };
            }

            exportIg.CardinalityDisplay.Add(new Shared.ImportExport.Model.TrifoliaImplementationGuideCardinalityDisplay()
            {
                cardinality = Shared.ImportExport.Model.CardinalityTypes.Zero,
                display     = igSettings.GetSetting(IGSettingsManager.SettingProperty.CardinalityZero)
            });
            exportIg.CardinalityDisplay.Add(new Shared.ImportExport.Model.TrifoliaImplementationGuideCardinalityDisplay()
            {
                cardinality = Shared.ImportExport.Model.CardinalityTypes.ZeroOrOne,
                display     = igSettings.GetSetting(IGSettingsManager.SettingProperty.CardinalityZeroToOne)
            });
            exportIg.CardinalityDisplay.Add(new Shared.ImportExport.Model.TrifoliaImplementationGuideCardinalityDisplay()
            {
                cardinality = Shared.ImportExport.Model.CardinalityTypes.ZeroToMany,
                display     = igSettings.GetSetting(IGSettingsManager.SettingProperty.CardinalityZeroOrMore)
            });
            exportIg.CardinalityDisplay.Add(new Shared.ImportExport.Model.TrifoliaImplementationGuideCardinalityDisplay()
            {
                cardinality = Shared.ImportExport.Model.CardinalityTypes.One,
                display     = igSettings.GetSetting(IGSettingsManager.SettingProperty.CardinalityOneToOne)
            });
            exportIg.CardinalityDisplay.Add(new Shared.ImportExport.Model.TrifoliaImplementationGuideCardinalityDisplay()
            {
                cardinality = Shared.ImportExport.Model.CardinalityTypes.OneToMany,
                display     = igSettings.GetSetting(IGSettingsManager.SettingProperty.CardinalityAtLeastOne)
            });

            exportIg.CustomSchematron = (from p in ig.SchematronPatterns
                                         select new Shared.ImportExport.Model.TrifoliaImplementationGuideCustomSchematron()
            {
                phase = p.Phase,
                patternId = p.PatternId,
                Rule = p.PatternContent
            }).ToList();

            exportIg.CustomTemplateType = (from t in ig.TemplateTypes
                                           select new Shared.ImportExport.Model.TrifoliaImplementationGuideCustomTemplateType()
            {
                templateTypeName = t.TemplateType.Name,
                CustomName = t.Name,
                Description = t.DetailsText
            }).ToList();

            var volume1Html = igSettings.GetSetting(IGSettingsManager.SettingProperty.Volume1Html);

            if (!string.IsNullOrEmpty(volume1Html) || ig.Sections.Count > 0)
            {
                exportIg.Volume1 = new Shared.ImportExport.Model.TrifoliaImplementationGuideVolume1();
            }

            if (!string.IsNullOrEmpty(volume1Html))
            {
                exportIg.Volume1.Items.Add(volume1Html);
            }

            if (ig.Sections.Count > 0)
            {
                exportIg.Volume1.Items = (from s in ig.Sections.OrderBy(y => y.Order)
                                          select new ExportImplementationGuideSection()
                {
                    Heading = new Shared.ImportExport.Model.TrifoliaImplementationGuideVolume1SectionHeading()
                    {
                        Title = s.Heading,
                        Level = s.Level
                    },
                    Content = s.Content
                }).ToList <object>();
            }

            var categoriesString = igSettings.GetSetting(IGSettingsManager.SettingProperty.Categories);
            var categories       = categoriesString.Split(',');

            exportIg.Category = (from c in categories
                                 select new ExportImplementationGuideCategory()
            {
                name = c
            }).ToList();

            return(exportIg);
        }
コード例 #11
0
        private void UpdateProperties(ImplementationGuide implementationGuide, ImplementationGuideType igType, ImportImplementationGuide importImplementationGuide)
        {
            var importIgStatus = GetImportStatus(importImplementationGuide);
            var organization   = !string.IsNullOrEmpty(importImplementationGuide.organizationName) ? this.tdb.Organizations.SingleOrDefault(y => y.Name.ToLower() == importImplementationGuide.organizationName.ToLower()) : null;

            if (implementationGuide.Organization != organization)
            {
                implementationGuide.Organization = organization;
            }

            if (implementationGuide.Name != importImplementationGuide.name)
            {
                implementationGuide.Name = importImplementationGuide.name;
            }

            if (implementationGuide.ImplementationGuideType != igType)
            {
                implementationGuide.ImplementationGuideType = igType;
            }

            if (implementationGuide.Version != importImplementationGuide.version)
            {
                implementationGuide.Version = importImplementationGuide.version;
            }

            if (implementationGuide.DisplayName != importImplementationGuide.displayName)
            {
                implementationGuide.DisplayName = importImplementationGuide.displayName;
            }

            if (implementationGuide.WebReadmeOverview != importImplementationGuide.WebReadmeOverview)
            {
                implementationGuide.WebReadmeOverview = importImplementationGuide.WebReadmeOverview;
            }

            if (implementationGuide.WebDisplayName != importImplementationGuide.webDisplayName)
            {
                implementationGuide.WebDisplayName = importImplementationGuide.webDisplayName;
            }

            if (implementationGuide.WebDescription != importImplementationGuide.WebDescription)
            {
                implementationGuide.WebDescription = importImplementationGuide.WebDescription;
            }

            if (implementationGuide.PublishStatus != importIgStatus)
            {
                implementationGuide.PublishStatus = importIgStatus;
            }
        }