Skip to content
Snippets Groups Projects
Commit e53d7146 authored by Henrik tom Wörden's avatar Henrik tom Wörden
Browse files

Merge branch 'f-data-url' into 'main'

ENH: add dataUrl to API

See merge request !6
parents e6eb530b a6140a05
No related branches found
No related tags found
1 merge request!6ENH: add dataUrl to API
Pipeline #56945 passed
......@@ -4,7 +4,7 @@
<parent>
<groupId>com.indiscale.fdo</groupId>
<artifactId>fdo-manager-service</artifactId>
<version>0.1.0-rc7</version>
<version>0.1.0-rc8</version>
<relativePath>../pom.xml</relativePath>
</parent>
<properties>
......
......@@ -6,10 +6,10 @@ info:
contact:
name: IndiScale GmbH
email: t.fitschen@indiscale.com
url: https://www.indiscale.com
url: "https://www.indiscale.com"
servers:
- url: http://localhost:8080
- url: "http://localhost:8080"
tags:
- name: Repositories
......@@ -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,13 @@ paths:
metadata:
type: string
format: binary
dataUrl:
type: string
format: uri
metadataProfile:
type: string
fdoType:
type: string
responses:
"201":
description: "The Location header points to the newly created FDO."
......@@ -412,6 +419,13 @@ components:
type: string
metadataPid:
type: string
fdoType:
type: string
fdoProfile:
type: string
attributes:
type: object
additionalProperties: true
Info:
type: object
properties:
......
......@@ -3,7 +3,7 @@
<parent>
<groupId>com.indiscale.fdo</groupId>
<artifactId>fdo-manager-service</artifactId>
<version>0.1.0-rc7</version>
<version>0.1.0-rc8</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
......@@ -11,7 +11,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.build.outputEncoding>UTF-8</project.build.outputEncoding>
<sourceDir>${project.basedir}/src/main</sourceDir>
<fdo.sdk.version>0.1.0-rc13</fdo.sdk.version>
<fdo.sdk.version>0.1.0-rc16</fdo.sdk.version>
</properties>
<artifactId>fdo-manager-service.application</artifactId>
<dependencies>
......
......@@ -2,13 +2,20 @@ 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.FdoType;
import com.indiscale.fdo.manager.api.InputStreamSource;
import com.indiscale.fdo.manager.api.Manager;
import com.indiscale.fdo.manager.api.MetadataProfile;
import com.indiscale.fdo.manager.api.PidUnresolvableException;
import com.indiscale.fdo.manager.api.RepositoryConnection;
import com.indiscale.fdo.manager.api.TokenAuthenticationInfo;
......@@ -22,7 +29,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 +58,16 @@ class MetadataWrapper extends DefaultMetadata {
private MultipartFile file;
public MetadataWrapper(MultipartFile file) {
super();
private static MetadataProfile createMetadataProfile(String metadataProfile) {
if (metadataProfile != null) {
return new DefaultMetadataProfile(metadataProfile);
}
return null;
}
public MetadataWrapper(MultipartFile file, String metadataProfile) {
super(createMetadataProfile(metadataProfile));
this.file = file;
}
......@@ -82,7 +100,12 @@ 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,
@Valid String fdoType) {
try (Manager manager = getManager()) {
RepositoryConnection repository =
manager.getRepositoryRegistry().createRepositoryConnection(repositories.getFdo());
......@@ -90,9 +113,21 @@ 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,
FdoType.getType(fdoType),
repository,
data,
new MetadataWrapper(metadataFile, metadataProfile));
getLogger().createFDO(fdo, repository);
// TODO(tf) this is a workaround for the apache proxy
......@@ -104,6 +139,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());
}
}
......@@ -166,6 +203,22 @@ public class FDOApiImpl extends BaseController implements FdoApi {
if (fdo.getMetadata() != null) {
data.setMetadataPid(fdo.getMetadata().getPID());
}
if (fdo.getType() != null) {
data.setFdoType(fdo.getType().getPID());
}
if (fdo.getProfile() != null) {
data.setFdoProfile(fdo.getProfile().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.
......
......@@ -9,7 +9,7 @@
<groupId>com.indiscale.fdo</groupId>
<artifactId>fdo-manager-service</artifactId>
<packaging>pom</packaging>
<version>0.1.0-rc7</version>
<version>0.1.0-rc8</version>
<modules>
<module>api</module>
<module>application</module>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment