public void CompareLeftNull()
        {
            SemanticVersion right = new SemanticVersion(1, 0, 0);

            VersionComparer comparer = new VersionComparer();

            Assert.Equal(-1, comparer.Compare(null, right));
        }
        public void CompareRightNull()
        {
            SemanticVersion left = new SemanticVersion(1, 0, 0);

            VersionComparer comparer = new VersionComparer();

            Assert.Equal(1, comparer.Compare(left, null));
        }
        public void ReferenceEqualsRightNull()
        {
            SemanticVersion version = new SemanticVersion(1, 0, 0);

            VersionComparer comparer = new VersionComparer();

            Assert.False(comparer.Equals(version, null));
        }
        public void ReferenceEquals()
        {
            SemanticVersion version = new SemanticVersion(1, 0, 0);

            VersionComparer comparer = new VersionComparer();

            Assert.True(comparer.Equals(version, version));
        }
        public void Compare()
        {
            SemanticVersion left = new SemanticVersion(1, 0, 0);
            SemanticVersion right = new SemanticVersion(1, 0, 0);

            VersionComparer comparer = new VersionComparer();

            Assert.Equal(0,comparer.Compare(left, right));
        }
        public void GetHashCodeSame()
        {
            SemanticVersion left = new SemanticVersion(1, 0, 0, "foo", "bar");
            SemanticVersion right = new SemanticVersion(1, 0, 0, "foo", "bar");

            VersionComparer comparer = new VersionComparer();

            Assert.Equal(comparer.GetHashCode(left), comparer.GetHashCode(right));
        }
 public void CreateVersionComparer()
 {
     var array=new VersionComparer[100];
     for (int i = 0; i < 100; i++)
     {
         array[i]=new VersionComparer();
         array[i].Compare("a", "a");
     }
 }
Esempio n. 8
0
        public void ComparePrereleaseRelease()
        {
            SemanticVersion left  = new SemanticVersion(1, 0, 0, "beta");
            SemanticVersion right = new SemanticVersion(1, 0, 0);

            VersionComparer comparer = new VersionComparer();

            // "When major, minor, and patch are equal, a pre-release
            // version has lower precedence than a normal version."
            Assert.Equal(-1, comparer.Compare(left, right));
        }
Esempio n. 9
0
        public void ComparePrereleaseFieldNumber()
        {
            SemanticVersion left  = new SemanticVersion(1, 0, 0, "alpha");
            SemanticVersion right = new SemanticVersion(1, 0, 0, "alpha.1");

            VersionComparer comparer = new VersionComparer();

            // "A larger set of pre-release fields has a higher
            // precedence than a smaller set, if all of the preceding
            // identifiers are equal."
            Assert.Equal(-1, comparer.Compare(left, right));
        }
Esempio n. 10
0
        public RulesCheck(string[] patterns, string version, VersionComparer versionComparison)
        {
            _version  = new Version(version);
            _patterns = patterns;

            if (patterns.Contains("*"))
            {
                _ex = headers => true;
            }

            //Otherwise we need to make an expression for each pattern
        }
Esempio n. 11
0
        public ActionResult ViewIgChanges(int id)
        {
            if (!CheckPoint.Instance.GrantViewImplementationGuide(id))
            {
                throw new AuthorizationException("You do not have access to view this implementation guide's changes.");
            }

            ImplementationGuide lGuide       = this.tdb.ImplementationGuides.Single(ig => ig.Id == id);
            ViewChangesModel    lModel       = new ViewChangesModel();
            IGSettingsManager   igSettings   = new IGSettingsManager(this.tdb, lGuide.Id);
            IIGTypePlugin       igTypePlugin = lGuide.ImplementationGuideType.GetPlugin();
            VersionComparer     lComparer    = VersionComparer.CreateComparer(tdb, igTypePlugin, igSettings);

            lModel.IgName = lGuide.Name;

            // Modified templates
            foreach (Template lNewTemplate in lGuide.ChildTemplates.Where(t => t.PreviousVersionTemplateId.HasValue))
            {
                Template         lPreviousVersion = this.tdb.Templates.Single(t => t.Id == lNewTemplate.PreviousVersionTemplateId.Value);
                ComparisonResult lResult          = lComparer.Compare(lPreviousVersion, lNewTemplate);

                lModel.TemplateDifferences.Add(
                    new DifferenceModel(lResult)
                {
                    Id                   = lNewTemplate.Id,
                    IsAdded              = false,
                    TemplateName         = lNewTemplate.Name,
                    PreviousTemplateName = string.Format("{0} ({1})", lPreviousVersion.Name, lPreviousVersion.Oid),
                    PreviousTemplateId   = lPreviousVersion.Id,
                    Difference           = lResult,
                    InlineConstraints    = GetInlineConstraintChanges(lResult)
                });
            }

            // Added templates
            foreach (Template lNewTemplate in lGuide.ChildTemplates.Where(t => !t.PreviousVersionTemplateId.HasValue))
            {
                ComparisonResult lResult = lComparer.Compare(new Template(), lNewTemplate);

                lModel.TemplateDifferences.Add(
                    new DifferenceModel(lResult)
                {
                    Id           = lNewTemplate.Id,
                    IsAdded      = true,
                    TemplateName = lNewTemplate.Name
                });
            }

            return(View(lModel));
        }
