Exemplo n.º 1
0
        public void EnsureValidPhysicalFileAndFolderNames(RepositoryPackage package, string rootFolderName)
        {
            // Make sure, that the max path length is shortened, if the root folder name length is very long.
            // But do not make the max path length bigger than 200, as the end users unzip path might be
            MaxPathLength = MaxAllowedPathLength - rootFolderName.Length < 200 ? MaxAllowedPathLength - rootFolderName.Length : MaxPathLength;

            CreateValidNames(package);

            var packageItems = ConvertToRepositoryObject(package);
            var tryCount     = 0;

            // Try as long as path is too long, and we haven't shortenend every item
            while (packageItems.Any(p => p.FullName.Length > MaxPathLength) && tryCount <= packageItems.Count)
            {
                // Get the new name for the longest element
                var itemToShorten = GetNewShorterNameForLongestElement(packageItems);

                // Update the original entry with the shortened entry
                UpdatePackage(package, itemToShorten);

                // Convert the changed package again
                packageItems = ConvertToRepositoryObject(package);

                tryCount++;
            }

            // Make sure, we do not have identical names in the same directory.
            CheckForDuplicateFilesInPackage(package);

            // Remove ending dots and spaces from names
            // Spaces shouldn't exist from cut-off or creating valid names, but just to be sure
            RemoveTrailingChars(package, ".");
            RemoveTrailingChars(package, " ");
        }
        /// <summary>
        /// Creates a repository package with file entries within the content folder.
        /// We are taking a shortcut here, because we are not building the full folder
        /// structure but use relative filenames.
        /// But in the end, this should work the same.
        /// </summary>
        /// <param name="fileName">The full file name of the zip file.</param>
        /// <param name="archiveRecordId">The archive record id</param>
        /// <returns></returns>
        private RepositoryPackage CreateRepositoryPackage(string fileName, string archiveRecordId)
        {
            const string contentFolderName = "content/";
            var          package           = new RepositoryPackage()
            {
                ArchiveRecordId = archiveRecordId, PackageFileName = (new FileInfo(fileName)).Name
            };

            using (var zipArchive = ZipFile.OpenRead(fileName))
            {
                // Sort the entries using their depth in the zip archive, so we can add
                foreach (var zipArchiveEntry in zipArchive.Entries.Where(f => f.FullName.StartsWith(contentFolderName) && f.Length > 0)
                         .OrderBy(e => e.FullName.Split('\\').Length).ThenBy(e => e.FullName))
                {
                    var relativeFileName = zipArchiveEntry.FullName.Substring(contentFolderName.Length);
                    package.Files.Add(new RepositoryFile
                    {
                        PhysicalName = relativeFileName,
                        SizeInBytes  = zipArchiveEntry.Length,
                        Exported     = true
                    });
                }
            }

            package.FileCount   = package.Files.Count;
            package.SizeInBytes = package.Files.Sum(f => f.SizeInBytes);

            return(package);
        }
Exemplo n.º 3
0
        private static string GetText(eSplitterObjectType splitterObjectType, RepositoryPackage oldRepositoryPackage, RepositoryPackage newRepositoryPackage)
        {
            var repositoryPackage = splitterObjectType.IsNew() ? newRepositoryPackage : oldRepositoryPackage;
            var path = splitterObjectType.IsSpec() ? repositoryPackage.SpecRepFullPath : repositoryPackage.BodyRepFullPath;

            return(File.ReadAllText(path));
        }
Exemplo n.º 4
0
        public static void SplitTest()
        {
            SplitPackageCaseBase splitCase = new SplitCase1();

            RepositoryPackage NewRepositoryPackage = new RepositoryPackage("NEW_" + splitCase.RepositoryPackage.Name, splitCase.RepositoryPackage.Owner);

            Config.Instanse().NewPackageOwner = NewRepositoryPackage.Owner;
            Config.Instanse().NewPackageName  = NewRepositoryPackage.Name;

            // Сортируем по убыванию, так как мы сначала должны создать новый пакет, затем обновить старый
            foreach (eSplitterObjectType splitterObjectType in Enum.GetValues(typeof(eSplitterObjectType)).Cast <eSplitterObjectType>().OrderByDescending(x => x))
            {
                if (splitCase.ExceptedPart.ContainsKey(splitterObjectType))
                {
                    Seri.Log.Information($"Begin split: {splitterObjectType}");

                    // Если мы дошли до OldSpec, и до этого генерировали OldBody, то OldSpec не должно повторно запускаться.
                    if (splitterObjectType != eSplitterObjectType.OldSpec || !splitCase.ExceptedPart.ContainsKey(eSplitterObjectType.OldBody))
                    {
                        splitCase.RunSplit(splitterObjectType, eSplitParam.GenerateHeader | eSplitParam.DirectlyUpdateRep);
                    }

                    var ExceptedText = splitCase.ExceptedPart[splitterObjectType];
                    Seri.Log.Information($"ExceptedText: {ExceptedText}");
                    var ActualText = GetText(splitterObjectType, splitCase.RepositoryPackage, NewRepositoryPackage);
                    Seri.Log.Information($"ActualText: {ActualText}");

                    Assert.AreEqual(ExceptedText, ActualText);
                    Seri.Log.Information($"Split Done");
                }
            }
        }
Exemplo n.º 5
0
        public static string RepositoryPackageMD5(RepositoryPackage package)
        {
            var sha1 = CalculateMD5path(package.SpecRepFullPath);
            var sha2 = CalculateMD5path(package.BodyRepFullPath);

            return(CalculateMD5string(sha1 + sha2));
        }
Exemplo n.º 6
0
        public bool CheckPackage(RepositoryPackage repPackage, out Package package)
        {
            Seri.Log.Verbose($"CheckParsedPackage begin repPackage={repPackage}");
            bool answer;

            package = null;

            var SavedInstancePath = GetSavedInstancePath(repPackage);

            Seri.Log.Verbose($"SavedInstancePath={SavedInstancePath}");
            if (!File.Exists(SavedInstancePath))
            {
                answer = false;
            }
            else
            {
                var    currentSha    = MD5Utils.RepositoryPackageMD5(repPackage);
                string fileText      = File.ReadAllText(SavedInstancePath);
                var    packageResult = JsonConvert.DeserializeObject <PackageResult>(fileText);
                package = packageResult._package;
                answer  = package.SHA == currentSha;
            }
            Seri.Log.Verbose($"CheckParsedPackage answer:{answer}");
            return(answer);
        }
Exemplo n.º 7
0
        public List <TempValidationObject> ConvertToRepositoryObject(RepositoryPackage package)
        {
            var retVal = new List <TempValidationObject>();

            AddFolder(retVal, package.Folders, "", "", 0);
            AddFiles(retVal, package.Files, "", "", 0);
            return(retVal);
        }
Exemplo n.º 8
0
        private static List <ElasticRepositoryObject> GetRepositoryItems(RepositoryPackage repositoryPackage)
        {
            var retVal = new List <ElasticRepositoryObject>();

            ProcessFiles(repositoryPackage.Files, "/", retVal);
            ProcessFolders(repositoryPackage.Folders, "/", retVal);
            return(retVal);
        }
        private string GetTempFolder(RepositoryPackage package)
        {
            var packageFileName = Path.Combine(Settings.Default.PickupPath, package.PackageFileName);
            var fi         = new FileInfo(packageFileName);
            var tempFolder = Path.Combine(fi.DirectoryName ?? throw new InvalidOperationException(), fi.Name.Remove(fi.Name.Length - fi.Extension.Length));

            return(tempFolder);
        }
Exemplo n.º 10
0
        public static void GetPackageTest2()
        {
            OraParser oracleParser = OraParser.Instance();

            DBRep.Instance().RepositoryPath = "C:\\TestRep";
            RepositoryPackage rep           = new RepositoryPackage("c_package", "alpha");

            var z = oracleParser.GetSavedPackage(rep);
        }
Exemplo n.º 11
0
 private void LoadOraclePackage(object obj)
 {
     if (obj is RepositoryObject repositoryObject)
     {
         var repositoryPackage = new RepositoryPackage(repositoryObject);
         pw = new ParserWindow(repositoryPackage);
         pw.Show();
     }
 }
Exemplo n.º 12
0
 public void Setup()
 {
     assetManager.Reset();
     cacheHelper.Reset();
     assetReady.Reset();
     passwordHelper.Reset();
     repositoryPackage = new RepositoryPackage {
         PackageFileName = "testfile.zip", ArchiveRecordId = "112"
     };
 }
Exemplo n.º 13
0
        public Package(ParsedPackagePart spec, ParsedPackagePart body, RepositoryPackage repositoryPackage)
        {
            elements = new List <PackageElement>();
            this.repositoryPackage = repositoryPackage;

            SetObject(body, ePackageElementDefinitionType.BodyFull, repositoryPackage.BodyRepFullPath);
            SetObject(spec, ePackageElementDefinitionType.Spec, repositoryPackage.SpecRepFullPath);

            UpdateBeginLine();
        }
Exemplo n.º 14
0
 public void Setup()
 {
     harness = new InMemoryTestHarness();
     assetManager.Reset();
     preparationEngine.Reset();
     scanProcessorMock.Reset();
     transformEngineMock.Reset();
     repositoryPackage = new RepositoryPackage {
         PackageFileName = "testfile.zip", ArchiveRecordId = "112"
     };
 }
        /// <summary>
        /// This procedure updates the repository package so it correctly reflects the contents of the package
        /// </summary>
        /// <param name="repositoryPackage"></param>
        /// <param name="paket"></param>
        private void UpdateRepositoryPackage(RepositoryPackage repositoryPackage, PaketDIP paket)
        {
            repositoryPackage.Files.Clear();
            repositoryPackage.Folders.Clear();

            var contentFolder = paket.Inhaltsverzeichnis.Ordner;

            Debug.Assert(contentFolder.Count == 1, "There should be only one folder at the content level");
            repositoryPackage.Files.AddRange(ConvertToRepositoryFiles(contentFolder.First().Datei));
            repositoryPackage.Folders.AddRange(ConvertToRepositoryFolders(contentFolder.First().Ordner));
        }
        private long GetSizeInBytesFromMetadata(RepositoryPackage package, bool onlyExported)
        {
            var retVal = package.Files.Sum(f => onlyExported ? f.Exported ? f.SizeInBytes : 0 : f.SizeInBytes);

            foreach (var folder in package.Folders)
            {
                retVal += GetSizeInBytesForFolder(folder, onlyExported);
            }

            return(retVal);
        }
        private int GetFileCountFromMetadata(RepositoryPackage package, bool onlyExported)
        {
            var retVal = package.Files.Count(f => !onlyExported || f.Exported);

            foreach (var folder in package.Folders)
            {
                retVal += GetFileCountForFolder(folder, onlyExported);
            }

            return(retVal);
        }
Exemplo n.º 18
0
        protected void SaveTextToFile()
        {
            RepositoryPackage = new RepositoryPackage(PackageName, "TestRepository");

            if (!Directory.Exists(RepositoryPackage.OwnerFullPath))
            {
                Directory.CreateDirectory(RepositoryPackage.OwnerFullPath);
            }

            File.WriteAllText(RepositoryPackage.SpecRepFullPath, SpecText);
            File.WriteAllText(RepositoryPackage.BodyRepFullPath, BodyText);
        }
Exemplo n.º 19
0
        public void SaveParsedPackage(RepositoryPackage repPackage, Package package)
        {
            if (!Directory.Exists(SAVED_PATH))
            {
                Directory.CreateDirectory(SAVED_PATH);
            }

            package.SetSha(MD5Utils.RepositoryPackageMD5(repPackage));
            var packageResult = new PackageResult(package, repPackage.ObjectName);
            var json          = JsonConvert.SerializeObject(packageResult);

            File.WriteAllText(GetSavedInstancePath(repPackage), json);
        }
        public RepositoryPackage CreateTestData()
        {
            var package = new RepositoryPackage();

            fileTestData       = File.ReadAllLines(Path.Combine(TestContext.CurrentContext.TestDirectory, "FileTestData.csv"), Encoding.UTF8);
            folderTestData     = File.ReadAllLines(Path.Combine(TestContext.CurrentContext.TestDirectory, "FolderTestData.csv"), Encoding.UTF8);
            folderIndexCounter = 0;
            fileIndexCounter   = 0;
            CreateTestFiles(package.Files);
            CreateTestFolders(package.Folders, 1);

            return(package);
        }
Exemplo n.º 21
0
        public void UpdatePackage(RepositoryPackage package, KeyValuePair <string, string> itemToShorten)
        {
            // Neet to find the item by the id
            RepositoryFile file;

            // Try the files in the root
            if (TryFindFile(package.Files, itemToShorten.Key, out file))
            {
                file.PhysicalName = itemToShorten.Value.Trim();
                return;
            }

            // Look in the subfolders and their files
            UpdateFolderOrFile(package.Folders, itemToShorten.Key, itemToShorten.Value);
        }
Exemplo n.º 22
0
        public Package GetSavedPackage(RepositoryPackage repositoryPackage)
        {
            Seri.Log.Debug($"Начинаем GetSavedPackage, repPackage={repositoryPackage}");
            Package answer = null;

            var manager = new PackageManager();

            if (manager.CheckPackage(repositoryPackage, out Package savedParderPackage))
            {
                Seri.Log.Debug("Пресохраненные данные найдены, возвращаем их");
                answer = savedParderPackage;
            }

            return(answer);
        }
        /// This version adds all the files from the file system to the repro package
        /// Only required for development, as normally the package is updated from the metadata.xml
        private void UpdateRepositoryPackageFromDisk(RepositoryPackage repositoryPackage, string tempFolder)
        {
            repositoryPackage.Files.Clear();
            repositoryPackage.Folders.Clear();

            var contentFolder = Path.Combine(tempFolder, "content");

            contentFolder = contentFolder.EndsWith("\\") ? contentFolder : contentFolder + "\\";
            var files = new DirectoryInfo(contentFolder).GetFiles("*.*", SearchOption.AllDirectories);

            repositoryPackage.Files.AddRange(files.Select(f => new RepositoryFile
            {
                Id           = f.FullName,
                PhysicalName = f.FullName.Replace(contentFolder, ""),
                Exported     = true
            }));
        }
