Skip to content
Snippets Groups Projects
Commit a288bc50 authored by Benedikt Heinrichs's avatar Benedikt Heinrichs
Browse files

Cleanup Controller

parent 17fa3e3f
Branches Sprint/2020-10
No related tags found
1 merge request!90New: Use the new metadata structure (coscine/issues#1792)
using Coscine.Api.Tree.Util;
using Coscine.ApiCommons; using Coscine.ApiCommons;
using Coscine.ApiCommons.Factories; using Coscine.ApiCommons.Factories;
using Coscine.Configuration; using Coscine.Configuration;
...@@ -7,7 +6,6 @@ using Coscine.Database.Models; ...@@ -7,7 +6,6 @@ using Coscine.Database.Models;
using Coscine.Database.Util; using Coscine.Database.Util;
using Coscine.Logging; using Coscine.Logging;
using Coscine.Metadata; using Coscine.Metadata;
using Coscine.Metadata.Util;
using Coscine.ResourceTypes; using Coscine.ResourceTypes;
using Coscine.ResourceTypes.Base; using Coscine.ResourceTypes.Base;
using Coscine.ResourceTypes.Base.Models; using Coscine.ResourceTypes.Base.Models;
...@@ -37,6 +35,7 @@ namespace Coscine.Api.Tree.Controllers ...@@ -37,6 +35,7 @@ namespace Coscine.Api.Tree.Controllers
private readonly Authenticator _authenticator; private readonly Authenticator _authenticator;
private readonly ResourceModel _resourceModel; private readonly ResourceModel _resourceModel;
private readonly RdfStoreConnector _rdfStoreConnector; private readonly RdfStoreConnector _rdfStoreConnector;
private readonly CoscineLDPHelper _coscineLDPHelper;
private readonly ProjectRoleModel _projectRoleModel; private readonly ProjectRoleModel _projectRoleModel;
private readonly ProjectResourceModel _projectResourceModel; private readonly ProjectResourceModel _projectResourceModel;
private readonly CoscineLogger _coscineLogger; private readonly CoscineLogger _coscineLogger;
...@@ -65,52 +64,7 @@ namespace Coscine.Api.Tree.Controllers ...@@ -65,52 +64,7 @@ namespace Coscine.Api.Tree.Controllers
var path = rule[rule.IndexOf("/")..]; var path = rule[rule.IndexOf("/")..];
_blobApiLink = $"https://{host}{path}/blob/"; _blobApiLink = $"https://{host}{path}/blob/";
_prefix = _configuration.GetStringAndWait("coscine/global/epic/prefix"); _prefix = _configuration.GetStringAndWait("coscine/global/epic/prefix");
} _coscineLDPHelper = new CoscineLDPHelper(_rdfStoreConnector, _prefix);
/// <summary>
/// Generates Id
/// </summary>
/// <param name="resourceId">Id of the resource</param>
/// <param name="path">Path to file</param>
/// <param name="retrieve">Is retrieve action?</param>
/// <returns> Uri </returns>
public Uri GenerateId(string resourceId, string path, bool retrieve = false, bool storing = false)
{
if (!path.StartsWith("/"))
{
path = "/" + path;
}
var currentId = _rdfStoreConnector.GetMetadataId(resourceId, path);
if (currentId == null && retrieve)
{
return GenerateOldId(resourceId, path);
}
else if (currentId == null || storing)
{
var newVersionGraph = new CustomUri($"https://purl.org/coscine/resources/{resourceId}{path}/@type=metadata&version={VersionUtil.GetNewVersion()}");
return newVersionGraph;
}
else
{
return new CustomUri(currentId);
}
}
/// <summary>
/// Generates Id
/// </summary>
/// <param name="resourceId">Id of the resource</param>
/// <param name="path">Path to file</param>
/// <returns> Uri </returns>
public Uri GenerateOldId(string resourceId, string path)
{
if (!path.StartsWith("/"))
{
path = "/" + path;
}
return new CustomUri($"https://hdl.handle.net/{_prefix}/{resourceId}@path={Uri.EscapeDataString(path)}");
} }
/// <summary> /// <summary>
...@@ -191,7 +145,7 @@ namespace Coscine.Api.Tree.Controllers ...@@ -191,7 +145,7 @@ namespace Coscine.Api.Tree.Controllers
// Add to metadata infos, if no "physical" file for it exists // Add to metadata infos, if no "physical" file for it exists
if (!metadataInfos.Any((metadataInfo) => metadataInfo.Key == path)) if (!metadataInfos.Any((metadataInfo) => metadataInfo.Key == path))
{ {
metadataInfos.Add(new ResourceEntry(path, true, 0, GenerateId(resourceId, path, true).AbsoluteUri, null, DateTime.Now, DateTime.Now)); metadataInfos.Add(new ResourceEntry(path, true, 0, _coscineLDPHelper.GenerateId(resourceId, path, true).AbsoluteUri, null, DateTime.Now, DateTime.Now));
} }
var applicationProfileGraph = _rdfStoreConnector.GetGraph(resource.ApplicationProfile); var applicationProfileGraph = _rdfStoreConnector.GetGraph(resource.ApplicationProfile);
...@@ -202,7 +156,7 @@ namespace Coscine.Api.Tree.Controllers ...@@ -202,7 +156,7 @@ namespace Coscine.Api.Tree.Controllers
int metadataCount = 0; int metadataCount = 0;
foreach (var info in metadataInfos) foreach (var info in metadataInfos)
{ {
var id = GenerateId(resourceId, info.Key, true); var id = _coscineLDPHelper.GenerateId(resourceId, info.Key, true);
if (_rdfStoreConnector.HasGraph(id.AbsoluteUri)) if (_rdfStoreConnector.HasGraph(id.AbsoluteUri))
{ {
var graph = _rdfStoreConnector.GetGraph(id); var graph = _rdfStoreConnector.GetGraph(id);
...@@ -367,7 +321,7 @@ namespace Coscine.Api.Tree.Controllers ...@@ -367,7 +321,7 @@ namespace Coscine.Api.Tree.Controllers
// Ducktape solution for supporting multiple mimetypes // Ducktape solution for supporting multiple mimetypes
var metadataObject = ObjectFactory<JToken>.DeserializeFromStream(Request.Body); var metadataObject = ObjectFactory<JToken>.DeserializeFromStream(Request.Body);
var graphNameUri = GenerateId(resourceId, path, false, true); var graphNameUri = _coscineLDPHelper.GenerateId(resourceId, path, false, true);
JObject json; JObject json;
......
using System;
namespace Coscine.Api.Tree.Util
{
/// <summary>
/// Adapts the returned ToString of a Uri
/// </summary>
public class CustomUri : Uri
{
/// <summary>
/// Constructs a Custom Uri
/// </summary>
/// <param name="uri"></param>
public CustomUri(string uri) : base(uri)
{
}
/// <summary>
/// Overwrites the ToString for returning the AbsoluteUri (for dotNetRDF)
/// </summary>
/// <returns></returns>
public override string ToString()
{
return AbsoluteUri;
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment