Exemplo n.º 1
0
            private static bool AreAllDifferencesAllowed([NotNull] IRow row1, int tableIndex1,
                                                         [NotNull] HashSet <string> set1,
                                                         [NotNull] IRow row2, int tableIndex2,
                                                         [NotNull] HashSet <string> set2,
                                                         [NotNull]
                                                         AllowedDifferenceCondition condition)
            {
                HashSet <string> nonEmptySet1 = set1.Count == 0 ? _nullStringSet : set1;
                HashSet <string> nonEmptySet2 = set2.Count == 0 ? _nullStringSet : set2;

                return(nonEmptySet1.All(v1 => nonEmptySet2.All(
                                            v2 => condition.IsFulfilled(row1, tableIndex1, v1,
                                                                        row2, tableIndex2, v2))));
            }
Exemplo n.º 2
0
            public FieldInfo(
                [NotNull] string fieldName,
                [CanBeNull] string multiValueSeparator = null,
                [CanBeNull] IValueTransformation valueTransformation = null,
                [CanBeNull] AllowedDifferenceCondition allowedDifferenceCondition = null)
            {
                Assert.ArgumentNotNullOrEmpty(fieldName, nameof(fieldName));

                FieldName                   = fieldName;
                _valueTransformation        = valueTransformation;
                _allowedDifferenceCondition = allowedDifferenceCondition;
                MultiValueSeparator         = multiValueSeparator == null
                                                              ? null
                                                              : multiValueSeparator.Length == 0
                                                                      ? null
                                                                      : multiValueSeparator;
            }
Exemplo n.º 3
0
        private static IDictionary <string, IValueTransformation> ParseFieldOptions(
            [CanBeNull] IEnumerable <string> fieldOptions, bool caseSensitive,
            [NotNull] out IDictionary <string, AllowedDifferenceCondition>
            allowedDifferenceConditions)
        {
            allowedDifferenceConditions = new Dictionary <string, AllowedDifferenceCondition>(
                StringComparer.OrdinalIgnoreCase);

            if (fieldOptions == null)
            {
                return(new Dictionary <string, IValueTransformation>());
            }

            const char fieldSeparator = ':';

            var transformations = new Dictionary <string, ChainedValueTransformation>(
                StringComparer.OrdinalIgnoreCase);

            foreach (string fieldOption in fieldOptions)
            {
                if (StringUtils.IsNullOrEmptyOrBlank(fieldOption))
                {
                    // ignore empty options
                    continue;
                }

                int separatorIndex = fieldOption.IndexOf(fieldSeparator);
                if (separatorIndex <= 0 || separatorIndex >= fieldOption.Length - 1)
                {
                    throw CreateInvalidFieldOptionException(fieldOption);
                }

                string fieldName = fieldOption.Substring(0, separatorIndex).Trim();
                string option    = fieldOption.Substring(separatorIndex + 1).Trim();

                if (StringUtils.IsNullOrEmptyOrBlank(fieldName))
                {
                    throw CreateInvalidFieldOptionException(fieldOption);
                }

                if (StringUtils.IsNullOrEmptyOrBlank(option))
                {
                    throw CreateInvalidFieldOptionException(fieldOption);
                }

                if (option.StartsWith(_allowedDifferenceConditionPrefix,
                                      StringComparison.OrdinalIgnoreCase))
                {
                    AllowedDifferenceCondition allowedDifferenceCondition =
                        CreateAllowedDifferenceCondition(option, fieldName, caseSensitive);

                    if (allowedDifferenceCondition != null)
                    {
                        if (allowedDifferenceConditions.ContainsKey(fieldName))
                        {
                            throw new InvalidConfigurationException(
                                      "Only one 'allowedDifferenceCondition' is supported per field");
                        }

                        allowedDifferenceConditions.Add(fieldName, allowedDifferenceCondition);
                    }
                }
                else
                {
                    ChainedValueTransformation chainedValueTransformation;
                    if (!transformations.TryGetValue(fieldName, out chainedValueTransformation))
                    {
                        chainedValueTransformation = new ChainedValueTransformation();
                        transformations.Add(fieldName, chainedValueTransformation);
                    }

                    chainedValueTransformation.Add(
                        CreateValueTransformation(option, fieldName, caseSensitive));
                }
            }

            return(transformations.ToDictionary
                   <KeyValuePair <string, ChainedValueTransformation>, string, IValueTransformation>
                       (pair => pair.Key,
                       pair => pair.Value,
                       StringComparer.OrdinalIgnoreCase));
        }