Skip to content
Snippets Groups Projects
Select Git revision
  • 049998215056daf3adbf27b3b1cf79fa30203e81
  • master default protected
  • developement_1 protected
  • Version_1.2.4
  • Version_1.2.3
  • Version_1.2.2
  • Version_1.2.1
  • Version_1.2.0
  • Version_1.0.1
  • Version_1.0.0
  • Version_0.1.0
  • Version_0.0.6
  • Version_0.0.5
  • Version_0.0.4
  • Version_0.0.3
  • Version_0.0.2
  • Version_0.0.1
17 results

OglViewerWidget.cpp

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    ProjectStructuralData.cs 10.43 KiB
    using Coscine.Database.DataModel;
    using Coscine.Database.Models;
    using Coscine.Database.Util;
    using VDS.RDF;
    
    namespace SQL2Linked.Implementations
    {
        public class ProjectStructuralData : StructuralData<Project, ProjectModel>
        {
            public readonly Uri org = new("http://www.w3.org/ns/org#");
            public readonly Uri dcat = new("http://www.w3.org/ns/dcat#");
            public readonly Uri dcterms = new("http://purl.org/dc/terms/");
            public readonly Uri foaf = new("http://xmlns.com/foaf/0.1/");
            public readonly Uri vcard = new("http://www.w3.org/2006/vcard/ns#");
            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 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();
                IEnumerable<ProjectRole> projectRoles = ProjectRoleModel.GetAll();
                IEnumerable<ProjectResource> projectResources = ProjectResourceModel.GetAll();
    
                var graphs = new List<IGraph>();
                var projectUrlHandlePrefix = "https://hdl.handle.net/" + Prefix;
                var projectUrlPrefix = "https://purl.org/coscine/projects";
                var resourceUrlPrefix = "https://purl.org/coscine/resources";
    
                foreach (var entry in entries)
                {
                    var projectGraphName = $"{projectUrlPrefix}/{entry.Id}";
                    var projectHandleName = $"{projectUrlHandlePrefix}/{entry.Id}";
    
                    var graph = new Graph();
                    graph.BaseUri = new Uri(projectGraphName);
    
                    AssertToGraphUriNode(graph, projectGraphName, rdf + "type", dcat + "Catalog");
                    Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {rdf}type {dcat}Catalog'. ");
    
                    AssertToGraphUriNode(graph, projectGraphName, rdf + "type", org + "OrganizationalCollaboration");
                    Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {rdf}type {org}OrganizationalCollaboration'. ");
    
                    AssertToGraphUriNode(graph, projectGraphName, rdf + "type", vcard + "Group");
                    Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {rdf}type {vcard}Group'. ");
    
                    AssertToGraphLiteralNode(graph, projectGraphName, dcterms + "title", entry.ProjectName);
                    Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcterms}title {entry.ProjectName}'. ");
    
                    AssertToGraphLiteralNode(graph, projectGraphName, dcterms + "description", entry.Description);
                    Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcterms}description {entry.Description}'. ");
    
                    AssertToGraphLiteralNode(graph, projectGraphName, dcat + "startDate", entry.StartDate.ToString(), new Uri("http://www.w3.org/2001/XMLSchema#dateTime"));
                    Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcat}startDate {entry.StartDate}'. ");
    
                    AssertToGraphLiteralNode(graph, projectGraphName, dcat + "endDate", entry.EndDate.ToString(), new Uri("http://www.w3.org/2001/XMLSchema#dateTime"));
                    Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcat}endDate {entry.EndDate}'. ");
    
                    if (!string.IsNullOrWhiteSpace(entry.Keywords))
                    {
                        var listKeywords = entry.Keywords.Split(';').ToList();
                        foreach (var keyword in listKeywords)
                        {
                            AssertToGraphLiteralNode(graph, projectGraphName, dcterms + "subject", keyword);
                            Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcterms}subject {keyword}'. ");
                        }
                    }
    
                    AssertToGraphLiteralNode(graph, projectGraphName, dcterms + "alternative", entry.DisplayName);
                    Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcterms}alternative {entry.DisplayName}'. ");
    
                    AssertToGraphLiteralNode(graph, projectGraphName, dcterms + "rightsHolder", entry.PrincipleInvestigators);
                    Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcterms}rightsHolder {entry.PrincipleInvestigators}'. ");
    
                    AssertToGraphLiteralNode(graph, projectGraphName, "https://schema.org/funding", entry.GrantId);
                    Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} https://schema.org/funding {entry.GrantId}'. ");
    
                    foreach (var visibility in visibilities)
                    {
                        if (entry.VisibilityId == visibility.Id && visibility.DisplayName.Contains("Public"))
                        {
                            AssertToGraphUriNode(graph, projectGraphName, cosc + "terms/project#visibility", cosc + $"terms/visibility#public");
                            Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {cosc}terms/project#visibility {cosc}terms/visibility#public'. ");
                            break;
                        }
                        else if (entry.VisibilityId == visibility.Id && visibility.DisplayName.Contains("Project Members"))
                        {
                            AssertToGraphUriNode(graph, projectGraphName, cosc + "terms/project#visibility", cosc + $"terms/visibility#projectMember");
                            Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {cosc}terms/project#visibility {cosc}terms/visibility#projectMember'. ");
                            break;
                        }
                    }
    
                    AssertToGraphLiteralNode(graph, projectGraphName, cosc + "terms/project#deleted", entry.Deleted.ToString().ToLower(), new Uri("http://www.w3.org/2001/XMLSchema#boolean"));
                    Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {cosc}terms/project#deleted {entry.Deleted}'. ");
    
                    AssertToGraphLiteralNode(graph, projectGraphName, cosc + "terms/project#slug", entry.Slug);
                    Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {cosc}terms/project#slug {entry.Slug}'. ");
    
                    AssertToGraphUriNode(graph, projectGraphName, foaf + "homepage", projectHandleName);
                    Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {foaf}homepage {projectHandleName}'. ");
    
                    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", $"{resourceUrlPrefix}/{projectResource.ResourceId}");
                            Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcat}catalog {resourceUrlPrefix}/{projectResource.ResourceId}'. ");
                        }
                    }
    
                    if (entry.Creator is not null)
                    {
                        AssertToGraphUriNode(graph, projectGraphName, dcterms + "creator", cosc + $"users/{entry.Creator}");
                        Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcterms}creator {cosc}users/{entry.Creator}'. ");
                    }
    
    
                    if (entry.DateCreated is not null && entry.DateCreated.HasValue)
                    {
                        AssertToGraphLiteralNode(graph, projectGraphName, dcterms + "created", entry.DateCreated.Value.ToString(), new Uri("http://www.w3.org/2001/XMLSchema#dateTime"));
                        Console.WriteLine($"For project '{entry.DisplayName}' will migrate triple '{projectGraphName} {dcterms}created {entry.DateCreated}'. ");
                    }
    
                    graphs.Add(graph);
                }
                return graphs;
            }
        }
    }