예제 #1
0
 public bool TryCreateConverter(
     Type source,
     Type target,
     ChangeTypeProvider root,
     [NotNullWhen(true)] out ChangeType?converter)
 {
     return(_changeTypeProvider(source, target, out converter));
 }
예제 #2
0
        protected virtual void NotifyChanges(ChangeType?changeType = ChangeType.Updated)
        {
            var handler = this.ContentChanged;

            if (handler != null)
            {
                handler(this, Mock.Of <IChangeEvent>(e => e.ObjectId == this.Id && e.ChangeType == changeType && e.ChangeTime == DateTime.UtcNow));
            }
        }
예제 #3
0
    public bool TryCreateConverter(
        Type source,
        Type target,
        ChangeTypeProvider root,
        [NotNullWhen(true)] out ChangeType?converter)
    {
        Type?sourceElement = ExtendedType.Tools.GetElementType(source);
        Type?targetElement = ExtendedType.Tools.GetElementType(target);

        if (sourceElement is not null &&
            targetElement is not null &&
            root(sourceElement, targetElement, out ChangeType? elementConverter))
        {
            if (target.IsArray)
            {
                converter = input => GenericArrayConverter(
                    (ICollection?)input, targetElement, elementConverter);
                return(true);
            }

            if (target.IsGenericType &&
                target.GetGenericTypeDefinition() == typeof(Dictionary <,>))
            {
                MethodInfo converterMethod =
                    _dictionaryConvert.MakeGenericMethod(targetElement.GetGenericArguments());
                converter = source => converterMethod.Invoke(
                    null, new[] { source, elementConverter });
                return(true);
            }

            if (target.IsGenericType &&
                target.IsInterface)
            {
                Type listType = typeof(List <>).MakeGenericType(targetElement);
                if (target.IsAssignableFrom(listType))
                {
                    converter = source => GenericListConverter(
                        (ICollection?)source, listType, elementConverter);
                    return(true);
                }
            }

            if (target.IsGenericType &&
                target.IsClass &&
                typeof(ICollection).IsAssignableFrom(target))
            {
                converter = source => GenericListConverter(
                    (ICollection?)source, target, elementConverter);
                return(true);
            }
        }

        converter = null;
        return(false);
    }
        private FlowDocument GenerateFlowDocument(DiffPaneModel diffPaneModel)
        {
            var flowDocument = new FlowDocument();
            var lineWidths   = new List <double>();

            var        stringBuilder    = new StringBuilder();
            bool       isFirstLine      = true;
            ChangeType?previousLineType = null;
            DiffPiece  previousLine     = null;

            foreach (var line in diffPaneModel.Lines)
            {
                if (line.Type != ChangeType.Modified && isFirstLine)
                {
                    stringBuilder.Append(line.Text);
                }
                else if (line.Type != ChangeType.Modified && line.Type == previousLineType)
                {
                    stringBuilder.Append(Environment.NewLine + line.Text);
                }
                else if (!isFirstLine && (line.Type != previousLineType || previousLineType == ChangeType.Modified))
                {
                    Paragraph paragraph = GetParagraph(stringBuilder, previousLineType, previousLine);
                    flowDocument.Blocks.Add(paragraph);

                    stringBuilder.Clear();
                    if (line.Type != ChangeType.Modified)
                    {
                        stringBuilder.Append(line.Text);
                    }
                }

                isFirstLine      = false;
                previousLineType = line.Type;
                previousLine     = line;
                lineWidths.Add(CalculateLineWidth(line.Text));
            }

            // process last line
            if (previousLine != null)
            {
                Paragraph lastParagraph = GetParagraph(stringBuilder, previousLineType, previousLine);
                flowDocument.Blocks.Add(lastParagraph);
            }

            flowDocument.LineStackingStrategy = LineStackingStrategy.BlockLineHeight;
            flowDocument.PagePadding          = _zeroThickness;
            flowDocument.PageWidth            = Math.Min(lineWidths.DefaultIfEmpty(0).Max(), 1000000);  // Throws an ArgumentException if value is too big. I think the maximum allowed is 1 million.
            return(flowDocument);
        }
