diff --git a/src/SQL2Linked/Implementations/ProjectStructuralData.cs b/src/SQL2Linked/Implementations/ProjectStructuralData.cs index c9c8fe1f69894c0550c2bb478610877a0bc97e62..b3f63d4208c69e98cc01e93884cb4a49c2fb56e5 100644 --- a/src/SQL2Linked/Implementations/ProjectStructuralData.cs +++ b/src/SQL2Linked/Implementations/ProjectStructuralData.cs @@ -1,5 +1,6 @@ using Coscine.Database.DataModel; using Coscine.Database.Models; +using Coscine.Database.Util; using VDS.RDF; namespace SQL2Linked.Implementations @@ -17,6 +18,17 @@ namespace SQL2Linked.Implementations private ProjectRoleModel ProjectRoleModel = new ProjectRoleModel(); private ProjectResourceModel ProjectResourceModel = new ProjectResourceModel(); + // Override to also receive deleted projects + public override IEnumerable<Project> GetAll() + { + return DatabaseConnection.ConnectToDatabase((db) => + { + return + (from tableEntry in Model.GetITableFromDatabase(db) + select tableEntry).ToList(); + }); + } + public override IEnumerable<IGraph> ConvertToLinkedData(IEnumerable<Project> entries) { IEnumerable<Visibility> visibilities = VisibilityModel.GetAll(); diff --git a/src/SQL2Linked/Implementations/ResourceStructuralData.cs b/src/SQL2Linked/Implementations/ResourceStructuralData.cs index 43829ce0a237711b722d52efe97e6b385ba7ecae..c603d164133929ffc3925ccc0b0f5ce5795ab983 100644 --- a/src/SQL2Linked/Implementations/ResourceStructuralData.cs +++ b/src/SQL2Linked/Implementations/ResourceStructuralData.cs @@ -1,5 +1,6 @@ -using Coscine.Database.DataModel; +using Coscine.Database.DataModel; using Coscine.Database.Models; +using Coscine.Database.Util; using VDS.RDF; using VDS.RDF.Query; @@ -19,6 +20,17 @@ namespace SQL2Linked.Implementations private ProjectResourceModel ProjectResourceModel = new ProjectResourceModel(); private LicenseModel LicenseModel = new LicenseModel(); + // Override to also receive deleted resources + public override IEnumerable<Resource> GetAll() + { + return DatabaseConnection.ConnectToDatabase((db) => + { + return + (from tableEntry in Model.GetITableFromDatabase(db) + select tableEntry).ToList(); + }); + } + public override IEnumerable<IGraph> ConvertToLinkedData(IEnumerable<Resource> entries) { IEnumerable<Visibility> visibilities = VisibilityModel.GetAll(); @@ -92,6 +104,12 @@ namespace SQL2Linked.Implementations AssertToGraphLiteralNode(graph, resourceGraphName, dcterms + "description", entry.Description); Console.WriteLine($"For resource '{entry.DisplayName}' will migrate triple '{resourceGraphName} {dcterms}description {entry.Description}'. "); + // Skipping broken resources + if (string.IsNullOrWhiteSpace(entry.ApplicationProfile)) + { + continue; + } + AssertToGraphUriNode(graph, resourceGraphName, dcterms + "conformsTo", entry.ApplicationProfile); Console.WriteLine($"For resource '{entry.DisplayName}' will migrate triple '{resourceGraphName} {dcterms}conformsTo {entry.ApplicationProfile}'. "); @@ -107,6 +125,9 @@ namespace SQL2Linked.Implementations AssertToGraphUriNode(graph, resourceGraphName, foaf + "homepage", resourceGraphName); Console.WriteLine($"For resource '{entry.DisplayName}' will migrate triple '{resourceGraphName} {foaf}homepage {resourceGraphName}'. "); + AssertToGraphLiteralNode(graph, resourceGraphName, cosc + "terms/resource#deleted", entry.Deleted.ToString().ToLower(), new Uri("http://www.w3.org/2001/XMLSchema#boolean")); + Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{resourceGraphName} {cosc}terms/resource#deleted {entry.Deleted}'. "); + SparqlParameterizedString cmdString = new SparqlParameterizedString { CommandText = "SELECT DISTINCT ?g " + @@ -139,6 +160,9 @@ namespace SQL2Linked.Implementations AssertToGraphBlankAndUriNode(graph, blankNode, acl + "accessTo", resourceGraphName); Console.WriteLine($"For resource '{entry.DisplayName}' will migrate triple '{blankNode} {acl}accessTo {resourceGraphName}'. "); + AssertToGraphBlankAndUriNode(graph, blankNode, acl + "default", resourceGraphName); + Console.WriteLine($"For resource '{entry.DisplayName}' will migrate triple '{blankNode} {acl}default {resourceGraphName}'. "); + AssertToGraphBlankAndUriNode(graph, blankNode, acl + "mode", acl + "Control"); Console.WriteLine($"For resource '{entry.DisplayName}' will migrate triple '{blankNode} {acl}accessTo {acl}Control'. "); } diff --git a/src/SQL2Linked/Implementations/UserStructuralData.cs b/src/SQL2Linked/Implementations/UserStructuralData.cs index 29f811134e4aca5bf73595e276555698fa2ed524..59a6999999e5f24a7a89cb95e2c6c866c10880b4 100644 --- a/src/SQL2Linked/Implementations/UserStructuralData.cs +++ b/src/SQL2Linked/Implementations/UserStructuralData.cs @@ -11,6 +11,12 @@ namespace SQL2Linked.Implementations public readonly Uri rdf = new("http://www.w3.org/1999/02/22-rdf-syntax-ns#"); public readonly Uri foaf = new("http://xmlns.com/foaf/0.1/"); + // Override to only transform users which have accepted the TOS + public override IEnumerable<User> GetAll() + { + return Model.GetAllWhere((user) => user.Tosaccepteds.Any()); + } + public override IEnumerable<IGraph> ConvertToLinkedData(IEnumerable<User> entries) { var graphs = new List<IGraph>(); diff --git a/src/SQL2Linked/StructuralData.cs b/src/SQL2Linked/StructuralData.cs index 4d2e231cd558ffd42b71463673b1b671e4a49fc3..9f9f113569964718b67b037da6c7cc0a856c485c 100644 --- a/src/SQL2Linked/StructuralData.cs +++ b/src/SQL2Linked/StructuralData.cs @@ -25,11 +25,16 @@ namespace SQL2Linked public abstract IEnumerable<IGraph> ConvertToLinkedData(IEnumerable<S> entries); + public virtual IEnumerable<S> GetAll() + { + return Model.GetAll(); + } + public void Migrate(bool dummyMode) { var spacer = new string('-', 35); Console.WriteLine($"\n{spacer}\n{typeof(T).Name}\n{spacer}"); - var graphs = ConvertToLinkedData(Model.GetAll()); + var graphs = ConvertToLinkedData(GetAll()); if (!dummyMode) { StoreGraphs(graphs); @@ -56,6 +61,7 @@ namespace SQL2Linked Console.WriteLine(); } } + public void AssertToGraphUriNode(IGraph graph, string graphSubject, string graphPredicate, string graphObject) { graph.Assert( @@ -66,6 +72,7 @@ namespace SQL2Linked ) ); } + public void AssertToGraphLiteralNode(IGraph graph, string graphSubject, string graphPredicate, string graphObject, Uri? objectType = null) { graph.Assert(