public async Task <IEnumerable <ColidEntryContactsCto> > GetContactReferencedEntries(string userEmailAddress) { Guard.ArgumentNotNullOrWhiteSpace(userEmailAddress, "userEmailAddress"); var types = _metadataService.GetLeafEntityTypes(Resource.Type.FirstResouceType); var contactTypes = _metadataService.GetLeafEntityTypes(EnterpriseCore.Person); var entries = _contactRepository.GetContactReferencedEntries(userEmailAddress, types, contactTypes); var consumerGroups = await _remoteRegistrationService.GetConsumerGroups(); entries = entries .Select(entry => { var cg = consumerGroups.FirstOrDefault(t => t.Id == entry.ConsumerGroup?.OriginalString); if (cg != null && cg.Properties.TryGetValue(ConsumerGroup.HasContactPerson, out var contacts)) { var consumerGroupContact = new ContactCto() { EmailAddress = contacts?.FirstOrDefault() as string, TypeUri = new Uri(ConsumerGroup.HasContactPerson), TypeLabel = "Consumer group contact" }; entry.ConsumerGroupContact = consumerGroupContact; } return(entry); }); return(entries); }
public IEnumerable <ColidEntryContactsCto> GetContactReferencedEntries(string userEmailAddress, IEnumerable <string> resourceTypes, IEnumerable <string> contactTypes) { if (!resourceTypes.Any()) { return(new List <ColidEntryContactsCto>()); } var parametrizedString = new SparqlParameterizedString { CommandText = @"SELECT DISTINCT * @fromResourceNamedGraph @fromMetadataNamedGraph WHERE { Values ?contactType { @contactTypes } ?predicate rdfs:range ?contactType. ?shacl sh:path ?predicate. OPTIONAL { ?shacl sh:group ?shaclGroup } ?shacl sh:name ?predicateLabel. { Select ?subject WHERE { Values ?type { @resourceTypes } ?subject a ?type. { ?subject ?predicate @userEmailAddress. } UNION { ?subject @distribution | @mainDistribution ?endpoint. ?endpoint ?predicate @userEmailAddress. } } } { ?subject ?predicate ?contact. } UNION { ?subject @distribution | @mainDistribution ?endpoint . ?endpoint ?predicate ?contact. } ?subject @hasPid ?pidUri. ?subject @hasLabel ?label. ?subject @hasConsumerGroup ?consumerGroup. FILTER NOT EXISTS { ?subject @hasPidEntryDraft ?draftResource } } ORDER BY ?subject " }; parametrizedString.SetPlainLiteral("fromResourceNamedGraph", _metadataGraphConfigurationRepository.GetGraphs(MetadataGraphConfiguration.HasResourcesGraph).JoinAsFromNamedGraphs()); parametrizedString.SetPlainLiteral("fromMetadataNamedGraph", _metadataGraphConfigurationRepository.GetGraphs(MetadataGraphConfiguration.HasMetadataGraph).JoinAsFromNamedGraphs()); parametrizedString.SetPlainLiteral("resourceTypes", resourceTypes.JoinAsValuesList()); parametrizedString.SetPlainLiteral("contactTypes", contactTypes.JoinAsValuesList()); parametrizedString.SetLiteral("userEmailAddress", userEmailAddress); parametrizedString.SetUri("hasLabel", new Uri(Resource.HasLabel)); parametrizedString.SetUri("hasPid", new Uri(EnterpriseCore.PidUri)); parametrizedString.SetUri("hasPidEntryDraft", new Uri(Resource.HasPidEntryDraft)); parametrizedString.SetUri("hasConsumerGroup", new Uri(Resource.HasConsumerGroup)); parametrizedString.SetUri("distribution", new Uri(Resource.Distribution)); parametrizedString.SetUri("mainDistribution", new Uri(Resource.MainDistribution)); var results = _tripleStoreRepository.QueryTripleStoreResultSet(parametrizedString); var groupedResults = results.GroupBy(res => res.GetNodeValuesFromSparqlResult("subject")?.Value); var contacts = groupedResults .Select(res => { var firstEntry = res.First(); var pidUriString = firstEntry.GetNodeValuesFromSparqlResult("pidUri")?.Value; var pidUri = string.IsNullOrWhiteSpace(pidUriString) ? null : new Uri(pidUriString); var consumerGroupString = firstEntry.GetNodeValuesFromSparqlResult("consumerGroup")?.Value; var consumerGroup = string.IsNullOrWhiteSpace(consumerGroupString) ? null : new Uri(consumerGroupString); var cep = new ColidEntryContactsCto() { Label = firstEntry.GetNodeValuesFromSparqlResult("label")?.Value, PidUri = pidUri, ConsumerGroup = consumerGroup, Contacts = res .Select(r => { var roleId = r.GetNodeValuesFromSparqlResult("predicate")?.Value; var contact = new ContactCto() { EmailAddress = r.GetNodeValuesFromSparqlResult("contact")?.Value, TypeUri = string.IsNullOrWhiteSpace(roleId) ? null : new Uri(roleId), TypeLabel = r.GetNodeValuesFromSparqlResult("predicateLabel")?.Value, IsTechnicalContact = IsTechnicalGroup(r.GetNodeValuesFromSparqlResult("shaclGroup")?.Value) }; return(contact); }) }; return(cep); }); return(contacts); }
public ColidEntryContactBuilder WithCGContact(ContactCto contact) { _cep.ConsumerGroupContact = contact; return(this); }