예제 #5
0
        public MockEnvironment Delete(string tfsPath, ItemType?itemType = null, ChangeType?changeType = null)
        {
            _item = new Mock <IItem>();
            _item.Setup(i => i.ChangesetId).Returns(_changeset.Object.ChangesetId);
            _item.Setup(i => i.HashValue).Returns(new byte[] { });
            _item.Setup(i => i.ItemType).Returns(itemType ?? ItemType.File);
            _item.Setup(i => i.ServerItem).Returns(tfsPath);

            _change = new Mock <IChange>();
            _change.Setup(c => c.ChangeType).Returns(changeType ?? ChangeType.Delete);
            _change.Setup(c => c.Item).Returns(_item.Object);
            _changes.Add(_change.Object);

            return(this);
        }
예제 #6
0
            public bool TryCreateConverter(
                Type source,
                Type target,
                ChangeTypeProvider root,
                [NotNullWhen(true)] out ChangeType?converter)
            {
                if (_source == source && _target == target)
                {
                    converter = _converter;
                    return(true);
                }

                converter = null;
                return(false);
            }
예제 #7
0
    public bool TryCreateConverter(
        Type source,
        Type target,
        ChangeTypeProvider root,
        [NotNullWhen(true)] out ChangeType?converter)
    {
        Type innerFrom = GetUnderlyingNullableType(source);
        Type innerTo   = GetUnderlyingNullableType(target);

        if ((innerFrom != source || innerTo != target) &&
            root(innerFrom, innerTo, out converter))
        {
            return(true);
        }

        converter = null;
        return(false);
    }
예제 #8
0
        /// <returns>
        /// A nice string representation of this change set
        /// </returns>
        public override string ToString()
        {
            string     ret     = $"<b><size=20>{version}</size></b>\n";
            ChangeType?curType = null;

            foreach (Change c in changes)
            {
                if (c.type != curType)
                {
                    if (c.type != ChangeType.None)
                    {
                        ret += $"<b>{c.TypeString()}</b>\n";
                    }
                    curType = c.type;
                }
                ret += c.ToString();
            }
            return(ret);
        }
        protected virtual Task InvalidateCacheAsync(IReadOnlyCollection <ModifiedDocument <T> > documents, ChangeType?changeType = null)
        {
            var keysToRemove = new HashSet <string>();

            if (HasIdentity && changeType != ChangeType.Added)
            {
                foreach (var document in documents)
                {
                    keysToRemove.Add(((IIdentity)document.Value).Id);
                    if (((IIdentity)document.Original)?.Id != null)
                    {
                        keysToRemove.Add(((IIdentity)document.Original).Id);
                    }
                }
            }

            if (keysToRemove.Count > 0)
            {
                return(Cache.RemoveAllAsync(keysToRemove));
            }

            return(Task.CompletedTask);
        }
예제 #10
0
        protected override async Task InvalidateCacheAsync(IReadOnlyCollection <ModifiedDocument <LogEvent> > documents, ChangeType?changeType = null)
        {
            await base.InvalidateCacheAsync(documents, changeType);

            await Cache.RemoveAllAsync(documents.Select(d => $"count:{d.Value.CompanyId}"));
        }
예제 #11
0
        protected override Task InvalidateCacheAsync(IReadOnlyCollection <ModifiedDocument <Project> > documents, ChangeType?changeType = null)
        {
            var organizations = documents.Select(d => d.Value.OrganizationId).Distinct().Where(id => !String.IsNullOrEmpty(id));

            return(Task.WhenAll(Cache.RemoveAllAsync(organizations.Select(id => $"count:Organization:{id}")), base.InvalidateCacheAsync(documents, changeType)));
        }
예제 #12
0
        protected override Task InvalidateCacheAsync(IReadOnlyCollection <ModifiedDocument <User> > documents, ChangeType?changeType = null)
        {
            var keysToRemove = documents.UnionOriginalAndModified().Select(u => EmailCacheKey(u.EmailAddress)).Distinct();

            return(Task.WhenAll(Cache.RemoveAllAsync(keysToRemove), base.InvalidateCacheAsync(documents, changeType)));
        }
