diff --git a/src/Project.Tests/Project.Tests.csproj b/src/Project.Tests/Project.Tests.csproj index d4fe9a064b6cef2b032af5f560451a14576f79c2..9b8843fcb2c77d99a8d227d25ab6090331d32245 100644 --- a/src/Project.Tests/Project.Tests.csproj +++ b/src/Project.Tests/Project.Tests.csproj @@ -65,8 +65,8 @@ <Reference Include="Coscine.Configuration, Version=1.4.0.0, Culture=neutral, PublicKeyToken=ce3d7a32d7dc1e5a, processorArchitecture=MSIL"> <HintPath>..\packages\Coscine.Configuration.1.4.0\lib\net461\Coscine.Configuration.dll</HintPath> </Reference> - <Reference Include="Coscine.Database, Version=1.6.0.0, Culture=neutral, PublicKeyToken=767d77427707b70a, processorArchitecture=MSIL"> - <HintPath>..\packages\Coscine.Database.1.6.0\lib\net461\Coscine.Database.dll</HintPath> + <Reference Include="Coscine.Database, Version=1.8.0.0, Culture=neutral, PublicKeyToken=767d77427707b70a, processorArchitecture=MSIL"> + <HintPath>..\packages\Coscine.Database.1.8.0\lib\net461\Coscine.Database.dll</HintPath> </Reference> <Reference Include="Coscine.ProxyApi, Version=1.2.0.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\packages\Coscine.ProxyApi.1.2.0\lib\net461\Coscine.ProxyApi.dll</HintPath> @@ -74,18 +74,30 @@ <Reference Include="Coscine.SharePoint.Webparts.Vue, Version=1.4.0.0, Culture=neutral, PublicKeyToken=0fe8d3e516df6d98, processorArchitecture=MSIL"> <HintPath>..\packages\Coscine.SharePoint.Webparts.Vue.1.4.0\lib\net461\Coscine.SharePoint.Webparts.Vue.dll</HintPath> </Reference> + <Reference Include="dotNetRDF, Version=2.2.1.0, Culture=neutral, PublicKeyToken=6055ffe4c97cc780, processorArchitecture=MSIL"> + <HintPath>..\packages\dotNetRDF.2.2.1\lib\net40\dotNetRDF.dll</HintPath> + </Reference> + <Reference Include="dotNetRDF.Data.Virtuoso, Version=2.2.1.0, Culture=neutral, PublicKeyToken=6055ffe4c97cc780, processorArchitecture=MSIL"> + <HintPath>..\packages\dotNetRDF.Data.Virtuoso.2.2.1\lib\net40\dotNetRDF.Data.Virtuoso.dll</HintPath> + </Reference> <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> <HintPath>..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.dll</HintPath> </Reference> <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> <HintPath>..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.SqlServer.dll</HintPath> </Reference> + <Reference Include="HtmlAgilityPack, Version=1.8.2.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL"> + <HintPath>..\packages\HtmlAgilityPack.1.8.2\lib\Net45\HtmlAgilityPack.dll</HintPath> + </Reference> <Reference Include="linq2db, Version=2.6.4.0, Culture=neutral, PublicKeyToken=e41013125f9e410a, processorArchitecture=MSIL"> <HintPath>..\packages\linq2db.2.6.4\lib\net46\linq2db.dll</HintPath> </Reference> <Reference Include="LinqKit, Version=1.1.16.0, Culture=neutral, PublicKeyToken=bc217f8844052a91, processorArchitecture=MSIL"> <HintPath>..\packages\LinqKit.1.1.16\lib\net45\LinqKit.dll</HintPath> </Reference> + <Reference Include="Metadata, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> + <HintPath>..\packages\Metadata.1.0.0\lib\net461\Metadata.dll</HintPath> + </Reference> <Reference Include="Microsoft.AspNetCore, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.AspNetCore.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.dll</HintPath> </Reference> @@ -560,6 +572,12 @@ <Private>True</Private> <Private>True</Private> </Reference> + <Reference Include="VDS.Common, Version=1.10.0.0, Culture=neutral, PublicKeyToken=ab5f4eb908061bf0, processorArchitecture=MSIL"> + <HintPath>..\packages\VDS.Common.1.10.0\lib\net40-client\VDS.Common.dll</HintPath> + </Reference> + <Reference Include="virtado4, Version=4.0.0.0, Culture=neutral, PublicKeyToken=391bf132017ae989, processorArchitecture=MSIL"> + <HintPath>..\packages\OpenLink.Data.Virtuoso.7.20.3214.1\lib\net40\virtado4.dll</HintPath> + </Reference> </ItemGroup> <ItemGroup> <Compile Include="DefaultControllerTests.cs" /> diff --git a/src/Project.Tests/ResourceControllerTests.cs b/src/Project.Tests/ResourceControllerTests.cs index 405547449e2a26fd9ca3b517baeba52a03878b6a..8c5d692dc929b7513497e258ee73378b9d1f5622 100644 --- a/src/Project.Tests/ResourceControllerTests.cs +++ b/src/Project.Tests/ResourceControllerTests.cs @@ -96,7 +96,9 @@ namespace Coscine.Api.Project.Tests new List<DisciplineObject>() { new DisciplineObject(Discipline.Id, Discipline.Url, Discipline.DisplayName) }, new VisibilityObject(Visibility.Id, Visibility.DisplayName), new LicenseObject(License.Id, License.DisplayName), - JObject.FromObject(new RDSResourceTypeObject(Guid.NewGuid(), "PITLABTTEST", "accesskey", "secretkey")) + JObject.FromObject(new RDSResourceTypeObject(Guid.NewGuid(), "PITLABTTEST", "accesskey", "secretkey")), + "link", + JToken.Parse("{}") ); Stream stream = ObjectFactory<ResourceObject>.SerializeToStream(resourceObject); diff --git a/src/Project.Tests/app.config b/src/Project.Tests/app.config index cf15ee6db59a44a6f654ccf49e87523c4e54fb40..a4522c8ec90b9bf11d952ae9d3ae684788930732 100644 --- a/src/Project.Tests/app.config +++ b/src/Project.Tests/app.config @@ -88,7 +88,7 @@ </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Coscine.Database" publicKeyToken="767d77427707b70a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-1.6.0.0" newVersion="1.6.0.0" /> + <bindingRedirect oldVersion="0.0.0.0-1.8.0.0" newVersion="1.8.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.IdentityModel.Tokens.Jwt" publicKeyToken="31bf3856ad364e35" culture="neutral" /> diff --git a/src/Project.Tests/packages.config b/src/Project.Tests/packages.config index e9feed70992ea433145d0fd7079145d9e67cb898..65792be94db3206f7449256b9e651059387a9c3a 100644 --- a/src/Project.Tests/packages.config +++ b/src/Project.Tests/packages.config @@ -7,14 +7,18 @@ <package id="Coscine.Action" version="1.3.1" targetFramework="net472" /> <package id="Coscine.ApiCommons" version="1.2.1" targetFramework="net472" /> <package id="Coscine.Configuration" version="1.4.0" targetFramework="net472" /> - <package id="Coscine.Database" version="1.6.0" targetFramework="net472" /> + <package id="Coscine.Database" version="1.8.0" targetFramework="net472" /> <package id="Coscine.ProxyApi" version="1.2.0" targetFramework="net472" /> <package id="Coscine.SharePoint.Webparts.Vue" version="1.4.0" targetFramework="net472" /> + <package id="dotNetRDF" version="2.2.1" targetFramework="net472" /> + <package id="dotNetRDF.Data.Virtuoso" version="2.2.1" targetFramework="net472" /> <package id="EntityFramework" version="6.2.0" targetFramework="net472" /> + <package id="HtmlAgilityPack" version="1.8.2" targetFramework="net472" /> <package id="linq2db" version="2.6.4" targetFramework="net472" /> <package id="linq2db.SqlServer" version="2.6.4" targetFramework="net472" /> <package id="linq2db.t4models" version="2.6.4" targetFramework="net472" /> <package id="LinqKit" version="1.1.16" targetFramework="net472" /> + <package id="Metadata" version="1.0.0" targetFramework="net472" /> <package id="Microsoft.AspNetCore" version="2.2.0" targetFramework="net472" /> <package id="Microsoft.AspNetCore.Antiforgery" version="2.2.0" targetFramework="net472" /> <package id="Microsoft.AspNetCore.Authentication.Abstractions" version="2.2.0" targetFramework="net472" /> @@ -118,6 +122,7 @@ <package id="Newtonsoft.Json.Bson" version="1.0.2" targetFramework="net472" /> <package id="NUnit" version="3.11.0" targetFramework="net472" /> <package id="NUnit3TestAdapter" version="3.13.0" targetFramework="net472" /> + <package id="OpenLink.Data.Virtuoso" version="7.20.3214.1" targetFramework="net472" /> <package id="System.AppContext" version="4.3.0" targetFramework="net472" /> <package id="System.Buffers" version="4.5.0" targetFramework="net472" /> <package id="System.Collections" version="4.3.0" targetFramework="net472" /> @@ -162,4 +167,5 @@ <package id="System.Xml.ReaderWriter" version="4.3.1" targetFramework="net472" /> <package id="System.Xml.XPath" version="4.3.0" targetFramework="net472" /> <package id="System.Xml.XPath.XDocument" version="4.3.0" targetFramework="net472" /> + <package id="VDS.Common" version="1.10.0" targetFramework="net472" /> </packages> \ No newline at end of file diff --git a/src/Project/App.config b/src/Project/App.config index 43975a34164ab0b0305c7dfaa54b10d29149aed7..46cfafcc43a3efcd2492faefae8a1c06e2f2e0e4 100644 --- a/src/Project/App.config +++ b/src/Project/App.config @@ -91,7 +91,7 @@ </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Coscine.Database" publicKeyToken="767d77427707b70a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-1.6.0.0" newVersion="1.6.0.0" /> + <bindingRedirect oldVersion="0.0.0.0-1.8.0.0" newVersion="1.8.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.IdentityModel.Tokens.Jwt" publicKeyToken="31bf3856ad364e35" culture="neutral" /> diff --git a/src/Project/Controllers/DataSourceController.cs b/src/Project/Controllers/DataSourceController.cs index bb0998c3e1660774441474e19ba562d30fc55fff..112e4833a781ccae8be62a40feab9e21062b2173 100644 --- a/src/Project/Controllers/DataSourceController.cs +++ b/src/Project/Controllers/DataSourceController.cs @@ -297,13 +297,12 @@ namespace Coscine.Api.Project.Controllers return BadRequest($"{resourceId} is not a guid."); } -#if! DEBUG var user = _authenticator.GetUserFromToken(); if (!_resourceModel.OwnsResource(user, resource)) { return Forbid($"The user does not own the resource {resourceId}"); } -#endif + try { resource = _resourceModel.GetById(resouceGuid); diff --git a/src/Project/Controllers/MetadataController.cs b/src/Project/Controllers/MetadataController.cs new file mode 100644 index 0000000000000000000000000000000000000000..c517da4f694cfe96db921cdc4567d946ad091c53 --- /dev/null +++ b/src/Project/Controllers/MetadataController.cs @@ -0,0 +1,221 @@ +using Coscine.Api.Project.Models; +using Coscine.ApiCommons; +using Coscine.ApiCommons.Exceptions; +using Coscine.ApiCommons.Factories; +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json.Linq; +using System; +using System.Linq; +using VDS.RDF.Writing; +using VDS.RDF.Parsing; +using VDS.RDF; +using Metadata; +using System.Web; +using System.IO; + +namespace Coscine.Api.Project.Controllers +{ + public class MetadataController : Controller + { + private readonly Authenticator _authenticator; + private readonly MetadataModel _metadataModel; + private readonly ResourceModel _resourceModel; + private readonly Util _util; + + public MetadataController() + { + _authenticator = new Authenticator(this, Program.Configuration); + _metadataModel = new MetadataModel(); + _resourceModel = new ResourceModel(); + _util = new Util(); + } + + [Route("[controller]")] + public IActionResult Index() + { + return Ok(_authenticator.ValidateAndExecute((user) => + { + return NoContent(); + })); + } + + [HttpGet("[controller]/resource/{resourceId}/ap/{applicationProfileId}")] + public IActionResult GetApplicationProfile(string resourceId, string applicationProfileId) + { + var user = _authenticator.GetUserFromToken(); + + var resource = _resourceModel.GetById(Guid.Parse(resourceId)); + if (_metadataModel.IsProjectMember(user, resource)) + { + var graph = _util.GetGraph(HttpUtility.UrlDecode(applicationProfileId)); + var fixedValuesGraph = new Graph(); + + fixedValuesGraph.LoadFromString(resource.FixedValues, new RdfJsonParser()); + + graph.Merge(fixedValuesGraph); + + var json = JToken.Parse(VDS.RDF.Writing.StringWriter.Write(graph, new RdfJsonWriter())); + + return Ok(json); + } + else + { + throw new NotAuthorizedException("User is no project member!"); + } + + } + + [HttpGet("[controller]/resource/{resourceId}/aplist/")] + public IActionResult ListAllApplicationProfiles(string resourceId) + { + return Ok(_authenticator.ValidateAndExecute((user) => + { + var resource = _resourceModel.GetById(Guid.Parse(resourceId)); + if (_metadataModel.IsProjectMember(user, resource)) + { + var graphUris = _util.ListGraphs(); + + return new JArray(graphUris.Select(x => x.ToString()).Where(x => x.StartsWith("https://purl.org/coscine/ap/"))); + } + else + { + throw new NotAuthorizedException("User is no project member!"); + } + })); + } + + [HttpGet("[controller]/resource/{resourceId}/filename/{filename}/ver/{version}")] + public IActionResult GetMetadataForFile(string resourceId, string filename, string version) + { + return Ok(_authenticator.ValidateAndExecute((user) => + { + var resource = _resourceModel.GetById(Guid.Parse(resourceId)); + if (_metadataModel.IsProjectMember(user, resource)) + { + var id = _metadataModel.GenerateId(resourceId, filename, version); + var graph = _util.GetGraph(id); + return JToken.Parse(VDS.RDF.Writing.StringWriter.Write(graph, new RdfJsonWriter())); + } + else + { + throw new NotAuthorizedException("User is no project member!"); + } + })); + } + + [HttpPut("[controller]/resource/{resourceId}/filename/{filename}/ver/{version}")] + public IActionResult StoreMetadataForFile(string resourceId, string filename, string version) + { + return Ok(_authenticator.ValidateAndExecute((user) => + { + var innerBlock = ObjectFactory<JToken>.DeserializeFromStream(Request.Body); + var graphName = _metadataModel.GenerateId(resourceId, filename, version); + var graphNameUri = new Uri(graphName); + var json = new JObject + { + [graphName] = innerBlock + }; + + var resource = _resourceModel.GetById(Guid.Parse(resourceId)); + if (_metadataModel.IsProjectMember(user, resource)) + { + var graph = new Graph(); + graph.LoadFromString(json.ToString(), new RdfJsonParser()); + + var fixedValuesGraph = new Graph(); + fixedValuesGraph.LoadFromString(resource.FixedValues, new RdfJsonParser()); + + foreach(var triple in fixedValuesGraph.Triples.Where(x => x.Predicate.ToString() == "https://purl.org/coscine/fixedValue")) + { + // Remove any existing triples + foreach (var triple2 in graph.GetTriplesWithSubjectPredicate(graph.CreateUriNode(graphNameUri), triple.Subject).ToList()) + { + graph.Retract(triple2); + } + graph.Assert(graph.CreateUriNode(graphNameUri), triple.Subject, triple.Object); + } + + // Default values is not checked or added + + Console.WriteLine(VDS.RDF.Writing.StringWriter.Write(graph, new RdfJsonWriter())); + // validate the data + if (_util.ValidateShacl(graph, graphNameUri)) + { + // store the data + if (_util.HasGraph(graphNameUri)) + { + _util.ClearGraph(graphNameUri); + } + else + { + _util.CreateNamedGraph(graphNameUri); + } + + // BaseUri must be set for the sparql query + graph.BaseUri = graphNameUri; + _util.AddGraph(graph); + + return NoContent(); + } + else + { + throw new NotAuthorizedException("Data has the wrong format!"); + } + + } + else + { + throw new NotAuthorizedException("User is no project member!"); + } + })); + } + + [HttpGet("[controller]/vocabulary/{resourceId}/{path}")] + public IActionResult GetVocabulary(string resourceId, string path) + { + return Ok(_authenticator.ValidateAndExecute((user) => + { + var resource = _resourceModel.GetById(Guid.Parse(resourceId)); + if (_metadataModel.IsProjectMember(user, resource)) + { + var graph = _util.GetGraph(HttpUtility.UrlDecode(path)); + + JArray de = new JArray(); + foreach (var kv in _util.GetVocabularyLabels(graph, "de")) + { + JObject obj = new JObject + { + ["value"] = kv.Key, + ["name"] = kv.Value + }; + de.Add(obj); + } + + JArray en = new JArray(); + foreach(var kv in _util.GetVocabularyLabels(graph, "en")) + { + JObject obj = new JObject + { + ["value"] = kv.Key, + ["name"] = kv.Value + }; + en.Add(obj); + } + + JObject json = new JObject + { + ["de"] = de, + ["en"] = en + }; + + return json; + } + else + { + throw new NotAuthorizedException("User is no project member!"); + } + })); + } + + } +} diff --git a/src/Project/Controllers/ResourceController.cs b/src/Project/Controllers/ResourceController.cs index 27c3e13350e3e317c4db119ef305b17022c059b0..3a93201ca146011b80ac067a1cb6491cb9c44849 100644 --- a/src/Project/Controllers/ResourceController.cs +++ b/src/Project/Controllers/ResourceController.cs @@ -3,10 +3,10 @@ using Coscine.Api.Project.ReturnObjects; using Coscine.ApiCommons; using Coscine.ApiCommons.Exceptions; using Coscine.ApiCommons.Factories; -using Coscine.Database.Model; using Microsoft.AspNetCore.Mvc; using System; using System.Linq; +using Newtonsoft.Json.Linq; namespace Coscine.Api.Project.Controllers { @@ -116,6 +116,5 @@ namespace Coscine.Api.Project.Controllers } })); } - } } diff --git a/src/Project/Models/MetadataModel.cs b/src/Project/Models/MetadataModel.cs new file mode 100644 index 0000000000000000000000000000000000000000..7383a096780264ed3e53422566cb782a19f740ed --- /dev/null +++ b/src/Project/Models/MetadataModel.cs @@ -0,0 +1,69 @@ +using Coscine.Api.Project.ReturnObjects; +using Coscine.ApiCommons.Models; +using Coscine.Database.Model; +using LinqToDB; +using System; +using System.Linq; +using System.Linq.Expressions; + +namespace Coscine.Api.Project.Models +{ + public class MetadataModel : DatabaseModel<Resource> + { + + public MetadataModel() : base(Program.Configuration) + { + } + + public override Expression<Func<Resource, Guid>> GetIdFromObject() + { + throw new NotImplementedException(); + } + + public override void SetObjectId(Resource databaseObject, Guid id) + { + throw new NotImplementedException(); + } + + public override ITable<Resource> GetITableFromDatabase(CoscineDB db) + { + throw new NotImplementedException(); + } + + public Resource StoreFromObject(ResourceObject resourceObject) + { + Resource resource = new Resource() + { + DisplayName = resourceObject.DisplayName, + ResourceName = resourceObject.ResourceName, + Keywords = resourceObject.Keywords, + UsageRights = resourceObject.UsageRights, + TypeId = resourceObject.Type.Id, + Type = new ResourceTypeModel().GetById(resourceObject.Type.Id), + VisibilityId = resourceObject.Visibility.Id, + LicenseId = resourceObject.License.Id + }; + + + return resource; + } + + public string GenerateId(string resourceId, string filename, string version) + { + return $"https://purl.org/coscine/md/{resourceId}/{filename}/{version}/"; + } + + public bool IsProjectMember(User user, Resource resource) + { + return DatabaseConnection.ConnectToDatabase((db) => + { + return (from relation in db.ProjectRoles + where relation.User == user + && (relation.Role.DisplayName == "Owner" || relation.Role.DisplayName == "Member") + && (relation.Project.ProjectResourceProjectIdIds != null && relation.Project.ProjectResourceProjectIdIds. + Any((projectResource) => projectResource.Resource == resource)) + select relation).Any(); + }); + } + } +} diff --git a/src/Project/Models/ResourceModel.cs b/src/Project/Models/ResourceModel.cs index c1ff1877a51940b59b29a06546d899c66f43375f..4516f24186dfc065590abedaed3baa1089aec43f 100644 --- a/src/Project/Models/ResourceModel.cs +++ b/src/Project/Models/ResourceModel.cs @@ -14,7 +14,6 @@ namespace Coscine.Api.Project.Models { public ResourceModel() : base(Program.Configuration) { - } public Resource StoreFromObject(ResourceObject resourceObject) @@ -131,7 +130,7 @@ namespace Coscine.Api.Project.Models throw new ArgumentException("Not supported resource type!"); } } - + private void SetDisciplines(Resource resource, IEnumerable<DisciplineObject> disciplines) { ResourceDisciplineModel resourceDisciplineModel = new ResourceDisciplineModel(); @@ -162,7 +161,7 @@ namespace Coscine.Api.Project.Models select relation).Any(); }); } - + public int UpdateByObject(Resource resource, ResourceObject resourceObject) { if (resourceObject.Disciplines.Count() == 0 || resourceObject.ResourceTypeOption == null) @@ -183,6 +182,8 @@ namespace Coscine.Api.Project.Models resource.Type = new ResourceTypeModel().GetById(resourceObject.Type.Id); resource.VisibilityId = resourceObject.Visibility.Id; resource.LicenseId = resourceObject.License.Id; + resource.ApplicationProfile = resourceObject.ApplicationProfile; + resource.FixedValues = resourceObject.FixedValues.ToString(); SetDisciplines(resource, resourceObject.Disciplines); SetResourceTypeObject(resource, resourceObject.ResourceTypeOption); @@ -262,7 +263,9 @@ namespace Coscine.Api.Project.Models disciplines, (resource.Visibility != null) ? new VisibilityObject(resource.Visibility.Id, resource.Visibility.DisplayName) : null, (resource.License != null) ? new LicenseObject(resource.License.Id, resource.License.DisplayName) : null, - JObject.FromObject(resourceTypeOptionObject) + JObject.FromObject(resourceTypeOptionObject), + resource.ApplicationProfile, + JToken.Parse(resource.FixedValues) ); } diff --git a/src/Project/Project.csproj b/src/Project/Project.csproj index 9441cf8f6526ebc422d6750c8444ee85fc75cc11..216ae1db39b2a2c87588c8cb22eca16620952f02 100644 --- a/src/Project/Project.csproj +++ b/src/Project/Project.csproj @@ -54,8 +54,8 @@ <Reference Include="Coscine.Configuration, Version=1.4.0.0, Culture=neutral, PublicKeyToken=ce3d7a32d7dc1e5a, processorArchitecture=MSIL"> <HintPath>..\packages\Coscine.Configuration.1.4.0\lib\net461\Coscine.Configuration.dll</HintPath> </Reference> - <Reference Include="Coscine.Database, Version=1.6.0.0, Culture=neutral, PublicKeyToken=767d77427707b70a, processorArchitecture=MSIL"> - <HintPath>..\packages\Coscine.Database.1.6.0\lib\net461\Coscine.Database.dll</HintPath> + <Reference Include="Coscine.Database, Version=1.8.0.0, Culture=neutral, PublicKeyToken=767d77427707b70a, processorArchitecture=MSIL"> + <HintPath>..\packages\Coscine.Database.1.8.0\lib\net461\Coscine.Database.dll</HintPath> </Reference> <Reference Include="Coscine.ProxyApi, Version=1.2.0.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\packages\Coscine.ProxyApi.1.2.0\lib\net461\Coscine.ProxyApi.dll</HintPath> @@ -63,18 +63,30 @@ <Reference Include="Coscine.SharePoint.Webparts.Vue, Version=1.4.0.0, Culture=neutral, PublicKeyToken=0fe8d3e516df6d98, processorArchitecture=MSIL"> <HintPath>..\packages\Coscine.SharePoint.Webparts.Vue.1.4.0\lib\net461\Coscine.SharePoint.Webparts.Vue.dll</HintPath> </Reference> + <Reference Include="dotNetRDF, Version=2.2.1.0, Culture=neutral, PublicKeyToken=6055ffe4c97cc780, processorArchitecture=MSIL"> + <HintPath>..\packages\dotNetRDF.2.2.1\lib\net40\dotNetRDF.dll</HintPath> + </Reference> + <Reference Include="dotNetRDF.Data.Virtuoso, Version=2.2.1.0, Culture=neutral, PublicKeyToken=6055ffe4c97cc780, processorArchitecture=MSIL"> + <HintPath>..\packages\dotNetRDF.Data.Virtuoso.2.2.1\lib\net40\dotNetRDF.Data.Virtuoso.dll</HintPath> + </Reference> <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> <HintPath>..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.dll</HintPath> </Reference> <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> <HintPath>..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.SqlServer.dll</HintPath> </Reference> + <Reference Include="HtmlAgilityPack, Version=1.8.2.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL"> + <HintPath>..\packages\HtmlAgilityPack.1.8.2\lib\Net45\HtmlAgilityPack.dll</HintPath> + </Reference> <Reference Include="linq2db, Version=2.6.4.0, Culture=neutral, PublicKeyToken=e41013125f9e410a, processorArchitecture=MSIL"> <HintPath>..\packages\linq2db.2.6.4\lib\net46\linq2db.dll</HintPath> </Reference> <Reference Include="LinqKit, Version=1.1.16.0, Culture=neutral, PublicKeyToken=bc217f8844052a91, processorArchitecture=MSIL"> <HintPath>..\packages\LinqKit.1.1.16\lib\net45\LinqKit.dll</HintPath> </Reference> + <Reference Include="Metadata, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> + <HintPath>..\packages\Metadata.1.0.0\lib\net461\Metadata.dll</HintPath> + </Reference> <Reference Include="Microsoft.AspNetCore, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.AspNetCore.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.dll</HintPath> </Reference> @@ -384,6 +396,7 @@ </Reference> <Reference Include="System.ComponentModel.Composition" /> <Reference Include="System.ComponentModel.DataAnnotations" /> + <Reference Include="System.Configuration" /> <Reference Include="System.Console, Version=4.0.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <HintPath>..\packages\System.Console.4.3.1\lib\net46\System.Console.dll</HintPath> <Private>True</Private> @@ -564,9 +577,16 @@ <Private>True</Private> <Private>True</Private> </Reference> + <Reference Include="VDS.Common, Version=1.10.0.0, Culture=neutral, PublicKeyToken=ab5f4eb908061bf0, processorArchitecture=MSIL"> + <HintPath>..\packages\VDS.Common.1.10.0\lib\net40-client\VDS.Common.dll</HintPath> + </Reference> + <Reference Include="virtado4, Version=4.0.0.0, Culture=neutral, PublicKeyToken=391bf132017ae989, processorArchitecture=MSIL"> + <HintPath>..\packages\OpenLink.Data.Virtuoso.7.20.3214.1\lib\net40\virtado4.dll</HintPath> + </Reference> </ItemGroup> <ItemGroup> <Compile Include="Controllers\DataSourceController.cs" /> + <Compile Include="Controllers\MetadataController.cs" /> <Compile Include="Controllers\VisibilityController.cs" /> <Compile Include="Controllers\InstituteController.cs" /> <Compile Include="Controllers\DisciplineController.cs" /> @@ -587,6 +607,7 @@ <Compile Include="Models\ProjectRoleModel.cs" /> <Compile Include="Models\RDSResourceTypeModel.cs" /> <Compile Include="Models\ResourceDisciplineModel.cs" /> + <Compile Include="Models\MetadataModel.cs" /> <Compile Include="Models\ResourceModel.cs" /> <Compile Include="Models\ResourceTypeModel.cs" /> <Compile Include="Models\RoleModel.cs" /> diff --git a/src/Project/ReturnObjects/ResourceObject.cs b/src/Project/ReturnObjects/ResourceObject.cs index c8c6264636fcde0e394e984c8e6c5383a4abc56b..76e56ead7250e158f47ac107b1dbf8b86ab59001 100644 --- a/src/Project/ReturnObjects/ResourceObject.cs +++ b/src/Project/ReturnObjects/ResourceObject.cs @@ -18,8 +18,10 @@ namespace Coscine.Api.Project.ReturnObjects public VisibilityObject Visibility { get; set; } public LicenseObject License { get; set; } public JObject ResourceTypeOption { get; set; } + public string ApplicationProfile { get; set; } + public JToken FixedValues { get; set; } - public ResourceObject(Guid id, string displayName, string resourceName, string keywords, string usageRights, ResourceTypeObject type, IEnumerable<DisciplineObject> disciplines, VisibilityObject visibility, LicenseObject license, JObject resourceTypeOption) + public ResourceObject(Guid id, string displayName, string resourceName, string keywords, string usageRights, ResourceTypeObject type, IEnumerable<DisciplineObject> disciplines, VisibilityObject visibility, LicenseObject license, JObject resourceTypeOption, string applicationProfile, JToken fixedValues) { Id = id; @@ -34,6 +36,9 @@ namespace Coscine.Api.Project.ReturnObjects License = license; ResourceTypeOption = resourceTypeOption; + + ApplicationProfile = applicationProfile; + FixedValues = fixedValues; } } } diff --git a/src/Project/packages.config b/src/Project/packages.config index cc0c49a1bc8f02290993ff1c08bf2964551912d8..8d10d75d55fb1d0f54e505dadbe6b6be0b664e37 100644 --- a/src/Project/packages.config +++ b/src/Project/packages.config @@ -6,14 +6,18 @@ <package id="Coscine.Action" version="1.3.1" targetFramework="net472" /> <package id="Coscine.ApiCommons" version="1.2.1" targetFramework="net472" /> <package id="Coscine.Configuration" version="1.4.0" targetFramework="net472" /> - <package id="Coscine.Database" version="1.6.0" targetFramework="net472" /> + <package id="Coscine.Database" version="1.8.0" targetFramework="net472" /> <package id="Coscine.ProxyApi" version="1.2.0" targetFramework="net472" /> <package id="Coscine.SharePoint.Webparts.Vue" version="1.4.0" targetFramework="net472" /> + <package id="dotNetRDF" version="2.2.1" targetFramework="net472" /> + <package id="dotNetRDF.Data.Virtuoso" version="2.2.1" targetFramework="net472" /> <package id="EntityFramework" version="6.2.0" targetFramework="net472" /> + <package id="HtmlAgilityPack" version="1.8.2" targetFramework="net472" /> <package id="linq2db" version="2.6.4" targetFramework="net472" /> <package id="linq2db.SqlServer" version="2.6.4" targetFramework="net472" /> <package id="linq2db.t4models" version="2.6.4" targetFramework="net472" /> <package id="LinqKit" version="1.1.16" targetFramework="net472" /> + <package id="Metadata" version="1.0.0" targetFramework="net472" /> <package id="Microsoft.AspNetCore" version="2.2.0" targetFramework="net472" /> <package id="Microsoft.AspNetCore.Antiforgery" version="2.2.0" targetFramework="net472" /> <package id="Microsoft.AspNetCore.Authentication.Abstractions" version="2.2.0" targetFramework="net472" /> @@ -114,6 +118,7 @@ <package id="Microsoft.Win32.Registry" version="4.5.0" targetFramework="net472" /> <package id="Newtonsoft.Json" version="12.0.2" targetFramework="net472" /> <package id="Newtonsoft.Json.Bson" version="1.0.2" targetFramework="net472" /> + <package id="OpenLink.Data.Virtuoso" version="7.20.3214.1" targetFramework="net472" /> <package id="System.AppContext" version="4.3.0" targetFramework="net472" /> <package id="System.Buffers" version="4.5.0" targetFramework="net472" /> <package id="System.Collections" version="4.3.0" targetFramework="net472" /> @@ -171,4 +176,5 @@ <package id="System.Xml.XmlDocument" version="4.3.0" targetFramework="net472" /> <package id="System.Xml.XPath" version="4.3.0" targetFramework="net472" /> <package id="System.Xml.XPath.XDocument" version="4.3.0" targetFramework="net472" /> + <package id="VDS.Common" version="1.10.0" targetFramework="net472" /> </packages> \ No newline at end of file