Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement first pass at platform export tool #1672

Merged
merged 11 commits into from
Dec 11, 2023
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Changed

- Add command to dump current platform DB to directory

## [8.1.1] - 2023-12-01

### Changed
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
// Copyright (c) The University of Dundee 2018-2023
// This file is part of the Research Data Management Platform (RDMP).
// RDMP is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
// RDMP is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along with RDMP. If not, see <https://www.gnu.org/licenses/>.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using Rdmp.Core.Curation.Data;
using Rdmp.Core.Repositories;

namespace Rdmp.Core.CommandExecution.AtomicCommands;

// Dump all compatible objects from the current platform database(s) into a
// YAML/JSON directory for SQL-free operation.
public class ExecuteCommandExportDatabaseToDir : BasicCommandExecution
{
private readonly IBasicActivateItems _activator;
private readonly DirectoryInfo _target;

public ExecuteCommandExportDatabaseToDir(IBasicActivateItems activator, [DemandsInitialization("Where the platform directory should be created")] string target)
{
_target = new DirectoryInfo(target);
_activator = activator;
}

private readonly List<string> ignoreList = new() { "Rdmp.Core.DataQualityEngine.Data.DQEGraphAnnotation", "Rdmp.Core.DataQualityEngine.Data.Evaluation" };

public override void Execute()
{
base.Execute();
var repo = new YamlRepository(_target);
foreach (var t in repo.GetCompatibleTypes())
{
if (ignoreList.Contains(t.FullName)) continue;
try
{
Console.WriteLine(t.FullName);
foreach (var o in _activator.GetRepositoryFor(t).GetAllObjects(t))
repo.SaveToDatabase(o);
}
catch(Exception)
{
Console.WriteLine($"Unable to find repo for {t.FullName}");
}
Comment on lines +45 to +48

Check notice

Code scanning / CodeQL

Generic catch clause

Generic catch clause.

}
Comment on lines +36 to +50

Check notice

Code scanning / CodeQL

Missed opportunity to use Where

This foreach loop [implicitly filters its target sequence](1) - consider filtering the sequence explicitly using '.Where(...)'.
}
}