Esempio n. 12
0
        private static IEnumerable <IVsixPackage> _OnlyMostRecentVersions(IEnumerable <IVsixPackage> packages, Logger log)
        {
            var groups          = packages.GroupBy(pkg => pkg.Id);
            var versionComparer = new VersionComparer();

            foreach (var grp in groups)
            {
                var package = grp.OrderByDescending(pkg => pkg.Version, versionComparer).First();
                if (grp.Count() > 1)
                {
                    log.Info($"Multiple versions of {grp.Key} detected, using version {package.Version}");
                }
                yield return(package);
            }
        }
        protected override bool GreaterOrEquals(string version, string benchmark)
        {
            version   = version.ToLower().Trim();
            benchmark = benchmark.ToLower().Trim();

            if (version.Contains("ie") && benchmark.Contains("edge"))
            {
                return(true);
            }

            version   = version.Replace("ie", string.Empty).Replace("edge", string.Empty).Trim();
            benchmark = benchmark.Replace("ie", string.Empty).Replace("edge", string.Empty).Trim();

            return(VersionComparer.GreaterEquals(version, benchmark));
        }
Esempio n. 14
0
        public static IEnumerable <IVsixPackage> OnlyMostRecentVersions(this IEnumerable <IVsixPackage> packages)
        {
            var groups          = packages.GroupBy(pkg => pkg.Id);
            var versionComparer = new VersionComparer();

            foreach (var grp in groups)
            {
                if (grp.Count() > 1)
                {
                    yield return(grp.OrderByDescending(pkg => pkg.Version, versionComparer).First());
                }
                else
                {
                    yield return(grp.First());
                }
            }
        }
Esempio n. 15
0
        private static bool EqualsOneWay(VersionComparer comparer, string version1, string version2)
        {
            // Arrange
            var     a = Version.Parse(version1);
            var     b = Version.Parse(version2);
            Version c = Version.Parse(version1);
            Version d = Version.Parse(version2);

            // Act
            var match = Compare(comparer, version1, version2) == 0;

            match &= comparer.Equals(a, b);
            match &= comparer.Equals(a, d);
            match &= comparer.Equals(c, d);
            match &= comparer.Equals(c, b);

            return(match);
        }
Esempio n. 16
0
        private bool PackageIdentityEquals(PackageIdentity x, PackageIdentity y)
        {
            if (ReferenceEquals(x, y))
            {
                return(true);
            }

            if (ReferenceEquals(x, null) ||
                ReferenceEquals(y, null))
            {
                return(false);
            }

            var versionComparer = new VersionComparer(VersionComparison.Default);

            return(versionComparer.Equals(x.Version, y.Version) &&
                   StringComparer.OrdinalIgnoreCase.Equals(x.Id, y.Id));
        }
Esempio n. 17
0
        private static int CompareOneWay(VersionComparer comparer, string version1, string version2)
        {
            // Arrange
            var a = Version.Parse(version1);
            var b = Version.Parse(version2);
            var c = Version.Parse(version1);
            var d = Version.Parse(version2);

            // Act
            var results = new List <int>();

            results.Add(comparer.Compare(a, b));
            results.Add(comparer.Compare(a, d));
            results.Add(comparer.Compare(c, b));
            results.Add(comparer.Compare(c, d));

            // Assert
            Assert.True(results.FindAll(x => x == results[0]).Count == results.Count);

            return(results[0]);
        }
Esempio n. 18
0
        /// <summary>
        /// Checks if updates are available for the passed mod.
        /// </summary>
        /// <param name="modInfo">The ModInfos of the mod to check for updates.</param>
        /// <param name="newModInfo">A reference to an empty ModInfo to write the updated ModInfos to.</param>
        /// <returns>True if there is an update, otherwise false.</returns>
        public bool CheckForUpdates(ModInfo modInfo, ref ModInfo newModInfo)
        {
            newModInfo = GetModInfo(modInfo.ModURL);
            if (string.IsNullOrEmpty(modInfo.Version) && !string.IsNullOrEmpty(newModInfo.Version))
            {
                return(true);
            }
            else if (!string.IsNullOrEmpty(modInfo.Version) && !string.IsNullOrEmpty(newModInfo.Version))
            {
                return(VersionComparer.CompareVersions(modInfo.Version, newModInfo.Version) == VersionComparer.Result.AisSmallerB);
            }
            else if (string.IsNullOrEmpty(modInfo.CreationDate) && !string.IsNullOrEmpty(newModInfo.CreationDate))
            {
                return(true);
            }
            else if (!string.IsNullOrEmpty(modInfo.CreationDate) && !string.IsNullOrEmpty(newModInfo.CreationDate))
            {
                return(modInfo.CreationDateAsDateTime < newModInfo.CreationDateAsDateTime);
            }

            return(false);
        }
