Skip to content
Snippets Groups Projects
Verified Commit ea0ea1f0 authored by Timm Fitschen's avatar Timm Fitschen
Browse files

ENH: add dataUrl to API

parent d99fd412
No related branches found
No related tags found
1 merge request!6ENH: add dataUrl to API
Pipeline #55723 failed
......@@ -203,7 +203,7 @@ paths:
multipart/form-data:
schema:
type: object
required: ["repositories", "data", "metadata"]
required: ["repositories", "metadata"]
properties:
repositories:
$ref: "#/components/schemas/TargetRepositories"
......@@ -213,6 +213,11 @@ paths:
metadata:
type: string
format: binary
dataUrl:
type: string
format: uri
metadataProfile:
type: string
responses:
"201":
description: "The Location header points to the newly created FDO."
......@@ -412,6 +417,13 @@ components:
type: string
metadataPid:
type: string
fdoType:
type: string
fdoProfile:
type: string
attributes:
type: object
additionalProperties: true
Info:
type: object
properties:
......
......@@ -2,10 +2,15 @@ package com.indiscale.fdo.manager.service.fdo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import com.google.gson.JsonElement;
import com.indiscale.fdo.manager.DefaultData;
import com.indiscale.fdo.manager.DefaultMetadata;
import com.indiscale.fdo.manager.DefaultMetadataProfile;
import com.indiscale.fdo.manager.UrlRefData;
import com.indiscale.fdo.manager.api.Data;
import com.indiscale.fdo.manager.api.DigitalObject;
import com.indiscale.fdo.manager.api.FDO;
import com.indiscale.fdo.manager.api.FdoComponent;
import com.indiscale.fdo.manager.api.FdoProfile;
import com.indiscale.fdo.manager.api.InputStreamSource;
import com.indiscale.fdo.manager.api.Manager;
......@@ -22,7 +27,10 @@ import com.indiscale.fdo.manager.service.api.operation.FdoApi;
import jakarta.validation.Valid;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URI;
import java.util.HashMap;
import java.util.Map.Entry;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
......@@ -48,8 +56,8 @@ class MetadataWrapper extends DefaultMetadata {
private MultipartFile file;
public MetadataWrapper(MultipartFile file) {
super();
public MetadataWrapper(MultipartFile file, String metadataProfile) {
super(new DefaultMetadataProfile(metadataProfile));
this.file = file;
}
......@@ -82,7 +90,11 @@ public class FDOApiImpl extends BaseController implements FdoApi {
@Override
public ResponseEntity<Void> createFDO(
@Valid TargetRepositories repositories, MultipartFile data, MultipartFile metadata) {
@Valid TargetRepositories repositories,
MultipartFile metadataFile,
MultipartFile dataFile,
@Valid URI dataUrl,
@Valid String metadataProfile) {
try (Manager manager = getManager()) {
RepositoryConnection repository =
manager.getRepositoryRegistry().createRepositoryConnection(repositories.getFdo());
......@@ -90,9 +102,17 @@ public class FDOApiImpl extends BaseController implements FdoApi {
repository.setTokenAuthenticationInfo(new TokenAuthenticationInfo(getToken()));
}
FdoProfile profile = manager.getDefaultProfile();
Data data = null;
if (dataFile != null) {
data = new DataWrapper(dataFile);
} else if (dataUrl != null) {
data = new UrlRefData(dataUrl.toURL());
} else {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Missing data component.");
}
FDO fdo =
manager.createFDO(
profile, repository, new DataWrapper(data), new MetadataWrapper(metadata));
profile, repository, data, new MetadataWrapper(metadataFile, metadataProfile));
getLogger().createFDO(fdo, repository);
// TODO(tf) this is a workaround for the apache proxy
......@@ -104,6 +124,8 @@ public class FDOApiImpl extends BaseController implements FdoApi {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Not Found. Unknown repository id.");
} catch (ValidationException e) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, e.getValidationResult().toString());
} catch (MalformedURLException e) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, e.toString());
}
}
......@@ -167,6 +189,16 @@ public class FDOApiImpl extends BaseController implements FdoApi {
data.setMetadataPid(fdo.getMetadata().getPID());
}
}
if (resolved.getAttributes() != null) {
data.setAttributes(new HashMap<>());
for (Entry<String, JsonElement> s : resolved.getAttributes().entrySet()) {
data.getAttributes().put(s.getKey(), s.getValue().getAsString());
}
}
if (resolved.isFdoComponent()) {
FdoComponent fdoComponent = resolved.toFdoComponent();
if (fdoComponent.getProfile() != null) data.setFdoProfile(fdoComponent.getProfile().getPID());
}
return new ResolvePID200Response().data(data).links(self);
}
......
......@@ -11,6 +11,7 @@ import com.google.gson.JsonObject;
import com.indiscale.fdo.manager.DefaultRepositoryRegistry;
import com.indiscale.fdo.manager.api.DigitalObject;
import com.indiscale.fdo.manager.api.FDO;
import com.indiscale.fdo.manager.api.FdoComponent;
import com.indiscale.fdo.manager.api.Manager;
import com.indiscale.fdo.manager.api.PidUnresolvableException;
import com.indiscale.fdo.manager.api.RepositoryConnection;
......@@ -72,6 +73,16 @@ public class FDOApiTest {
public FDO toFDO() {
return null;
}
@Override
public FdoComponent toFdoComponent() {
return null;
}
@Override
public boolean isFdoComponent() {
return false;
}
};
DigitalObject mockDO2 =
new DigitalObject() {
......@@ -94,6 +105,16 @@ public class FDOApiTest {
public FDO toFDO() {
return null;
}
@Override
public FdoComponent toFdoComponent() {
return null;
}
@Override
public boolean isFdoComponent() {
return false;
}
};
// Configure Test returns, commented out returns are there so that each set of returns has same
// index.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment