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: ...@@ -203,7 +203,7 @@ paths:
multipart/form-data: multipart/form-data:
schema: schema:
type: object type: object
required: ["repositories", "data", "metadata"] required: ["repositories", "metadata"]
properties: properties:
repositories: repositories:
$ref: "#/components/schemas/TargetRepositories" $ref: "#/components/schemas/TargetRepositories"
...@@ -213,6 +213,11 @@ paths: ...@@ -213,6 +213,11 @@ paths:
metadata: metadata:
type: string type: string
format: binary format: binary
dataUrl:
type: string
format: uri
metadataProfile:
type: string
responses: responses:
"201": "201":
description: "The Location header points to the newly created FDO." description: "The Location header points to the newly created FDO."
...@@ -412,6 +417,13 @@ components: ...@@ -412,6 +417,13 @@ components:
type: string type: string
metadataPid: metadataPid:
type: string type: string
fdoType:
type: string
fdoProfile:
type: string
attributes:
type: object
additionalProperties: true
Info: Info:
type: object type: object
properties: properties:
......
...@@ -2,10 +2,15 @@ package com.indiscale.fdo.manager.service.fdo; ...@@ -2,10 +2,15 @@ package com.indiscale.fdo.manager.service.fdo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; 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.DefaultData;
import com.indiscale.fdo.manager.DefaultMetadata; 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.DigitalObject;
import com.indiscale.fdo.manager.api.FDO; 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.FdoProfile;
import com.indiscale.fdo.manager.api.InputStreamSource; import com.indiscale.fdo.manager.api.InputStreamSource;
import com.indiscale.fdo.manager.api.Manager; import com.indiscale.fdo.manager.api.Manager;
...@@ -22,7 +27,10 @@ import com.indiscale.fdo.manager.service.api.operation.FdoApi; ...@@ -22,7 +27,10 @@ import com.indiscale.fdo.manager.service.api.operation.FdoApi;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URI; import java.net.URI;
import java.util.HashMap;
import java.util.Map.Entry;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.CrossOrigin;
...@@ -48,8 +56,8 @@ class MetadataWrapper extends DefaultMetadata { ...@@ -48,8 +56,8 @@ class MetadataWrapper extends DefaultMetadata {
private MultipartFile file; private MultipartFile file;
public MetadataWrapper(MultipartFile file) { public MetadataWrapper(MultipartFile file, String metadataProfile) {
super(); super(new DefaultMetadataProfile(metadataProfile));
this.file = file; this.file = file;
} }
...@@ -82,7 +90,11 @@ public class FDOApiImpl extends BaseController implements FdoApi { ...@@ -82,7 +90,11 @@ public class FDOApiImpl extends BaseController implements FdoApi {
@Override @Override
public ResponseEntity<Void> createFDO( 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()) { try (Manager manager = getManager()) {
RepositoryConnection repository = RepositoryConnection repository =
manager.getRepositoryRegistry().createRepositoryConnection(repositories.getFdo()); manager.getRepositoryRegistry().createRepositoryConnection(repositories.getFdo());
...@@ -90,9 +102,17 @@ public class FDOApiImpl extends BaseController implements FdoApi { ...@@ -90,9 +102,17 @@ public class FDOApiImpl extends BaseController implements FdoApi {
repository.setTokenAuthenticationInfo(new TokenAuthenticationInfo(getToken())); repository.setTokenAuthenticationInfo(new TokenAuthenticationInfo(getToken()));
} }
FdoProfile profile = manager.getDefaultProfile(); 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 = FDO fdo =
manager.createFDO( manager.createFDO(
profile, repository, new DataWrapper(data), new MetadataWrapper(metadata)); profile, repository, data, new MetadataWrapper(metadataFile, metadataProfile));
getLogger().createFDO(fdo, repository); getLogger().createFDO(fdo, repository);
// TODO(tf) this is a workaround for the apache proxy // TODO(tf) this is a workaround for the apache proxy
...@@ -104,6 +124,8 @@ public class FDOApiImpl extends BaseController implements FdoApi { ...@@ -104,6 +124,8 @@ public class FDOApiImpl extends BaseController implements FdoApi {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Not Found. Unknown repository id."); throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Not Found. Unknown repository id.");
} catch (ValidationException e) { } catch (ValidationException e) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, e.getValidationResult().toString()); 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 { ...@@ -167,6 +189,16 @@ public class FDOApiImpl extends BaseController implements FdoApi {
data.setMetadataPid(fdo.getMetadata().getPID()); 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); return new ResolvePID200Response().data(data).links(self);
} }
......
...@@ -11,6 +11,7 @@ import com.google.gson.JsonObject; ...@@ -11,6 +11,7 @@ import com.google.gson.JsonObject;
import com.indiscale.fdo.manager.DefaultRepositoryRegistry; import com.indiscale.fdo.manager.DefaultRepositoryRegistry;
import com.indiscale.fdo.manager.api.DigitalObject; import com.indiscale.fdo.manager.api.DigitalObject;
import com.indiscale.fdo.manager.api.FDO; 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.Manager;
import com.indiscale.fdo.manager.api.PidUnresolvableException; import com.indiscale.fdo.manager.api.PidUnresolvableException;
import com.indiscale.fdo.manager.api.RepositoryConnection; import com.indiscale.fdo.manager.api.RepositoryConnection;
...@@ -72,6 +73,16 @@ public class FDOApiTest { ...@@ -72,6 +73,16 @@ public class FDOApiTest {
public FDO toFDO() { public FDO toFDO() {
return null; return null;
} }
@Override
public FdoComponent toFdoComponent() {
return null;
}
@Override
public boolean isFdoComponent() {
return false;
}
}; };
DigitalObject mockDO2 = DigitalObject mockDO2 =
new DigitalObject() { new DigitalObject() {
...@@ -94,6 +105,16 @@ public class FDOApiTest { ...@@ -94,6 +105,16 @@ public class FDOApiTest {
public FDO toFDO() { public FDO toFDO() {
return null; 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 // Configure Test returns, commented out returns are there so that each set of returns has same
// index. // index.
......