Esempio n. 19
0
        /// <summary>
        /// -1 if the client needs to upgrade (supported caps are lower)
        /// 0 if the client and feed can work together.
        /// 1 if the feed requires an upgrade due to being incompatible with the newer client
        /// </summary>
        private static int CompareCapabilities(List <FeedCapability> supportedCaps, List <FeedCapability> requiredCaps)
        {
            foreach (var cap in requiredCaps)
            {
                var supportedCap = supportedCaps.FirstOrDefault(e => StringComparer.OrdinalIgnoreCase.Equals(e.Name, cap.Name));

                if (supportedCap == null)
                {
                    // The feed is newer
                    return(-1);
                }

                // Versions must be an exact match
                var result = VersionComparer.Compare(supportedCap.Version, cap.Version, VersionComparison.Version);

                if (result != 0)
                {
                    return(result);
                }
            }

            return(0);
        }
Esempio n. 20
0
        /// <summary>
        /// If this IG is a new version of a previous IG, scan the templates for new versions and add them as an appendix
        /// </summary>
        private void LoadChangesAppendix()
        {
            List <IGDifferenceViewModel> lDifferences = new List <IGDifferenceViewModel>();

            if (this.implementationGuide.PreviousVersionImplementationGuideId.HasValue)
            {
                VersionComparer lComparer          = VersionComparer.CreateComparer(_tdb, this.igTypePlugin, this.igSettings);
                var             versionedTemplates = this.templates.Where(y => y.OwningImplementationGuideId == this.implementationGuide.Id);

                foreach (Template lChildTemplate in versionedTemplates)
                {
                    IGDifferenceViewModel lModel = new IGDifferenceViewModel(lChildTemplate);

                    if (lChildTemplate.PreviousVersionTemplateId.HasValue)
                    {
                        Template lPreviousTemplate = _tdb.Templates.Single(t => t.Id == lChildTemplate.PreviousVersionTemplateId);
                        lModel.Difference = lComparer.Compare(lPreviousTemplate, lChildTemplate);
                        lDifferences.Add(lModel);
                    }
                }

                this.LoadDifferencesAsAppendix(this.implementationGuide.Name, lDifferences);
            }
        }