예제 #13
0
        internal static FileDiff ParseDiffChunk(IStringReader reader, ref ChangeSetDetail merge)
        {
            var diff = ParseDiffHeader(reader, merge);

            if (diff == null)
            {
                return(null);
            }

            // Current diff range
            DiffRange currentRange = null;
            int?      leftCounter  = null;
            int?      rightCounter = null;

            // Parse the file diff
            while (!reader.Done)
            {
                int?   currentLeft  = null;
                int?   currentRight = null;
                string line         = reader.ReadLine();

                if (line.Equals(@"\ No newline at end of file", StringComparison.OrdinalIgnoreCase))
                {
                    continue;
                }

                bool       isDiffRange = line.StartsWith("@@", StringComparison.Ordinal);
                ChangeType?changeType  = null;

                if (line.StartsWith("+", StringComparison.Ordinal))
                {
                    changeType   = ChangeType.Added;
                    currentRight = ++rightCounter;
                    currentLeft  = null;
                }
                else if (line.StartsWith("-", StringComparison.Ordinal))
                {
                    changeType   = ChangeType.Deleted;
                    currentLeft  = ++leftCounter;
                    currentRight = null;
                }
                else if (IsCommitHeader(line))
                {
                    reader.PutBack(line.Length);
                    merge = ParseCommitAndSummary(reader);
                }
                else
                {
                    if (!isDiffRange)
                    {
                        currentLeft  = ++leftCounter;
                        currentRight = ++rightCounter;
                    }
                    changeType = ChangeType.None;
                }

                if (changeType != null)
                {
                    var lineDiff = new LineDiff(changeType.Value, line);
                    if (!isDiffRange)
                    {
                        lineDiff.LeftLine  = currentLeft;
                        lineDiff.RightLine = currentRight;
                    }

                    diff.Lines.Add(lineDiff);
                }

                if (isDiffRange)
                {
                    // Parse the new diff range
                    currentRange = DiffRange.Parse(line.AsReader());
                    leftCounter  = currentRange.LeftFrom - 1;
                    rightCounter = currentRange.RightFrom - 1;
                }
            }

            return(diff);
        }
