Beispiel #1
0
        static void GetApplicationsSources(DateTime yearMonthDay)
        {
            const string applicationsFolder = "applications";
            const string uncPath            = @"\\novato\applications\Backup";

            // assume applications sources are at drive F:
            foreach (string filePath in GetFiles(uncPath, yearMonthDay))
            {
                if (!filePath.EndsWith("7z"))
                {
                    continue;
                }

                ArchivePart part = new ArchivePart(uncPath, applicationsFolder);
                part._files = new List <string> {
                    filePath
                };

                Archive archive = new Archive(new List <ArchivePart> {
                    part
                }, false);

                string archiveName = "Company_" + filePath.Substring(filePath.LastIndexOf(@"\") + 1);

                s_applicationsArchives[archiveName] = archive;
            }
        }
Beispiel #2
0
        static void GetApplicationsSources(DateTime yearMonthDay)
        {
            string applicationsDrive  = @"F:\";
            string applicationsFolder = "applications";

            // assume applications sources are at drive F:
            foreach (string filePath in GetFiles(applicationsDrive, yearMonthDay))
            {
                if (!filePath.StartsWith(Path.Combine(applicationsDrive, applicationsFolder)) ||
                    !filePath.EndsWith(".tar.bz2"))
                {
                    continue;
                }

                ArchivePart part = new ArchivePart(applicationsFolder, applicationsDrive);
                part._files = new List <string> {
                    filePath
                };

                Archive archive = new Archive(new List <ArchivePart> {
                    part
                });

                string archiveName = "Company_" + filePath.Substring(applicationsDrive.Length) + ".7z";

                s_applicationsArchives[archiveName] = archive;
            }
        }
        protected override void ReadElementValueEvent(object sender, ReadElementEventArgs eventArgs)
        {
            if (eventArgs.Path.Matches("systemID", "arkivdel"))
                _currentArchivePart = new ArchivePart {SystemId = eventArgs.Value};

            if (eventArgs.Path.Matches("arkivdelstatus", "arkivdel"))
                _currentArchivePart.Status = eventArgs.Value;
        }
Beispiel #4
0
 protected override void ReadElementValueEvent(object sender, ReadElementEventArgs eventArgs)
 {
     if (eventArgs.Path.Matches("systemID", "arkivdel"))
     {
         _currentArchivePart = new ArchivePart {
             SystemId = eventArgs.Value
         };
         _archiveParts.Add(_currentArchivePart);
     }
 }
Beispiel #5
0
        private int CountTotalNumberOfPrecedents(ArchivePart currentArchivePart)
        {
            int totalNumberOfPrecedentsResult = new int[]
            {
                currentArchivePart.NumberOfPrecedentsInCasefolders,
                currentArchivePart.NumberOfPrecedentsInJournalposts
            }.Sum();

            return(totalNumberOfPrecedentsResult);
        }
Beispiel #6
0
        private int CountTotalNumberOfCrossReferences(ArchivePart currentArchivePart)
        {
            int totalNumberOfCrossReferencesResult = new[]
            {
                currentArchivePart.ClassReferenceCount,
                currentArchivePart.BasicRegistrationReferenceCount,
                currentArchivePart.FolderReferenceCount
            }.Sum();

            return(totalNumberOfCrossReferencesResult);
        }
        protected override void ReadElementValueEvent(object sender, ReadElementEventArgs eventArgs)
        {
            if (eventArgs.Path.Matches("systemID", "arkivdel"))
            {
                _currentArchivePart = new ArchivePart {
                    SystemId = eventArgs.Value
                };
                _archiveParts.Add(_currentArchivePart);
            }

            if (eventArgs.Path.Matches("opprettetDato", "registrering"))
            {
                int year = DateTime.Parse(eventArgs.Value).Year;

                if (_currentArchivePart.RegistrationsByYear.ContainsKey(year))
                {
                    _currentArchivePart.RegistrationsByYear[year]++;
                }
                else
                {
                    _currentArchivePart.RegistrationsByYear.Add(year, 1);
                }
            }
        }
        protected override void ReadElementValueEvent(object sender, ReadElementEventArgs eventArgs)
        {
            if (eventArgs.Path.Matches("systemID", "arkivdel"))
            {
                _currentArchivePart = new ArchivePart {
                    SystemId = eventArgs.Value
                };
                _archiveParts.Add(_currentArchivePart);
            }

            if (!eventArgs.Path.Matches("opprettetDato", "registrering"))
            {
                return;
            }

            if (Noark5TestHelper.TryParseArchiveDate(eventArgs.Value, out DateTime registrationCreatedTime))
            {
                _currentArchivePart.RegistrationCreationDates.Add(registrationCreatedTime);
            }
            else
            {
                _invalidRegistrationCreationDateCount++;
            }
        }
Beispiel #9
0
        public override bool ReadPart(FilePart part)
        {
            // одна часть архива - она полностью пойдет на декомпрессию
            var           archivePart   = new ArchivePart();
            ArhivePortion arhivePortion = null;

            while (archivePart != null)
            {
                if (_portionFromPrev != null)
                {
                    // используем порцию оставщуюся с предыдущей части
                    arhivePortion    = _portionFromPrev;
                    _portionFromPrev = null;
                }
                else
                {
                    // читаем порцию из файла
                    var buffer = new byte[BufferSize];
                    var count  = SourceStream.Read(buffer, 0, buffer.Length);

                    if (count > 0)
                    {
                        _totalReadByte = _totalReadByte + count;

                        if (arhivePortion == null)
                        {
                            arhivePortion = new ArhivePortion(new BytesBuffer(buffer, 0, count - 1));
                        }
                        else
                        {
                            // предыдущая порция закончилась на части заголовка
                            arhivePortion.Append(new BytesBuffer(buffer, 0, count - 1));
                        }
                    }
                    else
                    {
                        // всё в part
                        part.Source = archivePart.ToArray();
                        part.IsLast = true;
                        Logger.Add($"Поток {Thread.CurrentThread.Name} прочитал последнюю часть файла {part} ");
                        return(true);
                    }
                }

                // нашли заголовок
                if (arhivePortion.IsExistsTitle)
                {
                    // нашли заголовок полностью
                    if (arhivePortion.IsExistsAllTitle)
                    {
                        // заголовок в начале
                        if (arhivePortion.StartsWithTitle)
                        {
                            // часть архива пустая - нашли заголовок для текущей части
                            if (archivePart.IsEmpty)
                            {
                                // записываем в часть все что до следующего заголовка
                                archivePart.AppendTitleAndDataBeforeNextTitle(arhivePortion);
                                if (arhivePortion.IsNotEmpty)
                                {
                                    // если остаток порции не пустой, то возможно начался новый заголовок
                                    // в остатке есть заголовок полностью
                                    if (arhivePortion.IsExistsAllTitle)
                                    {
                                        // всё в part
                                        part.Source = archivePart.ToArray();
                                        // а остаток нужно "припасти" для следующей part
                                        _portionFromPrev = arhivePortion;
                                        return(true);
                                    }
                                    // в остатке есть заголовок, но не полностью
                                    // !!! окончить текущую часть не имеем права - не удостоверившись, что это заголовок
                                    // поэтому здесь ничего не делаем
                                    // ... и далее на чтение следующей порции
                                }
                                else
                                {
                                    arhivePortion = null;
                                    // ... и дальше на чтение следующей порции
                                }
                            }
                            else
                            {
                                // нашли заголовок для следующей части - значит текущая часть сформирована, а все что осталось в порции уже для следующей части
                                // порцию нужно "припасти" для следующей part
                                _portionFromPrev = arhivePortion;
                                // всё в part
                                part.Source = archivePart.ToArray();
                                return(true);
                            }
                        }
                        else
                        {
                            // заголовок не в начале порции
                            if (archivePart.IsEmpty)
                            {
                                throw new FormatException(
                                          $"part {part}. archivePart ещё пустая, а в порции заголовок не в начале - неверный формат архива");
                            }

                            // добавляем в часть всё что до заголовка
                            archivePart.AppendDataBeforeTitle(arhivePortion);
                            // всё в part
                            part.Source = archivePart.ToArray();
                            // порцию нужно "припасти" для следующей part
                            _portionFromPrev = arhivePortion;
                            return(true);
                        }
                    }
                    else
                    {
                        // нашли заголовок не полностью
                        // !!! окончить текущую часть не имеем права - не удостоверившись, что это заголовок
                        // поэтому здесь ничего не делаем
                        // ... и далее на чтение следующей порции
                    }
                }
                else
                {
                    // заголовок не нашли в порции
                    if (archivePart.IsEmpty)
                    {
                        throw new FormatException("Часть ещё пустая, а в порции нет заголовка - неверный формат архива");
                    }
                    // всю прочитанную порцию архива в часть
                    archivePart.AppendAllPortion(arhivePortion);
                    Debug.Assert(arhivePortion.IsEmpty, "Всё извлекли из порции, а она всё равно не пустая");
                    arhivePortion = null;
                    // ... и далее на чтение следующей порции
                }
            }
            throw new Exception("Обнаружена неправильная работа ArсhivePartReader");
        }