Exemplo n.º 1
0
        public ImportedRecord SetFilterData(ImportedRecord importedRecord, IDictionary <string, List <string> > filteringExpressions,
                                            IProjectParser parser)
        {
            if (importedRecord.IsDeleted.HasValue && importedRecord.IsDeleted.Value)
            {
                importedRecord.IsSuitable = false;
                return(importedRecord);
            }

            var importedRecordDb = m_importedProjectMetadataManager.GetImportedProjectMetadataByExternalId(importedRecord.ExternalId);

            importedRecord.IsNew = importedRecordDb?.Project == null;

            if (importedRecord.IsNew)
            {
                foreach (var item in parser.GetPairKeyValueList(importedRecord))
                {
                    filteringExpressions.TryGetValue(item.Key, out var filterExpressions);
                    if (filterExpressions == null)
                    {
                        continue;
                    }

                    if (filterExpressions.Select(Regex.Escape).Select(expr => expr.Replace("%", ".*"))
                        .Any(expr => Regex.IsMatch(item.Value, expr)))
                    {
                        importedRecord.IsSuitable = true;
                        return(importedRecord);
                    }
                }

                importedRecord.IsSuitable = false;
            }
            else
            {
                var importHistory = m_importHistoryManager.GetLastImportHistoryForImportedProjectMetadata(importedRecordDb.Id);

                if (!importedRecord.TimeStamp.HasValue ||
                    importHistory == null ||
                    importHistory.Date < importedRecord.TimeStamp.Value ||
                    !string.IsNullOrEmpty(importedRecord.FaultedMessage))
                {
                    importedRecord.ProjectId = importedRecordDb.Project.Id;
                    importedRecord.ImportedProjectMetadataId = importedRecordDb.Id;
                    importedRecord.IsSuitable = true;
                }
                else
                {
                    importedRecord.IsSuitable = false;
                }
            }

            return(importedRecord);
        }