예제 #14
0
        /// <summary>
        /// 根据订单的编号、(修改或变更)获取订单变更列表
        /// </summary>
        /// <param name="OrderId">订单编号</param>
        /// <param name="changeType">变更或修改</param>
        /// <returns></returns>
        public IList <MTourOrderChange> GetTourOrderChangeList(string OrderId, ChangeType?changeType)
        {
            IList <MTourOrderChange> list = null;

            StringBuilder query = new StringBuilder();

            query.Append(" SELECT ");
            query.Append("Id,CompanyId,TourId,RouteId,RouteName,TourSaleId,TourSale,OrderId,OrderCode");
            query.Append(",ChangePerson,ChangePrice,OrderSaleId,OrderSale,Content,OperatorId");
            query.Append(",Operator,IssueTime,ChangeType,IsSure,SurePersonId,SurePerson,SureTime");
            query.Append(" FROM ");
            query.Append("tbl_TourOrderChange");
            query.Append(" Where ");
            query.AppendFormat("OrderId='{0}'", OrderId);

            if (changeType.HasValue)
            {
                query.AppendFormat(" and ChangeType={0}", (int)changeType.Value);
            }

            DbCommand cmd = _db.GetSqlStringCommand(query.ToString());

            using (IDataReader dr = DbHelper.ExecuteReader(cmd, _db))
            {
                if (dr != null)
                {
                    list = new List <MTourOrderChange>();

                    while (dr.Read())
                    {
                        MTourOrderChange change = new MTourOrderChange();

                        change.Id = dr.GetString(dr.GetOrdinal("Id"));

                        change.CompanyId = dr.GetString(dr.GetOrdinal("CompanyId"));

                        change.TourId = dr.GetString(dr.GetOrdinal("TourId"));

                        change.RouteId = !dr.IsDBNull(dr.GetOrdinal("RouteId")) ? dr.GetString(dr.GetOrdinal("RouteId")) : string.Empty;

                        change.RouteName = !dr.IsDBNull(dr.GetOrdinal("RouteName")) ? dr["RouteName"].ToString() : string.Empty;

                        change.TourSaleId = dr.GetString(dr.GetOrdinal("TourSaleId"));

                        change.TourSale = !dr.IsDBNull(dr.GetOrdinal("TourSale")) ? dr["TourSale"].ToString() : string.Empty;

                        change.OrderId = dr.GetString(dr.GetOrdinal("OrderId"));

                        change.OrderCode = !dr.IsDBNull(dr.GetOrdinal("OrderCode")) ? dr.GetString(dr.GetOrdinal("OrderCode")) : string.Empty;

                        change.ChangePerson = dr.GetInt32(dr.GetOrdinal("ChangePerson"));

                        change.ChangePrice = dr.GetDecimal(dr.GetOrdinal("ChangePrice"));

                        change.OrderSaleId = dr.GetString(dr.GetOrdinal("OrderSaleId"));

                        change.OrderSale = !dr.IsDBNull(dr.GetOrdinal("OrderSale")) ? dr["OrderSale"].ToString() : string.Empty;

                        change.Content = !dr.IsDBNull(dr.GetOrdinal("Content")) ? dr["Content"].ToString() : string.Empty;

                        change.OperatorId = dr.GetString(dr.GetOrdinal("OperatorId"));

                        change.Operator = !dr.IsDBNull(dr.GetOrdinal("Operator")) ? dr["Operator"].ToString() : string.Empty;

                        change.IssueTime = dr.GetDateTime(dr.GetOrdinal("IssueTime"));

                        change.ChangeType = (ChangeType)dr.GetByte(dr.GetOrdinal("ChangeType"));

                        change.IsSure = dr.GetString(dr.GetOrdinal("IsSure")) == "1" ? true : false;

                        change.SurePersonId = !dr.IsDBNull(dr.GetOrdinal("SurePersonId")) ? dr.GetString(dr.GetOrdinal("SurePersonId")) : string.Empty;

                        change.SurePerson = !dr.IsDBNull(dr.GetOrdinal("SurePerson")) ? dr.GetString(dr.GetOrdinal("SurePerson")) : string.Empty;;

                        change.SureTime = !dr.IsDBNull(dr.GetOrdinal("SureTime")) ? dr.GetDateTime(dr.GetOrdinal("SureTime")) : (DateTime?)null;

                        list.Add(change);
                    }
                }
            }
            return(list);
        }