Esempio n. 21
0
        public async Task <PackageVersionResponse> Handle(PackageVersionRequest request)
        {
            var projectPath = request.ProjectPath;

            if (request.ProjectPath.EndsWith(".json"))
            {
                projectPath = Path.GetDirectoryName(projectPath);
            }

            if (!string.IsNullOrWhiteSpace(projectPath))
            {
                if (request.Sources == null)
                {
                    request.Sources = Enumerable.Empty <string>();
                }

                var token = CancellationToken.None;

                var filter = new SearchFilter
                {
                    IncludePrerelease = request.IncludePrerelease
                };
                var foundVersions      = new List <NuGetVersion>();
                var repositoryProvider = new OmniSharpSourceRepositoryProvider(projectPath);
                var repos = repositoryProvider.GetRepositories().ToArray();
                if (request.Sources.Any())
                {
                    // Reduce to just the sources we requested
                    repos = repos.Join(request.Sources, x => x.PackageSource.Source, x => x, (x, y) => x).ToArray();
                }
                foreach (var repo in repos)
                {
                    // TODO: Swap when bug is fixed
                    // https://github.com/NuGet/NuGet3/pull/90

                    /*
                     * var resource = await repo.GetResourceAsync<FindPackageByIdResource>();
                     * if (resource != null)
                     * {
                     *  resource.Logger = NullLogger.Instance;
                     *  resource.NoCache = true;
                     *  foundVersions.AddRange(await resource.GetAllVersionsAsync(request.Id, token));
                     * }*/
                    var resource = await repo.GetResourceAsync <SimpleSearchResource>();

                    if (resource != null)
                    {
                        var result = await resource.Search(request.Id, filter, 0, 50, token);

                        var package = result.FirstOrDefault(metadata => metadata.Identity.Id == request.Id);
                        if (package != null)
                        {
                            foundVersions.AddRange(package.AllVersions);
                        }
                    }
                }

                var comparer = new VersionComparer();
                var versions = Enumerable.Distinct <NuGetVersion>(foundVersions, comparer)
                               .OrderByDescending(version => version, comparer)
                               .Select(version => version.ToNormalizedString());

                return(new PackageVersionResponse()
                {
                    Versions = versions
                });
            }

            return(new PackageVersionResponse());
        }
        public void VersionComparerTest1()
        {
            Template parentTemplate = this.mockRepo.GenerateTemplate("3.2.1.4.3", this.documentType, "Parent Template", this.ig);

            Template aTemplate = this.mockRepo.GenerateTemplate("1.2.3.4", this.documentType, "Test Template", this.ig, description: "Test Description 1");

            aTemplate.IsOpen = false;
            this.mockRepo.GenerateConstraint(aTemplate, null, null, "id", "SHALL", "1..1", number: 1);
            this.mockRepo.GenerateConstraint(aTemplate, null, null, "effectiveTime", "SHALL", "1..1", number: 2);
            this.mockRepo.GenerateConstraint(aTemplate, null, null, "entryRelationship", "SHALL", "1..1", number: 3);

            Template bTemplate = this.mockRepo.GenerateTemplate("4.3.2.1", this.documentType, "New Test Template", this.ig, description: "Test Description 2", impliedTemplate: parentTemplate);

            bTemplate.IsOpen = true;
            this.mockRepo.GenerateConstraint(bTemplate, null, null, "id", "SHALL", "1..*", number: 1);
            this.mockRepo.GenerateConstraint(bTemplate, null, null, "entryRelationship", "SHALL", "1..1", number: 3);
            this.mockRepo.GenerateConstraint(bTemplate, null, null, "author", "SHALL", "1..1", number: 4);

            VersionComparer  comparer = VersionComparer.CreateComparer(mockRepo);
            ComparisonResult compared = comparer.Compare(aTemplate, bTemplate);

            // Test template changes
            Assert.AreEqual(5, compared.ChangedFields.Count, "Expected to find 5 template fields changed");

            var changedName = compared.ChangedFields.Single(y => y.Name == "Name");

            Assert.AreEqual(aTemplate.Name, changedName.Old);
            Assert.AreEqual(bTemplate.Name, changedName.New);

            var changedDescription = compared.ChangedFields.Single(y => y.Name == "Description");

            Assert.AreEqual(aTemplate.Description, changedDescription.Old);
            Assert.AreEqual(bTemplate.Description, changedDescription.New);

            var changedOid = compared.ChangedFields.Single(y => y.Name == "Oid");

            Assert.AreEqual(aTemplate.Oid, changedOid.Old);
            Assert.AreEqual(bTemplate.Oid, changedOid.New);

            var changedImpliedTemplate = compared.ChangedFields.Single(y => y.Name == "Implied Template");

            Assert.AreEqual("", changedImpliedTemplate.Old);
            Assert.AreEqual("Parent Template (3.2.1.4.3)", changedImpliedTemplate.New);

            var changedIsOpen = compared.ChangedFields.Single(y => y.Name == "Open/Closed");

            Assert.AreEqual("Closed", changedIsOpen.Old);
            Assert.AreEqual("Open", changedIsOpen.New);

            // Test constraint changes
            Assert.AreEqual(4, compared.ChangedConstraints.Count, "Expected to find 3 changed constraints");

            var removedConstraint = compared.ChangedConstraints.Single(y => y.Type == CompareStatuses.Removed);

            Assert.AreEqual("1-2", removedConstraint.Number);
            Assert.AreEqual(0, removedConstraint.ChangedFields.Count);
            Assert.IsFalse(string.IsNullOrEmpty(removedConstraint.OldNarrative));

            var addedConstraint = compared.ChangedConstraints.Single(y => y.Type == CompareStatuses.Added);

            Assert.AreEqual("1-4", addedConstraint.Number);
            Assert.AreEqual(0, addedConstraint.ChangedFields.Count);
            Assert.IsFalse(string.IsNullOrEmpty(addedConstraint.NewNarrative));

            var changedConstraint = compared.ChangedConstraints.Single(y => y.Type == CompareStatuses.Modified);

            Assert.AreEqual("1-1", changedConstraint.Number);
            Assert.IsFalse(string.IsNullOrEmpty(changedConstraint.NewNarrative));
            Assert.IsFalse(string.IsNullOrEmpty(changedConstraint.OldNarrative));
            Assert.AreNotEqual(changedConstraint.OldNarrative, changedConstraint.NewNarrative);
            Assert.AreEqual(1, changedConstraint.ChangedFields.Count);
            Assert.IsNotNull(changedConstraint.ChangedFields.SingleOrDefault(y => y.Name == "Cardinality"));

            var unchangedConstraint = compared.ChangedConstraints.Single(y => y.Type == CompareStatuses.Unchanged);

            Assert.AreEqual("1-3", unchangedConstraint.Number);
        }
Esempio n. 23
0
        // A versions file is of the form https://raw.githubusercontent.com/dotnet/versions/master/build-info/dotnet/corefx/release/1.0.0/LKG_Packages.txt
        private Dictionary <string, PackageItem> GatherPackageInformationFromVersionsFile(Uri uri, VersionComparer comparer = null)
        {
            Dictionary <string, PackageItem> packageItems = new Dictionary <string, PackageItem>();

            try
            {
                using (var streamReader = new StreamReader(GetStream(uri).Result))
                {
                    while (!streamReader.EndOfStream)
                    {
                        string line = streamReader.ReadLine();
                        if (!string.IsNullOrWhiteSpace(line))
                        {
                            string[]    packageVersionTokens = line.Split(' ');
                            PackageItem packageItem          = CreatePackageItem(packageVersionTokens[0], packageVersionTokens[1]);
                            AddPackageItemToDictionary(packageItems, packageItem);
                        }
                    }
                }
            }
            catch (AggregateException)
            {
                Log.LogError("Error: Unable to open '{0}', either the file does not exist locally or there is a network issue accessing that URI.", uri.ToString());
                throw;
            }
            return(packageItems);
        }
Esempio n. 24
0
        public void CompareBothNull()
        {
            VersionComparer comparer = new VersionComparer();

            Assert.Equal(0, comparer.Compare(null, null));
        }
Esempio n. 25
0
 public async Task VersionParseSucceeds(string versionString)
 {
     System.Collections.Generic.List <string>?result = VersionComparer.Parse(versionString);
     Assert.AreEqual(string.Join("", result), versionString);
 }
Esempio n. 26
0
        public void Compare_min()
        {
            //arrange
            string stEtalon = "15.2.9";

            string stMajorMin = "14.2.9";
            string stMajorMax = "16.2.9";

            string stMinorMin = "15.1.9";
            string stMinorMax = "16.1.9";

            string stBuildMin = "15.2.8";
            string stBuildMax = "15.2.10";

            VersionComparer comp = new VersionComparer();

            //act
            int majMinRes = comp.Compare(stEtalon, stMajorMin);
            int majMaxRes = comp.Compare(stEtalon, stMajorMax);

            int minMinRes = comp.Compare(stEtalon, stMinorMin);
            int mimMaxRes = comp.Compare(stEtalon, stMinorMax);

            int buildMinRes = comp.Compare(stEtalon, stBuildMin);
            int buildMaxRes = comp.Compare(stBuildMin, stBuildMax);

            //assert
            Assert.AreEqual(-1, majMinRes);
            Assert.AreEqual(1, majMaxRes);
            Assert.AreEqual(-1, minMinRes);
            Assert.AreEqual(1, mimMaxRes);
            Assert.AreEqual(-1, buildMinRes);
            Assert.AreEqual(1, buildMaxRes);
        }
        public void CompareBothNull()
        {
            VersionComparer comparer = new VersionComparer();

            Assert.Equal(0, comparer.Compare(null, null));
        }
        /// <summary>
        /// Получение детальной информации об обновлениях шаблона из xml
        /// </summary>
        /// <param name="prevVersion">Текущая версия</param>
        /// <param name="updatesInFolder">Список обновлений, которые находятся в папке</param>
        /// <returns>Перечисление названий обновлений, которые необходимо поставить, с учётом текущей версии</returns>
        private IEnumerable <string> GetInfoListUpdates(string prevVersion, IEnumerable <string> updatesInFolder)
        {
            _log.Trace("Get updates information from xml");

            var templateInfo = new TemplateDetailInformation();

            templateInfo.Updates = _templateDetail.Updates;

            var currentVersion = prevVersion;

            var result = new List <string>();

            try
            {
                while (true)
                {
                    // получаем версии обновлений, для которых используемая версия отличается от текущей (из xml)
                    var updateVersions = templateInfo.Updates.Where(upd =>
                                                                    upd.ApplyVersions.Any(version => VersionComparer.CompareSt(version, currentVersion) == 0)).
                                         Select(upd => upd.UpdateVersion);

                    _log.Info("Updates version {0}", updateVersions);

                    // далее из полученного выбираем ту версию, которая отличается от версий обновлений в папке (самую последнюю)
                    var updVersion = updateVersions.Where(version => updatesInFolder.Any(versionInFile =>
                                                                                         VersionComparer.CompareSt(version, versionInFile) == 0)).OrderByDescending(version =>
                                                                                                                                                                    version, new VersionComparer()).FirstOrDefault();

                    _log.Info("updVersion {0}", updVersion);

                    if (!string.IsNullOrEmpty(updVersion))
                    {
                        currentVersion = updVersion;

                        // и если всё хорошо, то добавляем её к списку требуемых к загрузке обновлений
                        result.Add(updVersion);
                    }
                    else
                    {
                        break;
                    }
                }

                _log.Trace("Getting updates information from xml has been completed");
            }
            catch (Exception ex)
            {
                _log.Error("Error during getting detail information from xml file: {0}", ex.Message);
            }

            return(result);
        }
        // A versions file is of the form https://github.com/dotnet/versions/blob/master/build-info/dotnet/corefx/master/Latest_Packages.txt
        private Dictionary <string, PackageItem> GatherPackageInformationFromVersionsFile(string versionsFile, VersionComparer comparer = null)
        {
            Dictionary <string, PackageItem> packageItems = new Dictionary <string, PackageItem>();

            if (!File.Exists(versionsFile))
            {
                Log.LogError("Specified versions file ({0}) does not exist.", versionsFile);
            }
            var lines = File.ReadAllLines(versionsFile);

            foreach (string line in lines)
            {
                if (!string.IsNullOrWhiteSpace(line))
                {
                    string []   packageVersionTokens = line.Split(' ');
                    PackageItem packageItem          = CreatePackageItem(packageVersionTokens[0], packageVersionTokens[1]);
                    AddPackageItemToDictionary(packageItems, packageItem);
                }
            }
            return(packageItems);
        }
 /// <summary>
 /// Checks if updates are available for the passed mod.
 /// </summary>
 /// <param name="modInfo">The ModInfos of the mod to check for updates.</param>
 /// <param name="newModInfo">A reference to an empty ModInfo to write the updated ModInfos to.</param>
 /// <returns>True if there is an update, otherwise false.</returns>
 public bool CheckForUpdates(ModInfo modInfo, ref ModInfo newModInfo)
 {
     newModInfo = GetModInfo(modInfo.ModURL);
     return(VersionComparer.CompareVersions(modInfo.Version, newModInfo.Version) == VersionComparer.Result.AisSmallerB);
 }
