Ejemplo n.º 1
0
        private string GetFolderColor(DirEntry dirEntry, CompareStatus blueStatus, CompareStatus redStatus, CompareStatus grayStatus)
        {
            var colors = new List<string>();

            if (dirEntry.CompareStatuses.Contains(blueStatus))
            {
                colors.Add("Blue");
            }

            if (dirEntry.CompareStatuses.Contains(redStatus))
            {
                colors.Add("Red");
            }

            if (dirEntry.CompareStatuses.Contains(CompareStatus.NotEqual) ||
                dirEntry.CompareStatuses.Contains(grayStatus) ||
                dirEntry.CompareStatuses.Contains(CompareStatus.Unknown))
            {
                colors.Add("Gray");
            }

            if (colors.Count >= 2)
            {
                return colors[0] + colors[1];
            }
            else if (colors.Count == 1)
            {
                return colors[0];
            }
            else
            {
                return "Black";
            }
        }
Ejemplo n.º 2
0
        private void SetCompareStatus(CompareStatus cstat)
        {
            switch (cstat)
            {
            case CompareStatus.clear:
                this.tbxFilesHash.BackColor   = Color.White;
                this.tbxCompareHash.BackColor = Color.White;
                this.lblStatus.Text           = string.Empty;
                break;

            case CompareStatus.different:
                Color cd = Color.FromArgb(255, 0, 0);
                this.tbxFilesHash.BackColor   = cd;
                this.tbxCompareHash.BackColor = cd;
                this.lblStatus.Text           = "Hash values are different";
                break;

            case CompareStatus.same:
                Color cs = Color.FromArgb(0, 255, 0);
                this.tbxFilesHash.BackColor   = cs;
                this.tbxCompareHash.BackColor = cs;
                this.lblStatus.Text           = "Hash values are the same";
                break;
            }
        }
Ejemplo n.º 3
0
        private void SetLayout(CompareType type, CompareStatus status)
        {
            List <Control> oper = null;

            switch (type)
            {
            case CompareType.Source:
                oper       = _srcControls;
                _srcStatus = status;
                break;

            case CompareType.Target:
                oper       = _trgControls;
                _trgStatus = status;
                break;

            case CompareType.Other:
                oper = _compControls;
                break;
            }

            switch (status)
            {
            case CompareStatus.Init:
                SetLayoutInit(oper);
                break;

            case CompareStatus.Connected:
                SetLayoutConnected(oper);
                break;

            case CompareStatus.Selected:
                SetLayoutSelected(oper);
                break;

            case CompareStatus.Used:
                SetLayoutSelected(oper);
                break;

            case CompareStatus.Mapped:
                SetLayoutMapped(oper);
                break;

            case CompareStatus.Compared:
                SetLayoutCompared(oper);
                break;
            }

            _compControls[0].Enabled = (_srcStatus == CompareStatus.Used && _trgStatus == CompareStatus.Used);
        }
Ejemplo n.º 4
0
        private string GetFileColor(FileEntry fileEntry, CompareStatus blueStatus, CompareStatus redStatus, CompareStatus grayStatus)
        {
            if (fileEntry.CompareStatuses.Contains(blueStatus))
            {
                return "Blue";
            }

            if (fileEntry.CompareStatuses.Contains(redStatus))
            {
                return "Red";
            }

            if (fileEntry.CompareStatuses.Contains(CompareStatus.NotEqual) ||
                fileEntry.CompareStatuses.Contains(grayStatus) ||
                fileEntry.CompareStatuses.Contains(CompareStatus.Unknown))
            {
                return "Gray";
            }

            return "Black";
        }
Ejemplo n.º 5
0
        public static IEnumerable <CompareResult <T> > Compare <T>(this IEnumerable <T> master, IEnumerable <T> detail,
                                                                   IEqualityComparer <T> equalityComparer = null,
                                                                   IComparer <T> comparer = null,
                                                                   IEqualityComparer <T> changeComparer          = null,
                                                                   IDictionary <Type, IComparer> typeComparerers = null)
        {
            ChoGuard.ArgumentNotNull(master, "Master");
            ChoGuard.ArgumentNotNull(detail, "Detail");
            ChoGuard.ArgumentNotNull(equalityComparer, nameof(equalityComparer));
            ChoGuard.ArgumentNotNull(comparer, nameof(comparer));

            var r1 = master.GetEnumerator();
            var r2 = detail.GetEnumerator();

            var b1  = r1.MoveNext();
            var b2  = r2.MoveNext();
            T   rec = default(T);

            if (changeComparer == null)
            {
                changeComparer = equalityComparer;
            }

            while (true)
            {
                CompareStatus status = CompareStatus.Unchanged;

                if (!b1 && !b2)
                {
                    break;
                }
                else if (b1 && b2)
                {
                    var rec1 = r1.Current;
                    var rec2 = r2.Current;

                    if (equalityComparer.Equals(rec1, rec2))
                    {
                        rec    = rec1;
                        status = changeComparer.Equals(rec1, rec2) ? CompareStatus.Unchanged : CompareStatus.Changed;
                        b1     = r1.MoveNext();
                        b2     = r2.MoveNext();
                    }
                    else if (comparer.Compare(rec1, rec2) < 0)
                    {
                        rec    = rec1;
                        status = CompareStatus.Deleted;
                        b1     = r1.MoveNext();
                    }
                    else
                    {
                        rec    = rec2;
                        status = CompareStatus.New;
                        b2     = r2.MoveNext();
                    }
                }
                else if (b1)
                {
                    rec    = r1.Current;
                    status = CompareStatus.Deleted;
                    b1     = r1.MoveNext();
                }
                else if (b2)
                {
                    rec    = r2.Current;
                    status = CompareStatus.New;
                    b2     = r2.MoveNext();
                }
                else
                {
                    break;
                }

                yield return(new CompareResult <T>(rec, status));
            }
        }
Ejemplo n.º 6
0
 public CompareResult(T record, CompareStatus status)
 {
     Record = record;
     Status = status;
 }
Ejemplo n.º 7
0
        /// <summary>
        /// Compares two items or templates
        /// </summary>
        /// <param name="compareDB">The compare database</param>
        /// <param name="item">The local item being compared against</param>
        /// <param name="info">Comparison results are stored in this object</param>
        /// <param name="missingDirection">Enum that indicates the appropriate missing flag ('left' or 'right')</param>
        public static void RunCompare(Database compareDB, Item item, ItemComparisonInfo info, CompareStatus missingDirection, bool ignoreMissingVersions, bool ignoreMissingLanguages)
        {
            // See if item exists on other server
            var compare = compareDB.GetItem(item.Paths.Path);
            if (compare == null)
            {
                info.Messages.Add(string.Format("Item does not exist on database '{0}': {1}", compareDB.Name, item.Paths.Path));
                info.Status = missingDirection;

                compare = compareDB.GetItem(item.ID);
                if (compare != null)
                {
                    if (!info.FieldComparisons.ContainsKey("@Path"))
                    {
                        //info.Messages.Add(string.Format("ID matches different item path!!: {0}", compare.Paths.Path));
                        info.ItemPath += "*";
                        info.Messages.Add("Item moved and/or renamed.");
                        var infoF = new FieldComparisonInfo() { Name = "@Path" };
                        infoF.AddDifference("Path different", item.Paths.Path, compare.Paths.Path);
                        info.FieldComparisons.Add("@Path", infoF);
                        info.Status = CompareStatus.Different;
                    }
                }
            }
            else
            {
                // Languages
                foreach (var lang in item.Languages)
                {
                    if (!compare.Languages.Any(x => x.Name == lang.Name))
                    {
                        if (!ignoreMissingLanguages)
                        {
                            info.Messages.Add(string.Format("Language version missing on database '{0}': {1}", compareDB.Name, lang.Name));
                            info.Status = CompareStatus.Different;
                        }
                    }
                    else
                    {
                        foreach (var versionItem in item.Versions.GetVersions(true).Where(x => x.Language.Name == lang.Name))
                        {
                            var compareVersionItem = compare.Versions.GetVersions(true).SingleOrDefault(x => x.Language.Name == lang.Name
                                                                             && x.Version.Number == versionItem.Version.Number);
                            if (compareVersionItem == null)
                            {
                                if (!ignoreMissingVersions)
                                {
                                    info.Messages.Add(string.Format("Version '{0}' missing on database '{1}'", versionItem.Version.Number, compareDB.Name));
                                    info.Status = CompareStatus.Different;
                                }
                            }
                            else
                            {
                                if (Sitecore.Data.Managers.TemplateManager.IsTemplate(item))
                                    CompareTwoTemplates(compareDB, info, (TemplateItem)versionItem, (TemplateItem)compareVersionItem);
                                else
                                    CompareTwoItems(compareDB, info, versionItem, compareVersionItem);
                            }
                        }

                    }
                }
            }
        }
Ejemplo n.º 8
0
 public CompareResult(T masterRecord, T detailRecord, CompareStatus status)
 {
     MasterRecord = masterRecord;
     DetailRecord = detailRecord;
     Status       = status;
 }
Ejemplo n.º 9
0
 public PartPair(Uri uri, CompareStatus status)
 {
     _uri    = uri;
     _status = status;
 }
Ejemplo n.º 10
0
        private bool RunCompare(SimpleTreeNode parentnode, Item item, Database compareDB, CompareStatus missingDirection)
        {
            var dirty = false;

            try
            {
                var info = new ItemComparisonInfo(item);
                if (_differences.ContainsKey(info.ItemKey))
                    info = _differences[info.ItemKey];

                CompareEngine.RunCompare(compareDB, item, info, missingDirection, _ignoreMissingVersions, _ignoreMissingLanguages);

                // Create the tree node
                var nodeIsNew = false;
                //var node = parentnode.ChildNodes.Cast<TreeNode>().SingleOrDefault(x => x.Value == item.Paths.Path);
                var node = parentnode.Nodes.SingleOrDefault(x => x.Value == info.ItemKey);
                if (node == null)
                {
                    node = CreateNode(info);
                    nodeIsNew = true;
                }

                if (info.Status != CompareStatus.Matched)
                {
                    dirty = true;
                    if (!_differences.ContainsKey(info.ItemKey))
                        _differences.Add(info.ItemKey, info);
                }

                if (Sitecore.Data.Managers.TemplateManager.IsTemplate(item))
                {
                    var t = (TemplateItem)item;
                    if (t.StandardValues != null)
                        dirty = RunCompare(node, t.StandardValues, compareDB, missingDirection) | dirty;
                }
                else
                {
                    foreach (var child in item.GetChildren().InnerChildren)
                    {
                        dirty = RunCompare(node, child, compareDB, missingDirection) | dirty;
                    }
                }

                if (dirty && nodeIsNew)
                    parentnode.AddNode(node);

            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("RunCompare failed. [parentnode:{0}][item:{1}][compareDB:{2}]", new object[]{
                    parentnode == null? "NULL!" : parentnode.Value,
                    item == null ? "NULL!" : item.Paths.Path,
                    compareDB == null ? "NULL!" : compareDB.Name
                }), ex);
            }

            return dirty;
        }