예제 #15
0
        /// <summary>
        /// 查询获取订单变更列表 分页
        /// </summary>
        /// <param name="CompanyId">公司编号</param>
        /// <param name="changeType">变更 OR 修改</param>
        /// <param name="pageSize">每页显示的条数</param>
        /// <param name="pageindex">当前页</param>
        /// <param name="recordCount">总记录数</param>
        /// <param name="DetpIds">部门</param>
        /// <param name="isOnlySeft"></param>
        /// <param name="LoginUserId">当前登录员编号</param>
        /// <returns></returns>
        public IList <MTourOrderChange> GetTourOrderChangeList(string CompanyId
                                                               , ChangeType?changeType
                                                               , int pageSize
                                                               , int pageindex
                                                               , ref int recordCount
                                                               , int[] DetpIds
                                                               , bool isOnlySeft
                                                               , string LoginUserId)
        {
            IList <MTourOrderChange> list = null;

            StringBuilder query = new StringBuilder();

            query.AppendFormat(" CompanyId='{0}' ", CompanyId);
            if (changeType.HasValue)
            {
                query.AppendFormat(" and ChangeType={0}", (int)changeType.Value);
            }

            StringBuilder field = new StringBuilder();

            field.Append("Id,CompanyId,TourId,RouteId,RouteName,TourSaleId");
            field.Append(",TourSale,OrderId,OrderCode,ChangePerson,ChangePrice");
            field.Append(",OrderSaleId,OrderSale,Content,OperatorId,Operator,IssueTime");
            field.Append(",ChangeType,IsSure,SurePersonId,SurePerson,SureTime");

            //权限控制  控制派团给计调时指定的计调员
            if (isOnlySeft)
            {
                query.AppendFormat(" and exists(select 1 from tbl_TourPlaner where PlanerId='{0}' and TourId=tbl_TourOrderChange.TourId)", LoginUserId);
            }
            else
            {
                if (DetpIds != null)
                {
                    query.AppendFormat(" and exists(select 1 from tbl_TourPlaner where DeptId in ({0}) and TourId=tbl_TourOrderChange.TourId)", GetIdsByArr(DetpIds));
                }
            }



            using (IDataReader dr = DbHelper.ExecuteReader(_db, pageSize, pageindex, ref recordCount
                                                           , "tbl_TourOrderChange"
                                                           , "TourId"
                                                           , field.ToString()
                                                           , query.ToString()
                                                           , "IssueTime desc"))

                if (dr != null)
                {
                    list = new List <MTourOrderChange>();

                    while (dr.Read())
                    {
                        MTourOrderChange change = new MTourOrderChange();

                        change.Id = dr.GetString(dr.GetOrdinal("Id"));

                        change.CompanyId = dr.GetString(dr.GetOrdinal("CompanyId"));

                        change.TourId = dr.GetString(dr.GetOrdinal("TourId"));

                        change.RouteId = !dr.IsDBNull(dr.GetOrdinal("RouteId")) ? dr.GetString(dr.GetOrdinal("RouteId")) : string.Empty;

                        change.RouteName = !dr.IsDBNull(dr.GetOrdinal("RouteName")) ? dr["RouteName"].ToString() : string.Empty;

                        change.TourSaleId = dr.GetString(dr.GetOrdinal("TourSaleId"));

                        change.TourSale = !dr.IsDBNull(dr.GetOrdinal("TourSale")) ? dr["TourSale"].ToString() : string.Empty;

                        change.OrderId = dr.GetString(dr.GetOrdinal("OrderId"));

                        change.OrderCode = !dr.IsDBNull(dr.GetOrdinal("OrderCode")) ? dr.GetString(dr.GetOrdinal("OrderCode")) : string.Empty;

                        change.ChangePerson = dr.GetInt32(dr.GetOrdinal("ChangePerson"));

                        change.ChangePrice = dr.GetDecimal(dr.GetOrdinal("ChangePrice"));

                        change.OrderSaleId = dr.GetString(dr.GetOrdinal("OrderSaleId"));

                        change.OrderSale = !dr.IsDBNull(dr.GetOrdinal("OrderSale")) ? dr["OrderSale"].ToString() : string.Empty;

                        change.Content = !dr.IsDBNull(dr.GetOrdinal("Content")) ? dr["Content"].ToString() : string.Empty;

                        change.OperatorId = dr.GetString(dr.GetOrdinal("OperatorId"));

                        change.Operator = !dr.IsDBNull(dr.GetOrdinal("Operator")) ? dr["Operator"].ToString() : string.Empty;

                        change.IssueTime = dr.GetDateTime(dr.GetOrdinal("IssueTime"));

                        change.ChangeType = (ChangeType)dr.GetByte(dr.GetOrdinal("ChangeType"));

                        change.IsSure = dr.GetString(dr.GetOrdinal("IsSure")) == "1" ? true : false;

                        change.SurePersonId = !dr.IsDBNull(dr.GetOrdinal("SurePersonId")) ? dr.GetString(dr.GetOrdinal("SurePersonId")) : string.Empty;

                        change.SurePerson = !dr.IsDBNull(dr.GetOrdinal("SurePerson")) ? dr.GetString(dr.GetOrdinal("SurePerson")) : string.Empty;;

                        change.SureTime = !dr.IsDBNull(dr.GetOrdinal("SureTime")) ? dr.GetDateTime(dr.GetOrdinal("SureTime")) : (DateTime?)null;


                        list.Add(change);
                    }
                }

            return(list);
        }
