Dmp on Dataset mapped for public API

This commit is contained in:
Thomas Georgios Giannos 2023-11-29 13:45:35 +02:00
parent f5f5d6345f
commit 2fae4f41a7
2 changed files with 48 additions and 4 deletions

View File

@ -6,6 +6,7 @@ import eu.eudat.model.publicapi.datasetwizard.DataRepositoryPublicModel;
import eu.eudat.model.publicapi.datasetwizard.ExternalDatasetPublicListingModel; import eu.eudat.model.publicapi.datasetwizard.ExternalDatasetPublicListingModel;
import eu.eudat.model.publicapi.datasetwizard.RegistryPublicModel; import eu.eudat.model.publicapi.datasetwizard.RegistryPublicModel;
import eu.eudat.model.publicapi.datasetwizard.ServicePublicModel; import eu.eudat.model.publicapi.datasetwizard.ServicePublicModel;
import eu.eudat.model.publicapi.listingmodels.DataManagementPlanPublicListingModel;
import eu.eudat.model.publicapi.overviewmodels.DatasetPublicModel; import eu.eudat.model.publicapi.overviewmodels.DatasetPublicModel;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -15,7 +16,7 @@ import java.util.Objects;
@Component @Component
public class DescriptionToPublicApiDatasetMapper { public class DescriptionToPublicApiDatasetMapper {
public DatasetPublicModel toPublicModel(Description description) { public DatasetPublicModel toPublicModel(Description description, DataManagementPlanPublicListingModel dmp) {
DatasetPublicModel model = new DatasetPublicModel(); DatasetPublicModel model = new DatasetPublicModel();
model.setLabel(description.getLabel()); model.setLabel(description.getLabel());
model.setDescription(description.getDescription()); model.setDescription(description.getDescription());
@ -23,6 +24,8 @@ public class DescriptionToPublicApiDatasetMapper {
model.setUri(""); model.setUri("");
model.setStatus(description.getStatus()); model.setStatus(description.getStatus());
model.setDmp(dmp);
model.setProfile(DatasetProfilePublicModel.fromDataModel(description.getDescriptionTemplate())); model.setProfile(DatasetProfilePublicModel.fromDataModel(description.getDescriptionTemplate()));
model.setRegistries(description.getDescriptionReferences().stream().map(RegistryPublicModel::fromDescriptionReference).filter(Objects::nonNull).toList()); model.setRegistries(description.getDescriptionReferences().stream().map(RegistryPublicModel::fromDescriptionReference).filter(Objects::nonNull).toList());
model.setServices(description.getDescriptionReferences().stream().map(ServicePublicModel::fromDescriptionReference).filter(Objects::nonNull).toList()); model.setServices(description.getDescriptionReferences().stream().map(ServicePublicModel::fromDescriptionReference).filter(Objects::nonNull).toList());

View File

@ -4,18 +4,23 @@ import eu.eudat.authorization.AuthorizationFlags;
import eu.eudat.commons.enums.IsActive; import eu.eudat.commons.enums.IsActive;
import eu.eudat.controllers.BaseController; import eu.eudat.controllers.BaseController;
import eu.eudat.controllers.publicapi.request.dataset.DatasetPublicTableRequest; import eu.eudat.controllers.publicapi.request.dataset.DatasetPublicTableRequest;
import eu.eudat.controllers.publicapi.request.dmp.DataManagmentPlanPublicTableRequest;
import eu.eudat.controllers.publicapi.response.DataTableData; import eu.eudat.controllers.publicapi.response.DataTableData;
import eu.eudat.data.DescriptionEntity; import eu.eudat.data.DescriptionEntity;
import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.ApiContext;
import eu.eudat.model.Description; import eu.eudat.model.*;
import eu.eudat.model.builder.DescriptionBuilder; import eu.eudat.model.builder.DescriptionBuilder;
import eu.eudat.model.builder.DmpBuilder;
import eu.eudat.model.mapper.publicapi.DescriptionToPublicApiDatasetListingMapper; import eu.eudat.model.mapper.publicapi.DescriptionToPublicApiDatasetListingMapper;
import eu.eudat.model.mapper.publicapi.DescriptionToPublicApiDatasetMapper; import eu.eudat.model.mapper.publicapi.DescriptionToPublicApiDatasetMapper;
import eu.eudat.model.mapper.publicapi.DmpToPublicApiDmpListingMapper;
import eu.eudat.model.publicapi.listingmodels.DatasetPublicListingModel; import eu.eudat.model.publicapi.listingmodels.DatasetPublicListingModel;
import eu.eudat.model.publicapi.overviewmodels.DatasetPublicModel; import eu.eudat.model.publicapi.overviewmodels.DatasetPublicModel;
import eu.eudat.models.data.helpers.responses.ResponseItem; import eu.eudat.models.data.helpers.responses.ResponseItem;
import eu.eudat.query.DescriptionQuery; import eu.eudat.query.DescriptionQuery;
import eu.eudat.query.DmpQuery;
import eu.eudat.query.lookup.DescriptionLookup; import eu.eudat.query.lookup.DescriptionLookup;
import eu.eudat.query.lookup.DmpLookup;
import eu.eudat.types.ApiMessageCode; import eu.eudat.types.ApiMessageCode;
import gr.cite.tools.data.builder.BuilderFactory; import gr.cite.tools.data.builder.BuilderFactory;
import gr.cite.tools.data.query.QueryFactory; import gr.cite.tools.data.query.QueryFactory;
@ -28,6 +33,7 @@ import io.swagger.v3.oas.annotations.media.ExampleObject;
import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -62,6 +68,8 @@ public class PublicDatasetsDescriptionDocumentation extends BaseController {
private final DescriptionToPublicApiDatasetListingMapper descriptionToPublicApiDatasetListingMapper; private final DescriptionToPublicApiDatasetListingMapper descriptionToPublicApiDatasetListingMapper;
private final DmpToPublicApiDmpListingMapper dmpToPublicApiDmpListingMapper;
@Autowired @Autowired
public PublicDatasetsDescriptionDocumentation( public PublicDatasetsDescriptionDocumentation(
ApiContext apiContext, ApiContext apiContext,
@ -69,13 +77,14 @@ public class PublicDatasetsDescriptionDocumentation extends BaseController {
BuilderFactory builderFactory, BuilderFactory builderFactory,
MessageSource messageSource, MessageSource messageSource,
DescriptionToPublicApiDatasetMapper descriptionToPublicApiDatasetMapper, DescriptionToPublicApiDatasetMapper descriptionToPublicApiDatasetMapper,
DescriptionToPublicApiDatasetListingMapper descriptionToPublicApiDatasetListingMapper) { DescriptionToPublicApiDatasetListingMapper descriptionToPublicApiDatasetListingMapper, DmpToPublicApiDmpListingMapper dmpToPublicApiDmpListingMapper) {
super(apiContext); super(apiContext);
this.queryFactory = queryFactory; this.queryFactory = queryFactory;
this.builderFactory = builderFactory; this.builderFactory = builderFactory;
this.messageSource = messageSource; this.messageSource = messageSource;
this.descriptionToPublicApiDatasetMapper = descriptionToPublicApiDatasetMapper; this.descriptionToPublicApiDatasetMapper = descriptionToPublicApiDatasetMapper;
this.descriptionToPublicApiDatasetListingMapper = descriptionToPublicApiDatasetListingMapper; this.descriptionToPublicApiDatasetListingMapper = descriptionToPublicApiDatasetListingMapper;
this.dmpToPublicApiDmpListingMapper = dmpToPublicApiDmpListingMapper;
} }
@Operation(summary = "This method is used to get a listing of public datasets.", description = PublicApiStaticHelpers.Description.getPagedNotes) @Operation(summary = "This method is used to get a listing of public datasets.", description = PublicApiStaticHelpers.Description.getPagedNotes)
@ -135,7 +144,39 @@ public class PublicDatasetsDescriptionDocumentation extends BaseController {
Description model = this.builderFactory.builder(DescriptionBuilder.class).build(descriptionFieldSet, query.firstAs(descriptionFieldSet)); Description model = this.builderFactory.builder(DescriptionBuilder.class).build(descriptionFieldSet, query.firstAs(descriptionFieldSet));
if (model == null) if (model == null)
throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, Description.class.getSimpleName()}, LocaleContextHolder.getLocale())); throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, Description.class.getSimpleName()}, LocaleContextHolder.getLocale()));
DatasetPublicModel dataset = this.descriptionToPublicApiDatasetMapper.toPublicModel(model);
DmpQuery dmpQuery = this.queryFactory.query(DmpQuery.class).authorize(EnumSet.of(AuthorizationFlags.Public)).ids(model.getDmp().getId()).isActive(IsActive.Active);
DmpLookup dmpLookup = getDmpLookup();
Dmp dmp = this.builderFactory.builder(DmpBuilder.class).build(dmpLookup.getProject(), dmpQuery.firstAs(dmpLookup.getProject()));
DatasetPublicModel dataset = this.descriptionToPublicApiDatasetMapper.toPublicModel(model, this.dmpToPublicApiDmpListingMapper.toPublicListingModel(dmp));
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DatasetPublicModel>().status(ApiMessageCode.NO_MESSAGE).payload(dataset)); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DatasetPublicModel>().status(ApiMessageCode.NO_MESSAGE).payload(dataset));
} }
@NotNull
private static DmpLookup getDmpLookup() {
BaseFieldSet fieldSet = new BaseFieldSet();
Set<String> fields = Set.of(
Dmp._id,
Dmp._label,
Dmp._description,
Dmp._version,
Dmp._groupId,
String.join(".", Dmp._dmpUsers, String.join(".", DmpUser._user, User._id)),
String.join(".", Dmp._dmpUsers, String.join(".", DmpUser._user, User._name)),
String.join(".", Dmp._dmpUsers, DmpUser._role),
String.join(".", Dmp._dmpReferences, String.join(".", DmpReference._reference, Reference._id)),
String.join(".", Dmp._dmpReferences, String.join(".", DmpReference._reference, Reference._reference)),
String.join(".", Dmp._dmpReferences, String.join(".", DmpReference._reference, Reference._label)),
Dmp._dmpReferences,
Dmp._createdAt,
Dmp._updatedAt,
Dmp._finalizedAt
);
fieldSet.setFields(fields);
DmpLookup lookup = new DmpLookup();
lookup.setProject(fieldSet);
return lookup;
}
} }