Esempio n. 31
0
 protected override bool AppliesToVersion(Game game)
 => VersionComparer.GreaterThan(GameVersion, ApplicationVersion.FromString("e1.0.0"));
 protected override bool GreaterOrEquals(string version, string benchmark)
 {
     return(VersionComparer.GreaterEquals(version, benchmark));
 }
Esempio n. 33
0
 private static bool Equals(VersionComparer comparer, string version1, string version2)
 {
     return(EqualsOneWay(comparer, version1, version2) && EqualsOneWay(comparer, version2, version1));
 }
Esempio n. 34
0
 public int Compare(Version version, Version otherVersion) => VersionComparer.Compare(version, otherVersion);
Esempio n. 35
0
 private int CompareVersion(NuGetVersion v1, NuGetVersion v2)
 => VersionComparer.Compare(v1, v2, VersionComparison.Version);
Esempio n. 36
0
        public ViewDataModel GetExportData(int implementationGuideId, int?fileId, int[] templateIds, bool inferred)
        {
            ImplementationGuide ig     = this.tdb.ImplementationGuides.Single(y => y.Id == implementationGuideId);
            ViewDataModel       model  = null;
            SimpleSchema        schema = ig.ImplementationGuideType.GetSimpleSchema();

            if (fileId != null)
            {
                var file     = ig.Files.Single(y => y.Id == fileId);
                var fileData = file.GetLatestData();

                if (file.ContentType != "DataSnapshot")
                {
                    throw new Exception("File specified is not a data snapshot!");
                }

                string fileDataContent = System.Text.Encoding.UTF8.GetString(fileData.Data);
                model = JsonConvert.DeserializeObject <ViewDataModel>(fileDataContent);
                model.ImplementationGuideFileId = fileId;
            }
            else
            {
                Log.For(this).Trace("Generating HTML export for " + implementationGuideId);

                IGSettingsManager igSettings = new IGSettingsManager(this.tdb, implementationGuideId);
                var igTypePlugin             = ig.ImplementationGuideType.GetPlugin();
                var firstTemplateType        = ig.ImplementationGuideType.TemplateTypes.OrderBy(y => y.OutputOrder).FirstOrDefault();
                var valueSets         = ig.GetValueSets(this.tdb);
                var parentTemplateIds = templateIds != null?templateIds.ToList() : null;

                var templates =
                    ig.GetQueryableRecursiveTemplates(this.tdb, parentTemplateIds, inferred)
                    .IncludeDetails(true, true, true)
                    .ToList();
                var constraints        = templates.SelectMany(y => y.ChildConstraints);
                var previousVersionIds = templates.Where(y => y.PreviousVersionTemplateId != null).Select(y => y.PreviousVersionTemplateId.Value).ToList();
                var previousVersions   = this.tdb.Templates.Where(y => previousVersionIds.Contains(y.Id))
                                         .IncludeDetails(true, true, true)
                                         .ToList();
                var containedTemplates = (from st in templates
                                          join vtr in this.tdb.ViewTemplateRelationships.AsNoTracking() on st.Id equals vtr.ParentTemplateId
                                          join t in this.tdb.Templates.AsNoTracking() on vtr.ChildTemplateId equals t.Id
                                          select new
                {
                    Relationship = vtr,
                    Template = t
                }).ToList();
                var containedByTemplates = (from st in templates
                                            join vtr in this.tdb.ViewTemplateRelationships.AsNoTracking() on st.Id equals vtr.ChildTemplateId
                                            join t in this.tdb.Templates.AsNoTracking() on vtr.ParentTemplateId equals t.Id
                                            select new
                {
                    Relationship = vtr,
                    Template = t
                }).ToList();
                this.constraintReferences = (from c in constraints
                                             join tcr in this.tdb.TemplateConstraintReferences.AsNoTracking() on c.Id equals tcr.TemplateConstraintId
                                             join t in this.tdb.Templates.AsNoTracking() on tcr.ReferenceIdentifier equals t.Oid
                                             join ig1 in this.tdb.ImplementationGuides.AsNoTracking() on t.OwningImplementationGuideId equals ig1.Id
                                             where tcr.ReferenceType == ConstraintReferenceTypes.Template
                                             select new ExportConstraintReference()
                {
                    Bookmark = t.Bookmark,
                    Identifier = t.Oid,
                    Name = t.Name,
                    TemplateConstraintId = tcr.TemplateConstraintId,
                    IncludedInIG = templates.Contains(t),
                    ImplementationGuide =
                        !string.IsNullOrEmpty(ig1.DisplayName) ?
                        ig1.DisplayName :
                        ig1.Name + " V" + ig1.Version.ToString(),
                    PublishDate = ig1.PublishDate
                }).ToList();

                model = new ViewDataModel()
                {
                    ImplementationGuideId     = implementationGuideId,
                    ImplementationGuideName   = !string.IsNullOrEmpty(ig.DisplayName) ? ig.DisplayName : ig.NameWithVersion,
                    ImplementationGuideFileId = fileId,
                    Status      = ig.PublishStatus.Status,
                    PublishDate = ig.PublishDate != null?ig.PublishDate.Value.ToShortDateString() : null,
                                      Volume1Html = igSettings.GetSetting(IGSettingsManager.SettingProperty.Volume1Html)
                };

                model.ImplementationGuideDescription = ig.WebDescription;
                model.ImplementationGuideDisplayName = !string.IsNullOrEmpty(ig.WebDisplayName) ? ig.WebDisplayName : model.ImplementationGuideName;

                Log.For(this).Trace("Including Volume 1 sections");

                // Create the section models
                var sections = ig.Sections.OrderBy(y => y.Order).ToList();
                model.Volume1Sections = (from igs in sections
                                         select new ViewDataModel.Section()
                {
                    Heading = igs.Heading,
                    Content = igs.Content.MarkdownToHtml(),
                    Level = igs.Level
                }).ToList();

                Log.For(this).Trace("Including FHIR resources attached to IG");

                // Include any FHIR Resource Instance attachments with the IG
                foreach (var fhirResourceInstanceFile in ig.Files.Where(y => y.ContentType == "FHIRResourceInstance"))
                {
                    var    fileData    = fhirResourceInstanceFile.GetLatestData();
                    string fileContent = System.Text.Encoding.UTF8.GetString(fileData.Data);

                    ViewDataModel.FHIRResource newFhirResource = new ViewDataModel.FHIRResource()
                    {
                        Name        = fhirResourceInstanceFile.FileName,
                        JsonContent = igTypePlugin.GetFHIRResourceInstanceJson(fileContent),
                        XmlContent  = igTypePlugin.GetFHIRResourceInstanceXml(fileContent)
                    };

                    if (!string.IsNullOrEmpty(newFhirResource.JsonContent) || !string.IsNullOrEmpty(newFhirResource.XmlContent))
                    {
                        model.FHIRResources.Add(newFhirResource);
                    }
                }

                Log.For(this).Trace("Including value sets");

                foreach (var valueSet in valueSets)
                {
                    var newValueSetModel = new ViewDataModel.ValueSet()
                    {
                        Identifier  = valueSet.ValueSet.GetIdentifier(igTypePlugin),
                        Name        = valueSet.ValueSet.Name,
                        Source      = valueSet.ValueSet.Source,
                        Description = valueSet.ValueSet.Description,
                        BindingDate = valueSet.BindingDate != null?valueSet.BindingDate.Value.ToShortDateString() : null
                    };

                    var members = valueSet.ValueSet.GetActiveMembers(valueSet.BindingDate);
                    newValueSetModel.Members = (from vsm in members
                                                join cs in this.tdb.CodeSystems on vsm.CodeSystemId equals cs.Id
                                                select new ViewDataModel.ValueSetMember()
                    {
                        Code = vsm.Code,
                        DisplayName = vsm.DisplayName,
                        CodeSystemIdentifier = cs.Oid,
                        CodeSystemName = cs.Name
                    }).ToList();

                    model.ValueSets.Add(newValueSetModel);

                    // Add code systems used by this value set to the IG
                    var codeSystems = (from vsm in members
                                       join cs in this.tdb.CodeSystems on vsm.CodeSystemId equals cs.Id
                                       select new ViewDataModel.CodeSystem()
                    {
                        Identifier = cs.Oid,
                        Name = cs.Name
                    });
                    model.CodeSystems.AddRange(codeSystems);
                }

                Log.For(this).Trace("Including templates");

                foreach (var template in templates)
                {
                    var templateId       = template.Id;
                    var templateSchema   = schema.GetSchemaFromContext(template.PrimaryContextType);
                    var previousVersion  = previousVersions.SingleOrDefault(y => y.Id == template.PreviousVersionTemplateId);
                    var newTemplateModel = new ViewDataModel.Template()
                    {
                        Identifier      = template.Oid,
                        Bookmark        = template.Bookmark,
                        ContextType     = template.PrimaryContextType,
                        Context         = template.PrimaryContext,
                        Name            = template.Name,
                        ImpliedTemplate = template.ImpliedTemplate != null ? new ViewDataModel.TemplateReference(template.ImpliedTemplate) : null,
                        Description     = template.Description.MarkdownToHtml(),
                        Extensibility   = template.IsOpen ? "Open" : "Closed",
                        TemplateTypeId  = template.TemplateTypeId
                    };

                    // Load Template Changes
                    if (previousVersion != null)
                    {
                        var comparer = VersionComparer.CreateComparer(this.tdb, igTypePlugin, igSettings);
                        var result   = comparer.Compare(previousVersion, template);

                        newTemplateModel.Changes = new DifferenceModel(result)
                        {
                            Id                   = template.Id,
                            TemplateName         = template.Name,
                            PreviousTemplateName = string.Format("{0} ({1})", previousVersion.Name, previousVersion.Oid),
                            PreviousTemplateId   = previousVersion.Id
                        };
                    }

                    // Code systems used in this template to the IG
                    var codeSystems = (from tc in template.ChildConstraints
                                       where tc.CodeSystem != null
                                       select new ViewDataModel.CodeSystem()
                    {
                        Identifier = tc.CodeSystem.Oid,
                        Name = tc.CodeSystem.Name
                    });
                    model.CodeSystems.AddRange(codeSystems);

                    // Samples
                    newTemplateModel.Samples = (from ts in template.TemplateSamples
                                                select new ViewDataModel.Sample()
                    {
                        Id = ts.Id,
                        Name = ts.Name,
                        SampleText = ts.XmlSample
                    }).ToList();

                    // Contained templates
                    var thisContainedTemplates = containedTemplates
                                                 .Where(y => y.Relationship.ParentTemplateId == templateId)
                                                 .GroupBy(y => y.Template)
                                                 .Select(y => y.First());
                    newTemplateModel.ContainedTemplates = thisContainedTemplates.Select(y => new ViewDataModel.TemplateReference(y.Template)).ToList();

                    // Contained by templates
                    var thisContainedByTemplates = containedByTemplates
                                                   .Where(y => y.Relationship.ChildTemplateId == templateId)
                                                   .GroupBy(y => y.Template)
                                                   .Select(y => y.First());
                    newTemplateModel.ContainedByTemplates = thisContainedByTemplates.Select(y => new ViewDataModel.TemplateReference(y.Template)).ToList();

                    // Implying templates
                    var implyingTemplates = (from t in templates
                                             where t.ImpliedTemplateId == template.Id
                                             select t).Distinct().ToList();
                    newTemplateModel.ImplyingTemplates = implyingTemplates.Select(y => new ViewDataModel.TemplateReference(y)).ToList();

                    model.Templates.Add(newTemplateModel);

                    // Create the constraint models (hierarchically)
                    var parentConstraints = template.ChildConstraints.Where(y => y.ParentConstraintId == null);
                    CreateConstraints(igSettings, igTypePlugin, parentConstraints, newTemplateModel.Constraints, templateSchema);
                }

                Log.For(this).Trace("Including template types");

                // Create models for template types in the IG
                model.TemplateTypes = (from igt in igSettings.TemplateTypes
                                       join tt in this.tdb.TemplateTypes.AsNoTracking() on igt.TemplateTypeId equals tt.Id
                                       where model.Templates.Exists(y => y.TemplateTypeId == tt.Id)
                                       select new ViewDataModel.TemplateType()
                {
                    TemplateTypeId = tt.Id,
                    Name = igt.Name,
                    ContextType = tt.RootContextType,
                    Description = igt.DetailsText
                }).ToList();

                Log.For(this).Trace("Including code systems");
                model.CodeSystems = model.CodeSystems.Distinct().ToList();
            }

            this.FixImagePaths(model);

            Log.For(this).Trace("Done generating HTML export for " + implementationGuideId);

            return(model);
        }