Fixing issues on Dataset public Api mappers
This commit is contained in:
parent
038c78fb04
commit
0c34502f08
|
@ -22,12 +22,14 @@ public class DescriptionFieldSetToDatasetFieldSetMapper {
|
||||||
model.setTitle(fieldSet.getTitle());
|
model.setTitle(fieldSet.getTitle());
|
||||||
model.setAdditionalInformation(fieldSet.getAdditionalInformation());
|
model.setAdditionalInformation(fieldSet.getAdditionalInformation());
|
||||||
model.setExtendedDescription(fieldSet.getExtendedDescription());
|
model.setExtendedDescription(fieldSet.getExtendedDescription());
|
||||||
|
if (fieldSet.getMultiplicity() != null) {
|
||||||
MultiplicityEntity multiplicityEntity = new MultiplicityEntity();
|
MultiplicityEntity multiplicityEntity = new MultiplicityEntity();
|
||||||
multiplicityEntity.setMin(fieldSet.getMultiplicity().getMin());
|
multiplicityEntity.setMin(fieldSet.getMultiplicity().getMin());
|
||||||
multiplicityEntity.setMax(fieldSet.getMultiplicity().getMax());
|
multiplicityEntity.setMax(fieldSet.getMultiplicity().getMax());
|
||||||
multiplicityEntity.setPlaceholder(fieldSet.getMultiplicity().getPlaceholder());
|
multiplicityEntity.setPlaceholder(fieldSet.getMultiplicity().getPlaceholder());
|
||||||
multiplicityEntity.setTableView(fieldSet.getMultiplicity().getTableView());
|
multiplicityEntity.setTableView(fieldSet.getMultiplicity().getTableView());
|
||||||
model.setMultiplicity(multiplicityEntity);
|
model.setMultiplicity(multiplicityEntity);
|
||||||
|
}
|
||||||
model.setFields(fieldSet.getFields().stream().map(descriptionFieldToDatasetFieldMapper::toPublicModel).toList());
|
model.setFields(fieldSet.getFields().stream().map(descriptionFieldToDatasetFieldMapper::toPublicModel).toList());
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,11 +3,15 @@ package eu.eudat.model.mapper.publicapi;
|
||||||
import eu.eudat.model.DescriptionTemplate;
|
import eu.eudat.model.DescriptionTemplate;
|
||||||
import eu.eudat.model.descriptiontemplatedefinition.Definition;
|
import eu.eudat.model.descriptiontemplatedefinition.Definition;
|
||||||
import eu.eudat.model.publicapi.datasetwizard.PagedDatasetProfile;
|
import eu.eudat.model.publicapi.datasetwizard.PagedDatasetProfile;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class DescriptionTemplateToPublicApiDatasetProfileMapper {
|
public class DescriptionTemplateToPublicApiDatasetProfileMapper {
|
||||||
|
|
||||||
|
private static Logger logger = LoggerFactory.getLogger(DescriptionTemplateToPublicApiDatasetProfileMapper.class);
|
||||||
|
|
||||||
private final DescriptionPageToDatasetPageMapper descriptionPageToDatasetPageMapper;
|
private final DescriptionPageToDatasetPageMapper descriptionPageToDatasetPageMapper;
|
||||||
|
|
||||||
public DescriptionTemplateToPublicApiDatasetProfileMapper(DescriptionPageToDatasetPageMapper descriptionPageToDatasetPageMapper) {
|
public DescriptionTemplateToPublicApiDatasetProfileMapper(DescriptionPageToDatasetPageMapper descriptionPageToDatasetPageMapper) {
|
||||||
|
@ -21,7 +25,15 @@ public class DescriptionTemplateToPublicApiDatasetProfileMapper {
|
||||||
model.setPages(definition.getPages().stream().map(
|
model.setPages(definition.getPages().stream().map(
|
||||||
x -> descriptionPageToDatasetPageMapper.toPublicModel(
|
x -> descriptionPageToDatasetPageMapper.toPublicModel(
|
||||||
x,
|
x,
|
||||||
definition.getSections().stream().filter(y -> Integer.parseInt(y.getPage()) == x.getOrdinal()).toList())
|
definition.getSections().stream().filter(y -> {
|
||||||
|
try {
|
||||||
|
Integer.parseInt(y.getPage().replace("page_", ""));
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
logger.error("Cannot determine dataset page from input {}", y.getPage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return Integer.parseInt(y.getPage().replace("page_", "")) == x.getOrdinal();
|
||||||
|
}).toList())
|
||||||
).toList());
|
).toList());
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,10 +35,12 @@ public class DescriptionToPublicApiDatasetMapper {
|
||||||
model.setDatasetProfileDefinition(descriptionTemplateToPublicApiDatasetProfileMapper.toPublicModel(description.getDescriptionTemplate()));
|
model.setDatasetProfileDefinition(descriptionTemplateToPublicApiDatasetProfileMapper.toPublicModel(description.getDescriptionTemplate()));
|
||||||
|
|
||||||
model.setProfile(DatasetProfilePublicModel.fromDataModel(description.getDescriptionTemplate()));
|
model.setProfile(DatasetProfilePublicModel.fromDataModel(description.getDescriptionTemplate()));
|
||||||
|
if (description.getDescriptionReferences() != null) {
|
||||||
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());
|
||||||
model.setDataRepositories(description.getDescriptionReferences().stream().map(DataRepositoryPublicModel::fromDescriptionReference).filter(Objects::nonNull).toList());
|
model.setDataRepositories(description.getDescriptionReferences().stream().map(DataRepositoryPublicModel::fromDescriptionReference).filter(Objects::nonNull).toList());
|
||||||
model.setExternalDatasets(description.getDescriptionReferences().stream().map(ExternalDatasetPublicListingModel::fromDescriptionReference).filter(Objects::nonNull).toList());
|
model.setExternalDatasets(description.getDescriptionReferences().stream().map(ExternalDatasetPublicListingModel::fromDescriptionReference).filter(Objects::nonNull).toList());
|
||||||
|
}
|
||||||
|
|
||||||
model.setCreatedAt(Date.from(description.getCreatedAt()));
|
model.setCreatedAt(Date.from(description.getCreatedAt()));
|
||||||
model.setModifiedAt(Date.from(description.getUpdatedAt()));
|
model.setModifiedAt(Date.from(description.getUpdatedAt()));
|
||||||
|
|
|
@ -195,7 +195,7 @@ public class DescriptionQuery extends QueryBase<DescriptionEntity> {
|
||||||
|
|
||||||
List<Predicate> predicates = new ArrayList<>();
|
List<Predicate> predicates = new ArrayList<>();
|
||||||
if (userId != null || usePublic ) {
|
if (userId != null || usePublic ) {
|
||||||
predicates.add(queryContext.CriteriaBuilder.in(queryContext.Root.get(DescriptionEntity._dmpId)).value(queryUtilsService.buildDmpAuthZSubQuery(queryContext.Query, queryContext.CriteriaBuilder, userId, usePublic)));
|
predicates.add(queryContext.CriteriaBuilder.in(queryContext.Root.get(DescriptionEntity._id)).value(queryUtilsService.buildDescriptionAuthZSubQuery(queryContext.Query, queryContext.CriteriaBuilder, userId, usePublic)));
|
||||||
}
|
}
|
||||||
if (!predicates.isEmpty()) {
|
if (!predicates.isEmpty()) {
|
||||||
Predicate[] predicatesArray = predicates.toArray(new Predicate[0]);
|
Predicate[] predicatesArray = predicates.toArray(new Predicate[0]);
|
||||||
|
|
|
@ -11,6 +11,8 @@ public interface QueryUtilsService {
|
||||||
|
|
||||||
Subquery<UUID> buildDmpAuthZSubQuery(AbstractQuery<?> query, CriteriaBuilder criteriaBuilder, UUID userId, Boolean usePublic);
|
Subquery<UUID> buildDmpAuthZSubQuery(AbstractQuery<?> query, CriteriaBuilder criteriaBuilder, UUID userId, Boolean usePublic);
|
||||||
|
|
||||||
|
Subquery<UUID> buildDescriptionAuthZSubQuery(AbstractQuery<?> query, CriteriaBuilder criteriaBuilder, UUID userId, Boolean usePublic);
|
||||||
|
|
||||||
Subquery<UUID> buildPublicDmpAuthZSubQuery(AbstractQuery<?> query,
|
Subquery<UUID> buildPublicDmpAuthZSubQuery(AbstractQuery<?> query,
|
||||||
CriteriaBuilder criteriaBuilder,
|
CriteriaBuilder criteriaBuilder,
|
||||||
Boolean usePublic);
|
Boolean usePublic);
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
package eu.eudat.query.utils;
|
package eu.eudat.query.utils;
|
||||||
|
|
||||||
|
import eu.eudat.commons.enums.DescriptionStatus;
|
||||||
import eu.eudat.commons.enums.DmpAccessType;
|
import eu.eudat.commons.enums.DmpAccessType;
|
||||||
import eu.eudat.commons.enums.DmpStatus;
|
import eu.eudat.commons.enums.DmpStatus;
|
||||||
import eu.eudat.commons.enums.IsActive;
|
import eu.eudat.commons.enums.IsActive;
|
||||||
|
import eu.eudat.data.DescriptionEntity;
|
||||||
import eu.eudat.data.DmpEntity;
|
import eu.eudat.data.DmpEntity;
|
||||||
import eu.eudat.data.DmpUserEntity;
|
import eu.eudat.data.DmpUserEntity;
|
||||||
import jakarta.persistence.criteria.*;
|
import jakarta.persistence.criteria.*;
|
||||||
|
@ -40,6 +42,23 @@ public class QueryUtilsServiceImpl implements QueryUtilsService {
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Subquery<UUID> buildDescriptionAuthZSubQuery(AbstractQuery<?> query, CriteriaBuilder criteriaBuilder, UUID userId, Boolean usePublic) {
|
||||||
|
return this.buildSubQuery(new BuildSubQueryInput<>(
|
||||||
|
new BuildSubQueryInput.Builder<>(DescriptionEntity.class, UUID.class)
|
||||||
|
.query(query)
|
||||||
|
.criteriaBuilder(criteriaBuilder)
|
||||||
|
.keyPathFunc((subQueryRoot) -> subQueryRoot.get(DescriptionEntity._id))
|
||||||
|
.filterFunc((subQueryRoot, cb) -> cb.or(
|
||||||
|
usePublic ? cb.and(
|
||||||
|
cb.equal(subQueryRoot.get(DescriptionEntity._status), DescriptionStatus.Finalized),
|
||||||
|
cb.equal(subQueryRoot.get(DescriptionEntity._isActive), IsActive.Active)
|
||||||
|
): cb.or(), //Creates a false query
|
||||||
|
userId != null ? cb.equal(subQueryRoot.get(DescriptionEntity._createdById), userId) : cb.or() //Creates a false query
|
||||||
|
)
|
||||||
|
)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Subquery<UUID> buildPublicDmpAuthZSubQuery(AbstractQuery<?> query, CriteriaBuilder criteriaBuilder, Boolean usePublic){
|
public Subquery<UUID> buildPublicDmpAuthZSubQuery(AbstractQuery<?> query, CriteriaBuilder criteriaBuilder, Boolean usePublic){
|
||||||
|
|
|
@ -130,7 +130,7 @@ public class PublicDatasetsDescriptionDocumentation extends BaseController {
|
||||||
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()));
|
||||||
|
|
||||||
DmpQuery dmpQuery = this.queryFactory.query(DmpQuery.class).authorize(EnumSet.of(AuthorizationFlags.Public)).ids(model.getDmp().getId()).isActive(IsActive.Active);
|
DmpQuery dmpQuery = this.queryFactory.query(DmpQuery.class).ids(model.getDmp().getId()).isActive(IsActive.Active);
|
||||||
DmpLookup dmpLookup = getDmpLookup();
|
DmpLookup dmpLookup = getDmpLookup();
|
||||||
Dmp dmp = this.builderFactory.builder(DmpBuilder.class).build(dmpLookup.getProject(), dmpQuery.firstAs(dmpLookup.getProject()));
|
Dmp dmp = this.builderFactory.builder(DmpBuilder.class).build(dmpLookup.getProject(), dmpQuery.firstAs(dmpLookup.getProject()));
|
||||||
|
|
||||||
|
@ -146,6 +146,8 @@ public class PublicDatasetsDescriptionDocumentation extends BaseController {
|
||||||
Description._label,
|
Description._label,
|
||||||
Description._description,
|
Description._description,
|
||||||
Description._status,
|
Description._status,
|
||||||
|
String.join(".", Description._dmp, Dmp._id),
|
||||||
|
String.join(".", Description._dmp, Dmp._label),
|
||||||
String.join(".", Description._createdBy, User._id),
|
String.join(".", Description._createdBy, User._id),
|
||||||
String.join(".", Description._createdBy, User._name),
|
String.join(".", Description._createdBy, User._name),
|
||||||
String.join(".", Description._descriptionReferences, DescriptionReference._reference, Reference._id),
|
String.join(".", Description._descriptionReferences, DescriptionReference._reference, Reference._id),
|
||||||
|
@ -173,7 +175,10 @@ public class PublicDatasetsDescriptionDocumentation extends BaseController {
|
||||||
String.join(".", Description._descriptionTemplate, DescriptionTemplate._definition, Definition._sections, Section._fieldSets, FieldSet._extendedDescription),
|
String.join(".", Description._descriptionTemplate, DescriptionTemplate._definition, Definition._sections, Section._fieldSets, FieldSet._extendedDescription),
|
||||||
String.join(".", Description._descriptionTemplate, DescriptionTemplate._definition, Definition._sections, Section._fieldSets, FieldSet._ordinal),
|
String.join(".", Description._descriptionTemplate, DescriptionTemplate._definition, Definition._sections, Section._fieldSets, FieldSet._ordinal),
|
||||||
String.join(".", Description._descriptionTemplate, DescriptionTemplate._definition, Definition._sections, Section._fieldSets, FieldSet._additionalInformation),
|
String.join(".", Description._descriptionTemplate, DescriptionTemplate._definition, Definition._sections, Section._fieldSets, FieldSet._additionalInformation),
|
||||||
String.join(".", Description._descriptionTemplate, DescriptionTemplate._definition, Definition._sections, Section._fieldSets, FieldSet._multiplicity),
|
String.join(".", Description._descriptionTemplate, DescriptionTemplate._definition, Definition._sections, Section._fieldSets, FieldSet._multiplicity, Multiplicity._min),
|
||||||
|
String.join(".", Description._descriptionTemplate, DescriptionTemplate._definition, Definition._sections, Section._fieldSets, FieldSet._multiplicity, Multiplicity._max),
|
||||||
|
String.join(".", Description._descriptionTemplate, DescriptionTemplate._definition, Definition._sections, Section._fieldSets, FieldSet._multiplicity, Multiplicity._placeholder),
|
||||||
|
String.join(".", Description._descriptionTemplate, DescriptionTemplate._definition, Definition._sections, Section._fieldSets, FieldSet._multiplicity, Multiplicity._tableView),
|
||||||
String.join(".", Description._descriptionTemplate, DescriptionTemplate._definition, Definition._sections, Section._fieldSets, FieldSet._numbering),
|
String.join(".", Description._descriptionTemplate, DescriptionTemplate._definition, Definition._sections, Section._fieldSets, FieldSet._numbering),
|
||||||
String.join(".", Description._descriptionTemplate, DescriptionTemplate._definition, Definition._sections, Section._fieldSets, FieldSet._title),
|
String.join(".", Description._descriptionTemplate, DescriptionTemplate._definition, Definition._sections, Section._fieldSets, FieldSet._title),
|
||||||
String.join(".", Description._descriptionTemplate, DescriptionTemplate._definition, Definition._sections, Section._fieldSets, FieldSet._fields),
|
String.join(".", Description._descriptionTemplate, DescriptionTemplate._definition, Definition._sections, Section._fieldSets, FieldSet._fields),
|
||||||
|
|
Loading…
Reference in New Issue