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;
                }
            }
        }
Beispiel #2
0
        public ActionResult NewVersion(int implementationGuideId)
        {
            if (!CheckPoint.Instance.GrantEditImplementationGuide(implementationGuideId))
            {
                throw new AuthorizationException("You do not have permissions to edit this implementation guide!");
            }

            if (this.tdb.ImplementationGuides.Count(y => y.PreviousVersionImplementationGuideId == implementationGuideId) > 0)
            {
                throw new Exception("This implementation guide already has a new version.");
            }

            ImplementationGuide ig = this.tdb.ImplementationGuides.Single(y => y.Id == implementationGuideId);

            if (!ig.IsPublished())
            {
                throw new Exception("Cannot version an implementation guide that has not been published");
            }

            ImplementationGuide newIg = new ImplementationGuide()
            {
                Name = ig.Name,
                ImplementationGuideType = ig.ImplementationGuideType,
                Organization            = ig.Organization,
                PreviousVersionImplementationGuideId = ig.Id,
                PublishStatus     = PublishStatus.GetDraftStatus(this.tdb),
                Version           = ig.Version + 1,
                WebReadmeOverview = ig.WebReadmeOverview,
                WebDescription    = ig.WebDescription,
                Identifier        = ig.Identifier
            };

            // Copy permissions
            foreach (var cPermission in ig.Permissions)
            {
                ImplementationGuidePermission newPermission = new ImplementationGuidePermission()
                {
                    GroupId    = cPermission.GroupId,
                    UserId     = cPermission.UserId,
                    Type       = cPermission.Type,
                    Permission = cPermission.Permission
                };
                newIg.Permissions.Add(newPermission);
            }

            // Copy settings
            foreach (var cSetting in ig.Settings)
            {
                ImplementationGuideSetting newSetting = new ImplementationGuideSetting()
                {
                    PropertyName  = cSetting.PropertyName,
                    PropertyValue = cSetting.PropertyValue
                };
                newIg.Settings.Add(newSetting);
            }

            // Copy IG Template Types
            foreach (var cTemplateType in ig.TemplateTypes)
            {
                ImplementationGuideTemplateType newTemplateType = new ImplementationGuideTemplateType()
                {
                    TemplateTypeId = cTemplateType.TemplateTypeId,
                    Name           = cTemplateType.Name,
                    DetailsText    = cTemplateType.DetailsText
                };
                newIg.TemplateTypes.Add(newTemplateType);
            }

            // Copy volume 1
            foreach (var cSection in ig.Sections)
            {
                var newSection = new ImplementationGuideSection()
                {
                    Content = cSection.Content,
                    Heading = cSection.Heading,
                    Level   = cSection.Level,
                    Order   = cSection.Order
                };
                newIg.Sections.Add(newSection);
            }

            // Copy custom schematron
            foreach (var cSchematron in ig.SchematronPatterns)
            {
                var newSchematron = new ImplementationGuideSchematronPattern()
                {
                    PatternId      = cSchematron.PatternId,
                    PatternContent = cSchematron.PatternContent,
                    Phase          = cSchematron.Phase
                };
                newIg.SchematronPatterns.Add(newSchematron);
            }

            this.tdb.ImplementationGuides.Add(newIg);
            this.tdb.SaveChanges();

            IGSettingsManager igSettings    = new IGSettingsManager(this.tdb, implementationGuideId);
            IGSettingsManager newIgSettings = new IGSettingsManager(this.tdb, newIg.Id);

            var cardinalityAtLeastOne            = igSettings.GetSetting(IGSettingsManager.SettingProperty.CardinalityAtLeastOne);
            var cardinalityOneToOne              = igSettings.GetSetting(IGSettingsManager.SettingProperty.CardinalityOneToOne);
            var cardinalityZero                  = igSettings.GetSetting(IGSettingsManager.SettingProperty.CardinalityZero);
            var cardinalityZeroOrMore            = igSettings.GetSetting(IGSettingsManager.SettingProperty.CardinalityZeroOrMore);
            var cardinalityZeroToOne             = igSettings.GetSetting(IGSettingsManager.SettingProperty.CardinalityZeroToOne);
            var categories                       = igSettings.GetSetting(IGSettingsManager.SettingProperty.Categories);
            var useConsolidationConstraintFormat = igSettings.GetBoolSetting(IGSettingsManager.SettingProperty.UseConsolidatedConstraintFormat);
            var volume1Html                      = igSettings.GetSetting(IGSettingsManager.SettingProperty.Volume1Html);

            if (!string.IsNullOrEmpty(cardinalityAtLeastOne))
            {
                newIgSettings.SaveSetting(IGSettingsManager.SettingProperty.CardinalityAtLeastOne, cardinalityAtLeastOne);
            }

            if (!string.IsNullOrEmpty(cardinalityOneToOne))
            {
                newIgSettings.SaveSetting(IGSettingsManager.SettingProperty.CardinalityZero, cardinalityZero);
            }

            if (!string.IsNullOrEmpty(cardinalityZeroOrMore))
            {
                newIgSettings.SaveSetting(IGSettingsManager.SettingProperty.CardinalityZeroOrMore, cardinalityZeroOrMore);
            }

            if (!string.IsNullOrEmpty(cardinalityZeroToOne))
            {
                newIgSettings.SaveSetting(IGSettingsManager.SettingProperty.CardinalityZeroToOne, cardinalityZeroToOne);
            }

            if (!string.IsNullOrEmpty(categories))
            {
                newIgSettings.SaveSetting(IGSettingsManager.SettingProperty.Categories, categories);
            }

            if (!string.IsNullOrEmpty(volume1Html))
            {
                newIgSettings.SaveSetting(IGSettingsManager.SettingProperty.Volume1Html, volume1Html);
            }

            newIgSettings.SaveBoolSetting(IGSettingsManager.SettingProperty.UseConsolidatedConstraintFormat, useConsolidationConstraintFormat);

            return(Json(new { ImplementationGuideId = newIg.Id }));
        }