예제 #16
0
 internal static string ToSerializedValue(this ChangeType?value)
 {
     return(value == null ? null : ((ChangeType)value).ToSerializedValue());
 }
예제 #17
0
    protected override async Task InvalidateCacheAsync(IReadOnlyCollection <ModifiedDocument <WebHook> > documents, ChangeType?changeType = null)
    {
        var keysToRemove = documents.Select(d => d.Value).Select(CacheKey).Distinct();
        await Cache.RemoveAllAsync(keysToRemove).AnyContext();

        var pagedKeysToRemove = documents.Select(d => PagedCacheKey(d.Value.OrganizationId, d.Value.ProjectId)).Distinct();

        foreach (string key in pagedKeysToRemove)
        {
            await Cache.RemoveByPrefixAsync(key).AnyContext();
        }

        await base.InvalidateCacheAsync(documents, changeType).AnyContext();
    }
예제 #18
0
        protected override async Task InvalidateCacheAsync(IReadOnlyCollection <ModifiedDocument <Employee> > documents, ChangeType?changeType = null)
        {
            await base.InvalidateCacheAsync(documents, changeType);

            await Cache.RemoveAllAsync(documents.Where(d => !String.IsNullOrEmpty(d.Value.EmailAddress)).Select(d => $"email:{d.Value.EmailAddress.ToLowerInvariant()}"));
        }
예제 #19
0
        public MockEnvironment Rename(string oldTfsPath, string newTfsPath, string content, ItemType itemType, ChangeType?changeType)
        {
            Change(changeType ?? ChangeType.Rename, itemType, newTfsPath, content);

            var mergeSource = new Mock <IMergeSource>();

            mergeSource.Setup(m => m.IsRename).Returns(true);
            mergeSource.Setup(m => m.ServerItem).Returns(oldTfsPath);
            _change.Setup(c => c.Rename).Returns(mergeSource.Object);

            return(this);
        }
예제 #20
0
 public MockEnvironment Edit(string tfsPath, string content, ItemType?itemType = null, ChangeType?changeType = null)
 {
     Change(changeType ?? ChangeType.Edit, itemType ?? ItemType.File, tfsPath, content);
     return(this);
 }
예제 #21
0
    protected override async Task InvalidateCacheAsync(IReadOnlyCollection <ModifiedDocument <Stack> > documents, ChangeType?changeType = null)
    {
        var keys = documents.UnionOriginalAndModified().Select(GetStackSignatureCacheKey).Distinct();
        await Cache.RemoveAllAsync(keys).AnyContext();

        await base.InvalidateCacheAsync(documents, changeType).AnyContext();
    }
        private Paragraph GetParagraph(StringBuilder stringBuilder, ChangeType?lineType, DiffPiece line)
        {
            Run       run;
            Paragraph paragraph = null;

            switch (lineType)
            {
            case ChangeType.Unchanged:

                run = new Run {
                    Text = stringBuilder.ToString()
                };
                paragraph = new Paragraph(run);
                break;

            case ChangeType.Modified:
                paragraph            = RenderDiffWords(line);
                paragraph.Background = _modifiedFillColor;
                break;

            case ChangeType.Deleted:
                run = new Run {
                    Text = stringBuilder.ToString()
                };
                paragraph = new Paragraph(run)
                {
                    Background = _deletedFillColor
                };
                break;

            case ChangeType.Inserted:
                run = new Run {
                    Text = stringBuilder.ToString()
                };
                paragraph = new Paragraph(run)
                {
                    Background = _insertedFillColor
                };
                break;

            case ChangeType.Imaginary:
                run = new Run {
                    Text = stringBuilder.ToString()
                };
                paragraph = new Paragraph(run)
                {
                    Background = _imaginaryFillColor
                };
                break;
            }

            if (paragraph != null)
            {
                paragraph.FontFamily = _fontFamily;
                paragraph.FontSize   = FontSize;
                paragraph.Margin     = _zeroThickness;
                paragraph.LineHeight = _lineHeight;
            }

            return(paragraph);
        }