Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • fdo/fdo-manager-service
1 result
Show changes
Commits on Source (1)
......@@ -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.
......