From eb791fba3557141e62da6bbe8b08d0f046dca8a0 Mon Sep 17 00:00:00 2001
From: Hanna Fuehr <fuehr@itc.rwth-aachen.de>
Date: Mon, 8 Aug 2022 13:26:46 +0200
Subject: [PATCH] WIP: Migrate project structured data to linked data
 (coscine/issues#2085)

---
 .../Implementations/ProjectStructuralData.cs  | 40 ++++++++++++++++---
 1 file changed, 35 insertions(+), 5 deletions(-)

diff --git a/src/SQL2Linked/Implementations/ProjectStructuralData.cs b/src/SQL2Linked/Implementations/ProjectStructuralData.cs
index ec9da66..5873213 100644
--- a/src/SQL2Linked/Implementations/ProjectStructuralData.cs
+++ b/src/SQL2Linked/Implementations/ProjectStructuralData.cs
@@ -15,19 +15,21 @@ namespace SQL2Linked.Implementations
         public readonly Uri rdf = new("http://www.w3.org/1999/02/22-rdf-syntax-ns#");
         public readonly Uri cosc = new("https://purl.org/coscine/");
         private VisibilityModel VisibilityModel = new VisibilityModel();
-        private RoleModel RoleModel = new RoleModel();
+        private ProjectRoleModel ProjectRoleModel = new ProjectRoleModel();
+        private ProjectResourceModel ProjectResourceModel = new ProjectResourceModel();
 
         public override IEnumerable<IGraph> ConvertToLinkedData(IEnumerable<Project> entries)
         {
             IEnumerable<Visibility> visibilities = VisibilityModel.GetAll();
-            IEnumerable<Role> roles = RoleModel.GetAll();
+            IEnumerable<ProjectRole> projectRoles = ProjectRoleModel.GetAll();
+            IEnumerable<ProjectResource> projectResources = ProjectResourceModel.GetAll();
 
             var graphs = new List<IGraph>();
-            string resourceUrlPrefix = "https://hdl.handle.net/" + Prefix;
+            string projectUrlPrefix = "https://hdl.handle.net/" + Prefix;
 
             foreach (var entry in entries)
             {
-                var projectGraphName = $"{resourceUrlPrefix}/{entry.Id}";
+                var projectGraphName = $"{projectUrlPrefix}/{entry.Id}";
 
                 var graph = new Graph();
                 graph.BaseUri = new Uri(projectGraphName);
@@ -53,7 +55,7 @@ namespace SQL2Linked.Implementations
                 AssertToGraphLiteralNode(graph, projectGraphName, dcat + "endDate", entry.EndDate.ToString());
                 Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcat}endDate {entry.EndDate}'. ");
 
-                if (entry.Keywords.Any())
+                if (entry.Keywords!= null)
                 {
                     var listKeywords = entry.Keywords.Split(';').ToList();
                     foreach (var keyword in listKeywords)
@@ -97,9 +99,37 @@ namespace SQL2Linked.Implementations
                 AssertToGraphUriNode(graph, projectGraphName, foaf + "homepage", projectGraphName);
                 Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {foaf}homepage {projectGraphName}'. ");
 
+                foreach (var projectRole in projectRoles)
+                {
+                    if (entry.Id == projectRole.ProjectId)
+                    {
+                        AssertToGraphUriNode(graph, projectGraphName, vcard + "hasMember", cosc + "users/" + projectRole.UserId);
+                        Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {vcard}hasMember {cosc}users/{projectRole.UserId}'. ");
+
+                        var blankNode = graph.CreateBlankNode();
 
+                        AssertToGraphBlankAndUriNode(graph, blankNode, rdf + "type", org + "Membership");
+                        Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{blankNode} {rdf}type {org}Membership'. ");
 
+                        AssertToGraphBlankAndUriNode(graph, blankNode, org + "organization", projectGraphName);
+                        Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{blankNode} {org}organization {projectGraphName}'. ");
 
+                        AssertToGraphBlankAndUriNode(graph, blankNode, org + "role", cosc + "roles/" + projectRole.RoleId);
+                        Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{blankNode} {org}role {cosc}roles/{projectRole.RoleId}'. ");
+
+                        AssertToGraphBlankAndUriNode(graph, blankNode, org + "member", cosc + "users/" + projectRole.UserId);
+                        Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{blankNode} {org}member {cosc}users/{projectRole.UserId}'. ");
+                    }
+                }
+
+                foreach (var projectResource in projectResources)
+                {
+                    if(entry.Id == projectResource.ProjectId)
+                    {
+                        AssertToGraphUriNode(graph, projectGraphName, dcat + "catalog", $"{projectUrlPrefix}/{projectResource.ResourceId}");
+                        Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcat}catalog {projectUrlPrefix}/{projectResource.ResourceId}'. ");
+                    }
+                }
             }
             return graphs;
         }
-- 
GitLab