Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring

This commit is contained in:
Sofia Papacharalampous 2024-05-28 11:05:50 +03:00
commit 5a83740010
4 changed files with 40 additions and 13 deletions

View File

@ -1,14 +1,12 @@
package org.opencdmp.authorization.authorizationcontentresolver; package org.opencdmp.authorization.authorizationcontentresolver;
import gr.cite.tools.cache.CacheService;
import org.opencdmp.authorization.AffiliatedResource; import org.opencdmp.authorization.AffiliatedResource;
import org.opencdmp.convention.ConventionService; import org.opencdmp.convention.ConventionService;
import gr.cite.tools.cache.CacheService;
import gr.cite.tools.exception.MyApplicationException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.UUID; import java.util.UUID;
@ -35,7 +33,7 @@ public class AffiliationCacheService extends CacheService<AffiliationCacheServic
private AffiliatedResource affiliatedResource; private AffiliatedResource affiliatedResource;
public UUID getUserId() { public UUID getUserId() {
return userId; return this.userId;
} }
public void setUserId(UUID userId) { public void setUserId(UUID userId) {
@ -43,7 +41,7 @@ public class AffiliationCacheService extends CacheService<AffiliationCacheServic
} }
public UUID getTenantId() { public UUID getTenantId() {
return tenantId; return this.tenantId;
} }
public void setTenantId(UUID tenantId) { public void setTenantId(UUID tenantId) {
@ -51,7 +49,7 @@ public class AffiliationCacheService extends CacheService<AffiliationCacheServic
} }
public UUID getEntityId() { public UUID getEntityId() {
return entityId; return this.entityId;
} }
public void setEntityId(UUID entityId) { public void setEntityId(UUID entityId) {
@ -59,7 +57,7 @@ public class AffiliationCacheService extends CacheService<AffiliationCacheServic
} }
public String getEntityType() { public String getEntityType() {
return entityType; return this.entityType;
} }
public void setEntityType(String entityType) { public void setEntityType(String entityType) {
@ -67,7 +65,7 @@ public class AffiliationCacheService extends CacheService<AffiliationCacheServic
} }
public AffiliatedResource getAffiliatedResource() { public AffiliatedResource getAffiliatedResource() {
return affiliatedResource; return this.affiliatedResource;
} }
public void setAffiliatedResource(AffiliatedResource affiliatedResource) { public void setAffiliatedResource(AffiliatedResource affiliatedResource) {

View File

@ -18,7 +18,9 @@ import org.opencdmp.commons.types.description.FieldEntity;
import org.opencdmp.convention.ConventionService; import org.opencdmp.convention.ConventionService;
import org.opencdmp.data.ReferenceEntity; import org.opencdmp.data.ReferenceEntity;
import org.opencdmp.data.StorageFileEntity; import org.opencdmp.data.StorageFileEntity;
import org.opencdmp.data.TagEntity;
import org.opencdmp.model.StorageFile; import org.opencdmp.model.StorageFile;
import org.opencdmp.model.Tag;
import org.opencdmp.model.builder.commonmodels.BaseCommonModelBuilder; import org.opencdmp.model.builder.commonmodels.BaseCommonModelBuilder;
import org.opencdmp.model.builder.commonmodels.CommonModelBuilderItemResponse; import org.opencdmp.model.builder.commonmodels.CommonModelBuilderItemResponse;
import org.opencdmp.model.builder.commonmodels.reference.ReferenceCommonModelBuilder; import org.opencdmp.model.builder.commonmodels.reference.ReferenceCommonModelBuilder;
@ -26,6 +28,7 @@ import org.opencdmp.model.persist.StorageFilePersist;
import org.opencdmp.model.reference.Reference; import org.opencdmp.model.reference.Reference;
import org.opencdmp.query.ReferenceQuery; import org.opencdmp.query.ReferenceQuery;
import org.opencdmp.query.StorageFileQuery; import org.opencdmp.query.StorageFileQuery;
import org.opencdmp.query.TagQuery;
import org.opencdmp.service.storage.StorageFileProperties; import org.opencdmp.service.storage.StorageFileProperties;
import org.opencdmp.service.storage.StorageFileService; import org.opencdmp.service.storage.StorageFileService;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -87,6 +90,7 @@ public class FieldCommonModelBuilder extends BaseCommonModelBuilder<FieldModel,
FieldType fieldType = this.fieldEntity != null && this.fieldEntity.getData() != null ? this.fieldEntity.getData().getFieldType() : FieldType.FREE_TEXT; FieldType fieldType = this.fieldEntity != null && this.fieldEntity.getData() != null ? this.fieldEntity.getData().getFieldType() : FieldType.FREE_TEXT;
Map<UUID, ReferenceModel> referenceItemsMap = FieldType.isReferenceType(fieldType) ? this.collectReferences(data) : null; Map<UUID, ReferenceModel> referenceItemsMap = FieldType.isReferenceType(fieldType) ? this.collectReferences(data) : null;
Map<UUID, String> tagItemsMap = FieldType.isTagType(fieldType) ? this.collectTags(data) : null;
List<CommonModelBuilderItemResponse<FieldModel, FieldEntity>> models = new ArrayList<>(); List<CommonModelBuilderItemResponse<FieldModel, FieldEntity>> models = new ArrayList<>();
for (FieldEntity d : data) { for (FieldEntity d : data) {
@ -95,13 +99,20 @@ public class FieldCommonModelBuilder extends BaseCommonModelBuilder<FieldModel,
if (FieldType.isDateType(fieldType)) m.setDateValue(d.getDateValue()); if (FieldType.isDateType(fieldType)) m.setDateValue(d.getDateValue());
if (FieldType.isBooleanType(fieldType)) m.setBooleanValue(d.getBooleanValue()); if (FieldType.isBooleanType(fieldType)) m.setBooleanValue(d.getBooleanValue());
if (FieldType.isTextType(fieldType)) m.setTextValue(d.getTextValue()); if (FieldType.isTextType(fieldType)) m.setTextValue(d.getTextValue());
if (FieldType.isTagType(fieldType)) m.setTextListValue(d.getTextListValue());
if (FieldType.isTextListType(fieldType)) m.setTextListValue(d.getTextListValue()); if (FieldType.isTextListType(fieldType)) m.setTextListValue(d.getTextListValue());
if (FieldType.isReferenceType(fieldType) && referenceItemsMap != null && d.getTextListValue() != null && !d.getTextListValue().isEmpty()) { if (FieldType.isReferenceType(fieldType) && referenceItemsMap != null && d.getTextListValue() != null && !d.getTextListValue().isEmpty()) {
m.setReferences(new ArrayList<>()); m.setReferences(new ArrayList<>());
for (UUID referenceId : d.getTextListValue().stream().map(UUID::fromString).toList()){ for (UUID referenceId : d.getTextListValue().stream().map(UUID::fromString).distinct().toList()){
if (referenceItemsMap.containsKey(referenceId)) m.getReferences().add(referenceItemsMap.get(referenceId)); if (referenceItemsMap.containsKey(referenceId)) m.getReferences().add(referenceItemsMap.get(referenceId));
} }
} }
if (FieldType.isTagType(fieldType) && tagItemsMap != null && d.getTextListValue() != null && !d.getTextListValue().isEmpty()) {
m.setTextListValue(new ArrayList<>());
for (UUID tagId : d.getTextListValue().stream().map(UUID::fromString).distinct().toList()){
if (tagItemsMap.containsKey(tagId)) m.getTextListValue().add(tagItemsMap.get(tagId));
}
}
if (FieldType.UPLOAD.equals(fieldType) && d.getTextValue() != null && !d.getTextValue().isEmpty()) { if (FieldType.UPLOAD.equals(fieldType) && d.getTextValue() != null && !d.getTextValue().isEmpty()) {
try { try {
@ -144,6 +155,21 @@ public class FieldCommonModelBuilder extends BaseCommonModelBuilder<FieldModel,
return persisted.getFileRef(); return persisted.getFileRef();
} }
private Map<UUID, String> collectTags(List<FieldEntity> data){
if (data.isEmpty())
return null;
this.logger.debug("checking related - {}", TagEntity.class.getSimpleName());
List<UUID> tagIds = data.stream().map(FieldEntity::getTextListValue).filter(Objects::nonNull).flatMap(List::stream).filter(x-> !this.conventionService.isNullOrEmpty(x)).map(UUID::fromString).distinct().collect(Collectors.toList());
List<TagEntity> existingTags = this.queryFactory.query(TagQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).disableTracking().ids(tagIds).collectAs(new BaseFieldSet().ensure(Tag._id).ensure(Tag._label));
Map<UUID, String> itemMap = new HashMap<>();
for (UUID tag : tagIds){
existingTags.stream().filter(x -> x.getId().equals(tag)).findFirst().ifPresent(existingTag -> itemMap.put(tag, existingTag.getId().toString()));
}
return itemMap;
}
private Map<UUID, ReferenceModel> collectReferences(List<FieldEntity> data) throws MyApplicationException { private Map<UUID, ReferenceModel> collectReferences(List<FieldEntity> data) throws MyApplicationException {
if (data.isEmpty()) if (data.isEmpty())
return null; return null;
@ -151,7 +177,7 @@ public class FieldCommonModelBuilder extends BaseCommonModelBuilder<FieldModel,
Map<UUID, ReferenceModel> itemMap; Map<UUID, ReferenceModel> itemMap;
ReferenceQuery q = this.queryFactory.query(ReferenceQuery.class).disableTracking().authorize(this.authorize).ids(data.stream().filter(x-> x.getTextListValue() != null).map(FieldEntity::getTextListValue).flatMap(List::stream).filter(x-> !this.conventionService.isNullOrEmpty(x)).map(UUID::fromString).distinct().collect(Collectors.toList())); ReferenceQuery q = this.queryFactory.query(ReferenceQuery.class).disableTracking().authorize(this.authorize).ids(data.stream().map(FieldEntity::getTextListValue).filter(Objects::nonNull).flatMap(List::stream).filter(x-> !this.conventionService.isNullOrEmpty(x)).map(UUID::fromString).distinct().collect(Collectors.toList()));
itemMap = this.builderFactory.builder(ReferenceCommonModelBuilder.class).authorize(this.authorize).asForeignKey(q, ReferenceEntity::getId); itemMap = this.builderFactory.builder(ReferenceCommonModelBuilder.class).authorize(this.authorize).asForeignKey(q, ReferenceEntity::getId);
return itemMap; return itemMap;

View File

@ -98,14 +98,14 @@ public class FieldBuilder extends BaseBuilder<Field, FieldEntity> {
} }
if (!referenceFields.isEmpty() && FieldType.isReferenceType(fieldType) && referenceItemsMap != null && d.getTextListValue() != null && !d.getTextListValue().isEmpty()) { if (!referenceFields.isEmpty() && FieldType.isReferenceType(fieldType) && referenceItemsMap != null && d.getTextListValue() != null && !d.getTextListValue().isEmpty()) {
m.setReferences(new ArrayList<>()); m.setReferences(new ArrayList<>());
for (UUID referenceId : d.getTextListValue().stream().map(UUID::fromString).toList()){ for (UUID referenceId : d.getTextListValue().stream().map(UUID::fromString).distinct().toList()){
if (referenceItemsMap.containsKey(referenceId)) m.getReferences().add(referenceItemsMap.get(referenceId)); if (referenceItemsMap.containsKey(referenceId)) m.getReferences().add(referenceItemsMap.get(referenceId));
} }
} }
if (!tagFields.isEmpty() && FieldType.isTagType(fieldType) && tagsItemsMap != null && d.getTextListValue() != null && !d.getTextListValue().isEmpty()) { if (!tagFields.isEmpty() && FieldType.isTagType(fieldType) && tagsItemsMap != null && d.getTextListValue() != null && !d.getTextListValue().isEmpty()) {
m.setTags(new ArrayList<>()); m.setTags(new ArrayList<>());
for (UUID tagId : d.getTextListValue().stream().map(UUID::fromString).toList()){ for (UUID tagId : d.getTextListValue().stream().map(UUID::fromString).distinct().toList()){
if (tagsItemsMap.containsKey(tagId)) m.getTags().add(tagsItemsMap.get(tagId)); if (tagsItemsMap.containsKey(tagId)) m.getTags().add(tagsItemsMap.get(tagId));
} }
} }

View File

@ -644,7 +644,10 @@ public class DescriptionServiceImpl implements DescriptionService {
fieldPersist.getReferences().add(fieldPersist.getReference()); fieldPersist.getReferences().add(fieldPersist.getReference());
} }
if (!this.conventionService.isListNullOrEmpty(fieldPersist.getReferences())) { if (!this.conventionService.isListNullOrEmpty(fieldPersist.getReferences())) {
List<UUID> usedReferences = new ArrayList<>();
for (ReferencePersist referencePersist : fieldPersist.getReferences()) { for (ReferencePersist referencePersist : fieldPersist.getReferences()) {
if (usedReferences.contains(referencePersist.getId())) continue;
usedReferences.add(referencePersist.getId());
DescriptionReferencePersist descriptionReferencePersist = new DescriptionReferencePersist(); DescriptionReferencePersist descriptionReferencePersist = new DescriptionReferencePersist();
descriptionReferencePersist.setData(new DescriptionReferenceDataPersist()); descriptionReferencePersist.setData(new DescriptionReferenceDataPersist());
descriptionReferencePersist.getData().setFieldId(fieldId); descriptionReferencePersist.getData().setFieldId(fieldId);
@ -1053,7 +1056,7 @@ public class DescriptionServiceImpl implements DescriptionService {
} }
} }
else if (FieldType.isTagType(fieldType) && fieldEntity != null ) { else if (FieldType.isTagType(fieldType) && fieldEntity != null ) {
if (!this.conventionService.isListNullOrEmpty(data.getTextListValue()) && !this.conventionService.isListNullOrEmpty(references)){ if (!this.conventionService.isListNullOrEmpty(data.getTextListValue())){
List<UUID> tagIdsInField = data.getTextListValue().stream().filter(x -> this.conventionService.isValidGuid(UUID.fromString(x))).toList().stream().map(UUID::fromString).collect(Collectors.toList()); List<UUID> tagIdsInField = data.getTextListValue().stream().filter(x -> this.conventionService.isValidGuid(UUID.fromString(x))).toList().stream().map(UUID::fromString).collect(Collectors.toList());
if (!this.conventionService.isListNullOrEmpty(tagIdsInField)){ if (!this.conventionService.isListNullOrEmpty(tagIdsInField)){
List<TagEntity> tagsInField = this.queryFactory.query(TagQuery.class).isActive(IsActive.Active).ids(tagIdsInField).disableTracking().authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).collect(); List<TagEntity> tagsInField = this.queryFactory.query(TagQuery.class).isActive(IsActive.Active).ids(tagIdsInField).disableTracking().authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).collect();