Пример #1
0
    public DiffLogResult GetOperationDiffLog(string id, bool simplify)
    {
        var operationLog = Database.Retrieve <OperationLogEntity>(PrimaryKey.Parse(id, typeof(OperationLogEntity)));

        var logs = DiffLogLogic.OperationLogNextPrev(operationLog);

        StringDistance sd = new StringDistance();

        var prevFinal = DiffLogLogic.SimplifyDump(logs.Min?.Mixin <DiffLogMixin>().FinalState.Text, simplify);

        string?nextInitial = logs.Max != null?DiffLogLogic.SimplifyDump(logs.Max.Mixin <DiffLogMixin>().InitialState.Text, simplify) :
                                 operationLog.Target !.Exists() ? GetDump(operationLog.Target !) : null;

        string?initial = DiffLogLogic.SimplifyDump(operationLog.Mixin <DiffLogMixin>().InitialState.Text, simplify);
        string?final   = DiffLogLogic.SimplifyDump(operationLog.Mixin <DiffLogMixin>().FinalState.Text, simplify);

        return(new DiffLogResult
        {
            prev = logs.Min?.ToLite(),
            diffPrev = prevFinal == null || initial == null ? null : sd.DiffText(prevFinal, initial),
            initial = initial,
            diff = sd.DiffText(initial, final),
            final = final,
            diffNext = final == null || nextInitial == null ? null : sd.DiffText(final, nextInitial),
            next = logs.Max?.ToLite(),
        });
    }
Пример #2
0
    public void DiffText()
    {
        var text1 =
            @"  Hola Pedro
Que tal
Bien

Adios Juan";

        var text2 =
            @"  Hola Pedri

Que til
Adios Juani";

        var result = d.DiffText(text1, text2);

        var str = result.ToString(l => (l.Action == StringDistance.DiffAction.Added ? "[+]" :
                                        l.Action == StringDistance.DiffAction.Removed ? "[-]" : "[=]") + l.Value.ToString(""), "\n");

        Assert.Equal(
            @"[=]  Hola -Pedro+Pedri
[-]-Que tal
[-]-Bien
[=]
[+]+Que til
[=]Adios -Juan+Juani", str);
    }
        public void DiffText()
        {
            const string text1 = @"  Hola Pedro
Que tal
Bien

Adios Juan";

            const string text2 = @"  Hola Pedri

Que til
Adios Juani";

            var result = _stringDistance.DiffText(text1, text2);

            var str = result.ToString(l => (l.Action == DiffAction.Added
                                               ? "[+]"
                                               : l.Action == DiffAction.Removed
                                                   ? "[-]"
                                                   : "[=]")
                                      + l.Value.ToString(string.Empty), "\n");

            _output.WriteLine(str);

            Assert.True(
                @"[=]  Hola -Pedro+Pedri
[-]-Que tal
[-]-Bien
[=]
[+]+Que til
[=]Adios -Juan+Juani" == str);
        }
Пример #4
0
        public TranslatedInstanceViewTypeTS View(string type, string?culture, string filter)
        {
            Type t = TypeLogic.GetType(type);
            var  c = culture == null ? null : CultureInfo.GetCultureInfo(culture);

            var master = TranslatedInstanceLogic.FromEntities(t);

            var support = TranslatedInstanceLogic.TranslationsForType(t, culture: c);

            var all = string.IsNullOrEmpty(filter);

            var cultures = TranslationLogic.CurrentCultureInfos(TranslatedInstanceLogic.DefaultCulture);

            Func <LocalizedInstanceKey, bool> filtered = li => all ||
                                                         li.RowId.ToString() == filter ||
                                                         li.Instance.Id.ToString() == filter ||
                                                         li.Route.PropertyString().Contains(filter, StringComparison.InvariantCultureIgnoreCase) ||
                                                         master.GetOrThrow(li).Contains(filter, StringComparison.InvariantCultureIgnoreCase) ||
                                                         cultures.Any(ci => (support.TryGetC(ci)?.TryGetC(li)?.TranslatedText ?? "").Contains(filter, StringComparison.InvariantCultureIgnoreCase));

            var sd = new StringDistance();

            var supportByInstance = (from kvpCult in support
                                     from kvpLocIns in kvpCult.Value
                                     where filtered(kvpLocIns.Key)
                                     let newText = master.GetOrThrow(kvpLocIns.Key)
                                                   group(lockIns: kvpLocIns.Key, translatedInstance: kvpLocIns.Value, culture: kvpCult.Key, newText: newText) by kvpLocIns.Key.Instance into gInstance
                                                   select KeyValuePair.Create(gInstance.Key,
                                                                              gInstance.AgGroupToDictionary(a => a.lockIns.RouteAndRowId(),
                                                                                                            gr => gr.ToDictionary(a => a.culture.Name, a => new TranslatedPairViewTS
            {
                OriginalText = a.translatedInstance.OriginalText,
                Diff = a.translatedInstance.OriginalText.Equals(a.newText) ? null : sd.DiffText(a.translatedInstance.OriginalText, a.newText),
                TranslatedText = a.translatedInstance.TranslatedText
            })
                                                                                                            ))).ToDictionary();

            return(new TranslatedInstanceViewTypeTS
            {
                TypeName = type,
                Routes = TranslatedInstanceLogic.TranslateableRoutes.GetOrThrow(t).ToDictionary(a => a.Key.PropertyString(), a => a.Value),
                MasterCulture = TranslatedInstanceLogic.DefaultCulture.Name,
                Instances = master.Where(kvp => filtered(kvp.Key)).GroupBy(a => a.Key.Instance).Select(gr => new TranslatedInstanceViewTS
                {
                    Lite = gr.Key,
                    Master = gr.ToDictionary(
                        a => a.Key.RouteAndRowId(),
                        a => a.Value
                        ),
                    Translations = supportByInstance.TryGetC(gr.Key) ?? new Dictionary <string, Dictionary <string, TranslatedPairViewTS> >()
                }).ToList()
            });
        }
Пример #5
0
        public static RestDiffResult RestDiffLog(RestDiffResult result)
        {
            StringDistance sd   = new StringDistance();
            long?          size = (long?)result.current?.Length * result.previous?.Length;

            if (size != null && size <= int.MaxValue)
            {
                var diff = sd.DiffText(result.previous, result.current);
                result.diff = diff;
            }

            return(result);
        }
Пример #6
0
        public List <StringDistance.DiffPair <List <StringDistance.DiffPair <string> > > > DiffVersiones(string typeName, string id, DateTime from, DateTime to)
        {
            var type = TypeLogic.GetType(typeName);
            var pk   = PrimaryKey.Parse(id, type);


            var f = SystemTime.Override(from.AddMilliseconds(1)).Using(_ => Database.Retrieve(type, pk));
            var t = SystemTime.Override(to.AddMilliseconds(1)).Using(_ => Database.Retrieve(type, pk));

            var            fDump = GetDump(f);
            var            tDump = GetDump(t);
            StringDistance sd    = new StringDistance();

            return(sd.DiffText(fDump, tDump));
        }
Пример #7
0
        public static MvcHtmlString Diff(string oldStr, string newStr)
        {
            StringDistance sd = new StringDistance();

            var dif = sd.DiffText(oldStr, newStr);

            HtmlStringBuilder sb = new HtmlStringBuilder();

            foreach (var line in dif)
            {
                if (line.Action == StringDistance.DiffAction.Removed)
                {
                    using (sb.Surround(new HtmlTag("span").Attr("style", "background-color:#FFD1D1")))
                        DiffLine(sb, line.Value);
                }
                if (line.Action == StringDistance.DiffAction.Added)
                {
                    using (sb.Surround(new HtmlTag("span").Attr("style", "background-color:#CEF3CE")))
                        DiffLine(sb, line.Value);
                }
                else if (line.Action == StringDistance.DiffAction.Equal)
                {
                    if (line.Value.Count == 1)
                    {
                        using (sb.Surround(new HtmlTag("span")))
                            DiffLine(sb, line.Value);
                    }
                    else
                    {
                        using (sb.Surround(new HtmlTag("span").Attr("style", "background-color:#FFD1D1")))
                            DiffLine(sb, line.Value.Where(a => a.Action == StringDistance.DiffAction.Removed || a.Action == StringDistance.DiffAction.Equal));

                        using (sb.Surround(new HtmlTag("span").Attr("style", "background-color:#CEF3CE")))
                            DiffLine(sb, line.Value.Where(a => a.Action == StringDistance.DiffAction.Added || a.Action == StringDistance.DiffAction.Equal));
                    }
                }
            }

            return(sb.ToHtml());
        }
Пример #8
0
        public DiffLogResult GetOperationDiffLog(string id)
        {
            var operationLog = Database.Retrieve <OperationLogEntity>(PrimaryKey.Parse(id, typeof(OperationLogEntity)));

            var logs = DiffLogLogic.OperationLogNextPrev(operationLog);

            StringDistance sd = new StringDistance();

            var prevFinal = logs.Min?.Mixin <DiffLogMixin>().FinalState;

            string?nextInitial = logs.Max != null?logs.Max.Mixin <DiffLogMixin>().InitialState:
                                 operationLog.Target !.Exists() ? GetDump(operationLog.Target !) : null;

            return(new DiffLogResult
            {
                prev = logs.Min?.ToLite(),
                diffPrev = prevFinal == null || operationLog.Mixin <DiffLogMixin>().InitialState == null ? null : sd.DiffText(prevFinal, operationLog.Mixin <DiffLogMixin>().InitialState),
                diff = sd.DiffText(operationLog.Mixin <DiffLogMixin>().InitialState, operationLog.Mixin <DiffLogMixin>().FinalState),
                diffNext = operationLog.Mixin <DiffLogMixin>().FinalState == null || nextInitial == null ? null : sd.DiffText(operationLog.Mixin <DiffLogMixin>().FinalState, nextInitial),
                next = logs.Max?.ToLite(),
            });
        }
Пример #9
0
        public static TextBlock Diff(string oldStr, string newStr)
        {
            StringDistance sd = new StringDistance();

            var dif = sd.DiffText(oldStr, newStr);

            TextBlock tb = new TextBlock {
                FontFamily = font
            };

            foreach (var line in dif)
            {
                if (line.Action == StringDistance.DiffAction.Removed)
                {
                    tb.Inlines.Add(DiffLine(line.Value, lightRed));
                }
                if (line.Action == StringDistance.DiffAction.Added)
                {
                    tb.Inlines.Add(DiffLine(line.Value, lightGreen));
                }
                else if (line.Action == StringDistance.DiffAction.Equal)
                {
                    if (line.Value.Count == 1)
                    {
                        tb.Inlines.Add(DiffLine(line.Value, null));
                    }
                    else
                    {
                        tb.Inlines.Add(DiffLine(line.Value.Where(a => a.Action == StringDistance.DiffAction.Removed || a.Action == StringDistance.DiffAction.Equal), lightRed));
                        tb.Inlines.Add(DiffLine(line.Value.Where(a => a.Action == StringDistance.DiffAction.Added || a.Action == StringDistance.DiffAction.Equal), lightGreen));
                    }
                }
            }

            return(tb);
        }
Пример #10
0
        public TypeInstancesChangesTS Sync(string type, string culture)
        {
            Type t = TypeLogic.GetType(type);

            var c = CultureInfo.GetCultureInfo(culture);

            int totalInstances;
            var changes = TranslatedInstanceSynchronizer.GetTypeInstanceChangesTranslated(TranslationServer.Translator, t, c, out totalInstances);

            var sd = new StringDistance();


            return(new TypeInstancesChangesTS
            {
                MasterCulture = TranslatedInstanceLogic.DefaultCulture.Name,
                Routes = TranslatedInstanceLogic.TranslateableRoutes.GetOrThrow(t).ToDictionary(a => a.Key.PropertyString(), a => a.Value),
                TotalInstances = totalInstances,
                TypeName = t.Name,
                Instances = changes.Instances.Select(a => new InstanceChangesTS
                {
                    Instance = a.Instance,
                    RouteConflicts = a.RouteConflicts.ToDictionaryEx(
                        ipr => ipr.Key.RouteRowId(),
                        ipr => new PropertyChangeTS
                    {
                        Support = ipr.Value.ToDictionaryEx(c => c.Key.Name, c => new PropertyRouteConflictTS
                        {
                            Original = c.Value.Original,
                            OldOriginal = c.Value.OldOriginal,
                            OldTranslation = c.Value.OldTranslation,
                            Diff = c.Value.OldOriginal == null || c.Value.Original == null || c.Value.OldOriginal.Equals(c.Value.Original) ? null : sd.DiffText(c.Value.OldOriginal, c.Value.Original),
                            AutomaticTranslation = c.Value.AutomaticTranslation,
                        })
                    }
                        )
                }).ToList()
            });
        }