Exemplo n.º 24
0
        /// <summary>
        /// Получить текст ссылки на метод в новом пакете
        /// </summary>
        /// <param name="element"></param>
        /// <param name="repositoryPackage"></param>
        /// <returns></returns>
        private string[] GetLink(PackageElement element, RepositoryPackage repositoryPackage)
        {
            Func <int, string> GetSpaces = (n) => string.Join(string.Empty, Enumerable.Range(0, n).Select(x => " "));

            // Получаем текст метода до ключевого слова IS/AS
            var position = element.Position[ePackageElementDefinitionType.BodyDeclaration];
            var text     = DBRep.Instance().GetTextOfFile(repositoryPackage.BodyRepFullPath, position.LineBeg, position.LineEnd, position.ColumnEnd);

            // Считаем количество пробелов до начала метода (до слова function/procedure)
            var SpaceBeforeTextBegin = 0;
            var ch = text[SpaceBeforeTextBegin];

            while (ch == ' ')
            {
                ch = text[++SpaceBeforeTextBegin];
            }
            var beginIndent = GetSpaces(SpaceBeforeTextBegin);

            // Текст ссылки на метод в новом пакете
            var NewPackageCallText = $"{Config.Instanse().NewPackageName.ToLower()}.{element.Name}";

            // Добавляем схему если новая схема отличается от текущей
            if (repositoryPackage.Owner.ToUpper() != Config.Instanse().NewPackageOwner.ToUpper())
            {
                NewPackageCallText = $"{Config.Instanse().NewPackageOwner.ToLower()}.{NewPackageCallText}";
            }
            // Добавляем слово return для функции
            if (element.ElementType == ePackageElementType.Function)
            {
                NewPackageCallText = $"return {NewPackageCallText}";
            }
            // Отступ длинною в текст ссылки (необходим для отступов параметров)
            var IndentName = GetSpaces(NewPackageCallText.Count());

            // Добавляем параметры
            string parametersText = string.Empty;

            if (element.Parametres.Any())
            {
                parametersText += "(";
                for (int i = 0; i < element.Parametres.Count; i++)
                {
                    var paramName = element.Parametres[i].Name;
                    // Первый параметр без отступов, остальные с отступами
                    parametersText += $"{(i == 0 ? string.Empty : $"{beginIndent}  {IndentName} ")}{paramName} => {paramName},\r\n";
        private void CreatePackageOnDisk(string tempRootName, RepositoryPackage package, List <string> fileTypesToIgnore)
        {
            // Save the primary data to the content direcotry
            var contentDirectroyName = Path.Combine(tempRootName, contentFolderName);

            if (!Directory.Exists(contentDirectroyName))
            {
                Directory.CreateDirectory(contentDirectroyName);
            }

            foreach (var repositoryFolder in package.Folders)
            {
                SaveFolderContent(contentDirectroyName, repositoryFolder, fileTypesToIgnore);
            }

            // Save the files of the root folder
            SaveFiles(contentDirectroyName, package.Files, fileTypesToIgnore);
        }
Exemplo n.º 26
0
        public async Task <Package> ParsePackage(RepositoryPackage repositoryPackage, bool allowNationalChars)
        {
            Seri.Log.Information($"Запускаем парсинг объекта, repPackage={repositoryPackage}");

            var spec = await GetPart(repositoryPackage.SpecRepFullPath, allowNationalChars);

            ObjectWasParsed?.Invoke(eRepositoryObjectType.Package_Spec);
            var body = await GetPart(repositoryPackage.BodyRepFullPath, allowNationalChars);

            ObjectWasParsed?.Invoke(eRepositoryObjectType.Package_Body);

            var answer  = new Package(spec, body, repositoryPackage);
            var manager = new PackageManager();

            manager.SaveParsedPackage(repositoryPackage, answer);

            ObjectWasParsed = null;
            return(answer);
        }
        /// <summary>
        ///     Initializes the folders in a helper collection.
        ///     From the entry point we traverse up to the "Ablieferungen" node
        ///     and down accoring to the information in the package.
        /// </summary>
        /// <param name="package">The package.</param>
        private void InitFolders(RepositoryPackage package)
        {
            Log.Verbose("Initializing folders for package {packageId}", package.PackageId);
            var entryPoint = repositoryAccess.GetRepositoryRoot(package.PackageId);

            entryFolder = repositoryAccess.GetCmisFolder(entryPoint.Id);

            // Traverse each parent and create a info folder object
            Log.Verbose("Traverse up from the entry folder");
            var        cmisFolder = entryFolder;
            FolderInfo previous   = null;

            while (cmisFolder.FolderParent != null)
            {
                var addedFolder = AddFolderToTreeList(cmisFolder, true, cmisFolder == entryFolder);

                // Add the new folder as a parent of the previous one
                // (remember we traverse up the hierachy here)
                if (previous != null)
                {
                    previous.Parent = addedFolder;
                }

                // When we reach "Ablieferungen" then we can stop
                if (addedFolder.FolderType == PackageFolderType.Ablieferung)
                {
                    break;
                }

                cmisFolder = cmisFolder.FolderParent;
                previous   = addedFolder;
            }

            // And now traverse down and the lower folders
            Log.Verbose("Traverse down from the entry folder");
            var parent = FoldersTreeList.Last();

            AddRepositoryFoldersToTreeList(package.Folders, parent);

            Log.Verbose("Finished to initialize folder tree. Data is {FoldersTreeList}", JsonConvert.SerializeObject(FoldersTreeList));
        }
Exemplo n.º 28
0
 public Task <PreprocessingResult> OptimizePdfIfRequired(RepositoryPackage package, string tempFolder, int primaerdatenAuftragId)
 {
     try
     {
         Log.Information("Starting to detect and optimize PDF for primaerdatenAuftrag with id {PrimaerdatenAuftragId}", primaerdatenAuftragId);
         analyzerOptimizePdf.AnalyzeRepositoryPackage(package, tempFolder);
         return(Task.FromResult(new PreprocessingResult()
         {
             Success = true
         }));
     }
     catch (Exception ex)
     {
         Log.Error(ex, "Unexpected error while detect and optimize PDF for primaerdatenAuftrag with id {PrimaerdatenAuftragId}",
                   primaerdatenAuftragId);
         return(Task.FromResult(new PreprocessingResult()
         {
             Success = false, ErrorMessage = "Unexpected error while detect and optimize PDF."
         }));
     }
 }
Exemplo n.º 29
0
 public Task <PreprocessingResult> DetectAndFlagLargeDimensions(RepositoryPackage package, string tempFolder, int primaerdatenAuftragId)
 {
     try
     {
         Log.Information("Starting to detect large dimensions in documents for primaerdatenAuftrag with id {PrimaerdatenAuftragId}",
                         primaerdatenAuftragId);
         analyzerDetectAndFlagLargeDimensions.AnalyzeRepositoryPackage(package, tempFolder);
         return(Task.FromResult(new PreprocessingResult {
             Success = true
         }));
     }
     catch (Exception ex)
     {
         Log.Error(ex,
                   "Unexpected error while detecting large dimensions in documents for primaerdatenAuftrag with id {PrimaerdatenAuftragId}",
                   primaerdatenAuftragId);
         return(Task.FromResult(new PreprocessingResult
         {
             Success = false, ErrorMessage = "Unexpected error while detecting large dimensions in documents."
         }));
     }
 }
Exemplo n.º 30
0
        private void RemoveTrailingChars(RepositoryPackage package, string nameEnding)
        {
            var packageItems = ConvertToRepositoryObject(package);

            while (packageItems.Any(p => p.Name.EndsWith(nameEnding, StringComparison.CurrentCultureIgnoreCase)))
            {
                foreach (var item in packageItems.Where(p => p.Name.EndsWith(nameEnding)))
                {
                    var newValue = item.Name;
                    // remove all trailing dots at the end
                    while (newValue.EndsWith(nameEnding))
                    {
                        newValue = newValue.Substring(0, newValue.Length - 1).Trim();
                    }

                    UpdatePackage(package, new KeyValuePair <string, string>(item.RepositoryId, newValue));
                }

                // New get new package items and test, if no forbidden endings exist.
                packageItems = ConvertToRepositoryObject(package);
            }
        }