elastic dmp query support group ids

This commit is contained in:
Efstratios Giannopoulos 2024-05-22 13:25:38 +03:00
parent bc6cd2e1ca
commit f72a50f9af
13 changed files with 157 additions and 80 deletions

View File

@ -1,8 +1,11 @@
package org.opencdmp.elastic.data; package org.opencdmp.elastic.data;
import org.opencdmp.commons.enums.DescriptionStatus;
import org.opencdmp.elastic.data.nested.*;
import gr.cite.tools.elastic.ElasticConstants; import gr.cite.tools.elastic.ElasticConstants;
import org.opencdmp.commons.enums.DescriptionStatus;
import org.opencdmp.elastic.data.nested.NestedDescriptionTemplateElasticEntity;
import org.opencdmp.elastic.data.nested.NestedDmpElasticEntity;
import org.opencdmp.elastic.data.nested.NestedReferenceElasticEntity;
import org.opencdmp.elastic.data.nested.NestedTagElasticEntity;
import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.*; import org.springframework.data.elasticsearch.annotations.*;
@ -22,9 +25,7 @@ public class DescriptionElasticEntity {
private UUID tenantId; private UUID tenantId;
public final static String _tenantId = "tenantId"; public final static String _tenantId = "tenantId";
@MultiField(mainField = @Field(value = DescriptionElasticEntity._label, type = FieldType.Text), otherFields = { @MultiField(mainField = @Field(value = DescriptionElasticEntity._label, type = FieldType.Text), otherFields = @InnerField(suffix = ElasticConstants.SubFields.keyword, type = FieldType.Keyword))
@InnerField(suffix = ElasticConstants.SubFields.keyword, type = FieldType.Keyword)
})
private String label; private String label;
public final static String _label = "label"; public final static String _label = "label";
@ -61,7 +62,7 @@ public class DescriptionElasticEntity {
public final static String _references = "references"; public final static String _references = "references";
public UUID getId() { public UUID getId() {
return id; return this.id;
} }
public void setId(UUID id) { public void setId(UUID id) {
@ -69,7 +70,7 @@ public class DescriptionElasticEntity {
} }
public UUID getTenantId() { public UUID getTenantId() {
return tenantId; return this.tenantId;
} }
public void setTenantId(UUID tenantId) { public void setTenantId(UUID tenantId) {
@ -77,7 +78,7 @@ public class DescriptionElasticEntity {
} }
public String getLabel() { public String getLabel() {
return label; return this.label;
} }
public void setLabel(String label) { public void setLabel(String label) {
@ -85,7 +86,7 @@ public class DescriptionElasticEntity {
} }
public String getDescription() { public String getDescription() {
return description; return this.description;
} }
public void setDescription(String description) { public void setDescription(String description) {
@ -93,7 +94,7 @@ public class DescriptionElasticEntity {
} }
public DescriptionStatus getStatus() { public DescriptionStatus getStatus() {
return status; return this.status;
} }
public void setStatus(DescriptionStatus status) { public void setStatus(DescriptionStatus status) {
@ -101,7 +102,7 @@ public class DescriptionElasticEntity {
} }
public Date getFinalizedAt() { public Date getFinalizedAt() {
return finalizedAt; return this.finalizedAt;
} }
public void setFinalizedAt(Date finalizedAt) { public void setFinalizedAt(Date finalizedAt) {
@ -109,7 +110,7 @@ public class DescriptionElasticEntity {
} }
public List<NestedTagElasticEntity> getTags() { public List<NestedTagElasticEntity> getTags() {
return tags; return this.tags;
} }
public void setTags(List<NestedTagElasticEntity> tags) { public void setTags(List<NestedTagElasticEntity> tags) {
@ -117,7 +118,7 @@ public class DescriptionElasticEntity {
} }
public NestedDescriptionTemplateElasticEntity getDescriptionTemplate() { public NestedDescriptionTemplateElasticEntity getDescriptionTemplate() {
return descriptionTemplate; return this.descriptionTemplate;
} }
public void setDescriptionTemplate(NestedDescriptionTemplateElasticEntity descriptionTemplate) { public void setDescriptionTemplate(NestedDescriptionTemplateElasticEntity descriptionTemplate) {
@ -125,7 +126,7 @@ public class DescriptionElasticEntity {
} }
public NestedDmpElasticEntity getDmp() { public NestedDmpElasticEntity getDmp() {
return dmp; return this.dmp;
} }
public void setDmp(NestedDmpElasticEntity dmp) { public void setDmp(NestedDmpElasticEntity dmp) {
@ -133,7 +134,7 @@ public class DescriptionElasticEntity {
} }
public List<NestedReferenceElasticEntity> getReferences() { public List<NestedReferenceElasticEntity> getReferences() {
return references; return this.references;
} }
public void setReferences(List<NestedReferenceElasticEntity> references) { public void setReferences(List<NestedReferenceElasticEntity> references) {
@ -141,7 +142,7 @@ public class DescriptionElasticEntity {
} }
public Date getCreatedAt() { public Date getCreatedAt() {
return createdAt; return this.createdAt;
} }
public void setCreatedAt(Date createdAt) { public void setCreatedAt(Date createdAt) {

View File

@ -1,10 +1,13 @@
package org.opencdmp.elastic.data.nested; package org.opencdmp.elastic.data.nested;
import gr.cite.tools.elastic.ElasticConstants;
import org.opencdmp.commons.enums.DescriptionStatus; import org.opencdmp.commons.enums.DescriptionStatus;
import org.opencdmp.elastic.data.DescriptionElasticEntity; import org.opencdmp.elastic.data.DescriptionElasticEntity;
import gr.cite.tools.elastic.ElasticConstants;
import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.*; import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import org.springframework.data.elasticsearch.annotations.InnerField;
import org.springframework.data.elasticsearch.annotations.MultiField;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -21,9 +24,7 @@ public class NestedDescriptionElasticEntity {
private UUID dmpId; private UUID dmpId;
public final static String _dmpId = "dmpId"; public final static String _dmpId = "dmpId";
@MultiField(mainField = @Field(value = NestedDescriptionElasticEntity._label, type = FieldType.Text), otherFields = { @MultiField(mainField = @Field(value = NestedDescriptionElasticEntity._label, type = FieldType.Text), otherFields = @InnerField(suffix = ElasticConstants.SubFields.keyword, type = FieldType.Keyword))
@InnerField(suffix = ElasticConstants.SubFields.keyword, type = FieldType.Keyword)
})
private String label; private String label;
public final static String _label = "label"; public final static String _label = "label";
@ -52,7 +53,7 @@ public class NestedDescriptionElasticEntity {
public final static String _descriptionTemplate = "descriptionTemplate"; public final static String _descriptionTemplate = "descriptionTemplate";
public UUID getId() { public UUID getId() {
return id; return this.id;
} }
public void setId(UUID id) { public void setId(UUID id) {
@ -60,7 +61,7 @@ public class NestedDescriptionElasticEntity {
} }
public UUID getDmpId() { public UUID getDmpId() {
return dmpId; return this.dmpId;
} }
public void setDmpId(UUID dmpId) { public void setDmpId(UUID dmpId) {
@ -68,7 +69,7 @@ public class NestedDescriptionElasticEntity {
} }
public String getLabel() { public String getLabel() {
return label; return this.label;
} }
public void setLabel(String label) { public void setLabel(String label) {
@ -76,7 +77,7 @@ public class NestedDescriptionElasticEntity {
} }
public String getDescription() { public String getDescription() {
return description; return this.description;
} }
public void setDescription(String description) { public void setDescription(String description) {
@ -84,7 +85,7 @@ public class NestedDescriptionElasticEntity {
} }
public DescriptionStatus getStatus() { public DescriptionStatus getStatus() {
return status; return this.status;
} }
public void setStatus(DescriptionStatus status) { public void setStatus(DescriptionStatus status) {
@ -92,7 +93,7 @@ public class NestedDescriptionElasticEntity {
} }
public Date getFinalizedAt() { public Date getFinalizedAt() {
return finalizedAt; return this.finalizedAt;
} }
public void setFinalizedAt(Date finalizedAt) { public void setFinalizedAt(Date finalizedAt) {
@ -100,7 +101,7 @@ public class NestedDescriptionElasticEntity {
} }
public List<NestedTagElasticEntity> getTags() { public List<NestedTagElasticEntity> getTags() {
return tags; return this.tags;
} }
public void setTags(List<NestedTagElasticEntity> tags) { public void setTags(List<NestedTagElasticEntity> tags) {
@ -108,7 +109,7 @@ public class NestedDescriptionElasticEntity {
} }
public List<NestedReferenceElasticEntity> getReferences() { public List<NestedReferenceElasticEntity> getReferences() {
return references; return this.references;
} }
public void setReferences(List<NestedReferenceElasticEntity> references) { public void setReferences(List<NestedReferenceElasticEntity> references) {
@ -116,7 +117,7 @@ public class NestedDescriptionElasticEntity {
} }
public NestedDescriptionTemplateElasticEntity getDescriptionTemplate() { public NestedDescriptionTemplateElasticEntity getDescriptionTemplate() {
return descriptionTemplate; return this.descriptionTemplate;
} }
public void setDescriptionTemplate(NestedDescriptionTemplateElasticEntity descriptionTemplate) { public void setDescriptionTemplate(NestedDescriptionTemplateElasticEntity descriptionTemplate) {

View File

@ -1,10 +1,12 @@
package org.opencdmp.elastic.data.nested; package org.opencdmp.elastic.data.nested;
import org.opencdmp.commons.enums.DescriptionTemplateVersionStatus;
import org.opencdmp.elastic.data.DescriptionElasticEntity;
import gr.cite.tools.elastic.ElasticConstants; import gr.cite.tools.elastic.ElasticConstants;
import org.opencdmp.commons.enums.DescriptionTemplateVersionStatus;
import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.*; import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import org.springframework.data.elasticsearch.annotations.InnerField;
import org.springframework.data.elasticsearch.annotations.MultiField;
import java.util.UUID; import java.util.UUID;
@ -15,19 +17,20 @@ public class NestedDescriptionTemplateElasticEntity {
private UUID id; private UUID id;
public final static String _id = "id"; public final static String _id = "id";
@MultiField(mainField = @Field(value = NestedDescriptionTemplateElasticEntity._label, type = FieldType.Text), otherFields = { @MultiField(mainField = @Field(value = NestedDescriptionTemplateElasticEntity._label, type = FieldType.Text), otherFields = @InnerField(suffix = ElasticConstants.SubFields.keyword, type = FieldType.Keyword))
@InnerField(suffix = ElasticConstants.SubFields.keyword, type = FieldType.Keyword)
})
private String label; private String label;
public final static String _label = "label"; public final static String _label = "label";
@Field(value = NestedDescriptionTemplateElasticEntity._groupId, type = FieldType.Keyword)
private UUID groupId;
public final static String _groupId = "groupId";
@Field(value = NestedDescriptionTemplateElasticEntity._versionStatus, type = FieldType.Short) @Field(value = NestedDescriptionTemplateElasticEntity._versionStatus, type = FieldType.Short)
private DescriptionTemplateVersionStatus versionStatus; private DescriptionTemplateVersionStatus versionStatus;
public final static String _versionStatus = "versionStatus"; public final static String _versionStatus = "versionStatus";
public UUID getId() { public UUID getId() {
return id; return this.id;
} }
public void setId(UUID id) { public void setId(UUID id) {
@ -35,15 +38,23 @@ public class NestedDescriptionTemplateElasticEntity {
} }
public String getLabel() { public String getLabel() {
return label; return this.label;
} }
public void setLabel(String label) { public void setLabel(String label) {
this.label = label; this.label = label;
} }
public UUID getGroupId() {
return this.groupId;
}
public void setGroupId(UUID groupId) {
this.groupId = groupId;
}
public DescriptionTemplateVersionStatus getVersionStatus() { public DescriptionTemplateVersionStatus getVersionStatus() {
return versionStatus; return this.versionStatus;
} }
public void setVersionStatus(DescriptionTemplateVersionStatus versionStatus) { public void setVersionStatus(DescriptionTemplateVersionStatus versionStatus) {

View File

@ -64,6 +64,7 @@ public class NestedDescriptionElasticBuilder extends BaseElasticBuilder<NestedDe
} }
if (referenceElasticEntityMap != null) m.setReferences(referenceElasticEntityMap.getOrDefault(d.getId(), null)); if (referenceElasticEntityMap != null) m.setReferences(referenceElasticEntityMap.getOrDefault(d.getId(), null));
if (tagElasticEntityMap != null) m.setTags(tagElasticEntityMap.getOrDefault(d.getId(), null)); if (tagElasticEntityMap != null) m.setTags(tagElasticEntityMap.getOrDefault(d.getId(), null));
if (descriptionTemplateElasticEntityMap != null) m.setDescriptionTemplate(descriptionTemplateElasticEntityMap.getOrDefault(d.getDescriptionTemplateId(), null));
models.add(m); models.add(m);
} }
this.logger.debug("build {} items", Optional.of(models).map(List::size).orElse(0)); this.logger.debug("build {} items", Optional.of(models).map(List::size).orElse(0));

View File

@ -1,11 +1,11 @@
package org.opencdmp.elastic.elasticbuilder.nested; package org.opencdmp.elastic.elasticbuilder.nested;
import gr.cite.tools.exception.MyApplicationException;
import gr.cite.tools.logging.LoggerService;
import org.opencdmp.convention.ConventionService; import org.opencdmp.convention.ConventionService;
import org.opencdmp.data.DescriptionTemplateEntity; import org.opencdmp.data.DescriptionTemplateEntity;
import org.opencdmp.elastic.data.nested.NestedDescriptionTemplateElasticEntity; import org.opencdmp.elastic.data.nested.NestedDescriptionTemplateElasticEntity;
import org.opencdmp.elastic.elasticbuilder.BaseElasticBuilder; import org.opencdmp.elastic.elasticbuilder.BaseElasticBuilder;
import gr.cite.tools.exception.MyApplicationException;
import gr.cite.tools.logging.LoggerService;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.beans.factory.config.ConfigurableBeanFactory;
@ -17,7 +17,7 @@ import java.util.List;
import java.util.Optional; import java.util.Optional;
@Component @Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class NestedDescriptionTemplateElasticBuilder extends BaseElasticBuilder<NestedDescriptionTemplateElasticEntity, DescriptionTemplateEntity> { public class NestedDescriptionTemplateElasticBuilder extends BaseElasticBuilder<NestedDescriptionTemplateElasticEntity, DescriptionTemplateEntity> {
@Autowired @Autowired
@ -37,6 +37,7 @@ public class NestedDescriptionTemplateElasticBuilder extends BaseElasticBuilder<
m.setId(d.getId()); m.setId(d.getId());
m.setVersionStatus(d.getVersionStatus()); m.setVersionStatus(d.getVersionStatus());
m.setLabel(d.getLabel()); m.setLabel(d.getLabel());
m.setGroupId(d.getGroupId());
models.add(m); models.add(m);
} }
this.logger.debug("build {} items", Optional.of(models).map(List::size).orElse(0)); this.logger.debug("build {} items", Optional.of(models).map(List::size).orElse(0));

View File

@ -34,7 +34,6 @@ import org.springframework.stereotype.Component;
import javax.management.InvalidApplicationException; import javax.management.InvalidApplicationException;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
@Component @Component
//Like in C# make it Transient //Like in C# make it Transient
@ -50,6 +49,7 @@ public class DmpElasticQuery extends ElasticQuery<DmpElasticEntity, UUID> {
private Collection<Integer> versions; private Collection<Integer> versions;
private Collection<UUID> groupIds; private Collection<UUID> groupIds;
private NestedCollaboratorElasticQuery dmpUserSubQuery; private NestedCollaboratorElasticQuery dmpUserSubQuery;
private NestedDescriptionElasticQuery descriptionSubQuery;
private EnumSet<AuthorizationFlags> authorize = EnumSet.of(AuthorizationFlags.None); private EnumSet<AuthorizationFlags> authorize = EnumSet.of(AuthorizationFlags.None);
@ -58,6 +58,11 @@ public class DmpElasticQuery extends ElasticQuery<DmpElasticEntity, UUID> {
return this; return this;
} }
public DmpElasticQuery descriptionSubQuery(NestedDescriptionElasticQuery subQuery) {
this.descriptionSubQuery = subQuery;
return this;
}
public DmpElasticQuery like(String value) { public DmpElasticQuery like(String value) {
this.like = value; this.like = value;
return this; return this;
@ -294,17 +299,20 @@ public class DmpElasticQuery extends ElasticQuery<DmpElasticEntity, UUID> {
predicates.add(this.not(this.containsUUID(this.elasticFieldOf(DmpElasticEntity._id), this.excludedIds)._toQuery())._toQuery()); predicates.add(this.not(this.containsUUID(this.elasticFieldOf(DmpElasticEntity._id), this.excludedIds)._toQuery())._toQuery());
} }
if (this.statuses != null) { if (this.statuses != null) {
predicates.add(this.contains(this.elasticFieldOf(DmpElasticEntity._status), this.statuses.stream().map(x-> x.getValue()).collect(Collectors.toList()).toArray(new Short[this.statuses.size()]))._toQuery()); predicates.add(this.contains(this.elasticFieldOf(DmpElasticEntity._status), this.statuses.stream().map(DmpStatus::getValue).toList().toArray(new Short[this.statuses.size()]))._toQuery());
} }
if (this.versionStatuses != null) { if (this.versionStatuses != null) {
predicates.add(this.contains(this.elasticFieldOf(DmpElasticEntity._versionStatus), this.versionStatuses.stream().map(x-> x.getValue()).collect(Collectors.toList()).toArray(new Short[this.versionStatuses.size()]))._toQuery()); predicates.add(this.contains(this.elasticFieldOf(DmpElasticEntity._versionStatus), this.versionStatuses.stream().map(DmpVersionStatus::getValue).toList().toArray(new Short[this.versionStatuses.size()]))._toQuery());
} }
if (this.accessTypes != null) { if (this.accessTypes != null) {
predicates.add(this.contains(this.elasticFieldOf(DmpElasticEntity._accessType), this.accessTypes.stream().map(x-> x.getValue()).collect(Collectors.toList()).toArray(new Short[this.accessTypes.size()]))._toQuery()); predicates.add(this.contains(this.elasticFieldOf(DmpElasticEntity._accessType), this.accessTypes.stream().map(DmpAccessType::getValue).toList().toArray(new Short[this.accessTypes.size()]))._toQuery());
} }
if (this.dmpUserSubQuery != null) { if (this.dmpUserSubQuery != null) {
predicates.add(this.nestedQuery( this.dmpUserSubQuery.nestedPath(DmpElasticEntity._collaborators)).build()._toQuery()); predicates.add(this.nestedQuery( this.dmpUserSubQuery.nestedPath(DmpElasticEntity._collaborators)).build()._toQuery());
} }
if (this.descriptionSubQuery != null) {
predicates.add(this.nestedQuery( this.descriptionSubQuery.nestedPath(DmpElasticEntity._descriptions)).build()._toQuery());
}
if (!predicates.isEmpty()) { if (!predicates.isEmpty()) {
return this.and(predicates); return this.and(predicates);

View File

@ -1,26 +1,25 @@
package org.opencdmp.elastic.query; package org.opencdmp.elastic.query;
import co.elastic.clients.elasticsearch._types.query_dsl.Query; import co.elastic.clients.elasticsearch._types.query_dsl.Query;
import org.opencdmp.commons.enums.DescriptionTemplateVersionStatus;
import org.opencdmp.elastic.data.nested.NestedDescriptionTemplateElasticEntity;
import gr.cite.tools.data.query.FieldResolver; import gr.cite.tools.data.query.FieldResolver;
import gr.cite.tools.elastic.configuration.ElasticProperties; import gr.cite.tools.elastic.configuration.ElasticProperties;
import gr.cite.tools.elastic.mapper.FieldBasedMapper; import gr.cite.tools.elastic.mapper.FieldBasedMapper;
import gr.cite.tools.elastic.query.ElasticField; import gr.cite.tools.elastic.query.ElasticField;
import gr.cite.tools.elastic.query.ElasticInnerObjectQuery; import gr.cite.tools.elastic.query.ElasticInnerObjectQuery;
import gr.cite.tools.elastic.query.ElasticNestedQuery; import gr.cite.tools.elastic.query.ElasticNestedQuery;
import org.opencdmp.commons.enums.DescriptionTemplateVersionStatus;
import org.opencdmp.elastic.data.nested.NestedDescriptionTemplateElasticEntity;
import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.Scope;
import org.springframework.data.elasticsearch.client.elc.ElasticsearchTemplate; import org.springframework.data.elasticsearch.client.elc.ElasticsearchTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Map; import java.util.*;
import java.util.Set;
import java.util.UUID;
@Component @Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class InnerObjectDescriptionTemplateElasticQuery extends ElasticInnerObjectQuery<InnerObjectDescriptionTemplateElasticQuery, NestedDescriptionTemplateElasticEntity, UUID> { public class InnerObjectDescriptionTemplateElasticQuery extends ElasticInnerObjectQuery<InnerObjectDescriptionTemplateElasticQuery, NestedDescriptionTemplateElasticEntity, UUID> {
private Collection<UUID> groupIds;
private String innerPath; private String innerPath;
@ -30,6 +29,21 @@ public class InnerObjectDescriptionTemplateElasticQuery extends ElasticInnerObje
return this; return this;
} }
public InnerObjectDescriptionTemplateElasticQuery groupIds(UUID value) {
this.groupIds = List.of(value);
return this;
}
public InnerObjectDescriptionTemplateElasticQuery groupIds(UUID... value) {
this.groupIds = Arrays.asList(value);
return this;
}
public InnerObjectDescriptionTemplateElasticQuery groupIds(Collection<UUID> values) {
this.groupIds = values;
return this;
}
public InnerObjectDescriptionTemplateElasticQuery( public InnerObjectDescriptionTemplateElasticQuery(
ElasticsearchTemplate elasticsearchRestTemplate, ElasticsearchTemplate elasticsearchRestTemplate,
@ -45,7 +59,7 @@ public class InnerObjectDescriptionTemplateElasticQuery extends ElasticInnerObje
@Override @Override
protected Boolean isFalseQuery() { protected Boolean isFalseQuery() {
return false; return this.isEmpty(this.groupIds);
} }
@Override @Override
@ -55,7 +69,16 @@ public class InnerObjectDescriptionTemplateElasticQuery extends ElasticInnerObje
@Override @Override
protected Query applyFilters() { protected Query applyFilters() {
return null; List<Query> predicates = new ArrayList<>();
if (this.groupIds != null) {
predicates.add(this.containsUUID(this.elasticFieldOf(NestedDescriptionTemplateElasticEntity._groupId).disableInfer(true), this.groupIds)._toQuery());
}
if (!predicates.isEmpty()) {
return this.and(predicates);
} else {
return null;
}
} }
@Override @Override
@ -63,6 +86,7 @@ public class InnerObjectDescriptionTemplateElasticQuery extends ElasticInnerObje
NestedDescriptionTemplateElasticEntity mocDoc = new NestedDescriptionTemplateElasticEntity(); NestedDescriptionTemplateElasticEntity mocDoc = new NestedDescriptionTemplateElasticEntity();
if (columns.contains(NestedDescriptionTemplateElasticEntity._id)) mocDoc.setId(FieldBasedMapper.shallowSafeConversion(rawData.get(NestedDescriptionTemplateElasticEntity._id), UUID.class)); if (columns.contains(NestedDescriptionTemplateElasticEntity._id)) mocDoc.setId(FieldBasedMapper.shallowSafeConversion(rawData.get(NestedDescriptionTemplateElasticEntity._id), UUID.class));
if (columns.contains(NestedDescriptionTemplateElasticEntity._label)) mocDoc.setLabel(FieldBasedMapper.shallowSafeConversion(rawData.get(NestedDescriptionTemplateElasticEntity._label), String.class)); if (columns.contains(NestedDescriptionTemplateElasticEntity._label)) mocDoc.setLabel(FieldBasedMapper.shallowSafeConversion(rawData.get(NestedDescriptionTemplateElasticEntity._label), String.class));
if (columns.contains(NestedDescriptionTemplateElasticEntity._groupId)) mocDoc.setGroupId(FieldBasedMapper.shallowSafeConversion(rawData.get(NestedDescriptionTemplateElasticEntity._groupId), UUID.class));
if (columns.contains(NestedDescriptionTemplateElasticEntity._versionStatus)) mocDoc.setVersionStatus(FieldBasedMapper.shallowSafeConversion(rawData.get(NestedDescriptionTemplateElasticEntity._versionStatus), DescriptionTemplateVersionStatus.class)); if (columns.contains(NestedDescriptionTemplateElasticEntity._versionStatus)) mocDoc.setVersionStatus(FieldBasedMapper.shallowSafeConversion(rawData.get(NestedDescriptionTemplateElasticEntity._versionStatus), DescriptionTemplateVersionStatus.class));
return mocDoc; return mocDoc;
} }
@ -71,6 +95,7 @@ public class InnerObjectDescriptionTemplateElasticQuery extends ElasticInnerObje
protected ElasticField fieldNameOf(FieldResolver item) { protected ElasticField fieldNameOf(FieldResolver item) {
if (item.match(NestedDescriptionTemplateElasticEntity._id)) return this.elasticFieldOf(NestedDescriptionTemplateElasticEntity._id).disableInfer(true); if (item.match(NestedDescriptionTemplateElasticEntity._id)) return this.elasticFieldOf(NestedDescriptionTemplateElasticEntity._id).disableInfer(true);
else if (item.match(NestedDescriptionTemplateElasticEntity._label)) return this.elasticFieldOf(NestedDescriptionTemplateElasticEntity._label).disableInfer(true); else if (item.match(NestedDescriptionTemplateElasticEntity._label)) return this.elasticFieldOf(NestedDescriptionTemplateElasticEntity._label).disableInfer(true);
else if (item.match(NestedDescriptionTemplateElasticEntity._groupId)) return this.elasticFieldOf(NestedDescriptionTemplateElasticEntity._groupId).disableInfer(true);
else if (item.match(NestedDescriptionTemplateElasticEntity._versionStatus)) return this.elasticFieldOf(NestedDescriptionTemplateElasticEntity._versionStatus).disableInfer(true); else if (item.match(NestedDescriptionTemplateElasticEntity._versionStatus)) return this.elasticFieldOf(NestedDescriptionTemplateElasticEntity._versionStatus).disableInfer(true);
else return null; else return null;
} }

View File

@ -1,31 +1,35 @@
package org.opencdmp.elastic.query; package org.opencdmp.elastic.query;
import co.elastic.clients.elasticsearch._types.query_dsl.Query; import co.elastic.clients.elasticsearch._types.query_dsl.Query;
import org.opencdmp.commons.enums.DescriptionStatus;
import org.opencdmp.convention.ConventionService;
import org.opencdmp.elastic.data.DescriptionElasticEntity;
import org.opencdmp.elastic.data.nested.NestedDescriptionElasticEntity;
import gr.cite.tools.data.query.FieldResolver; import gr.cite.tools.data.query.FieldResolver;
import gr.cite.tools.data.query.QueryFactory; import gr.cite.tools.data.query.QueryFactory;
import gr.cite.tools.elastic.configuration.ElasticProperties; import gr.cite.tools.elastic.configuration.ElasticProperties;
import gr.cite.tools.elastic.mapper.FieldBasedMapper; import gr.cite.tools.elastic.mapper.FieldBasedMapper;
import gr.cite.tools.elastic.query.ElasticField; import gr.cite.tools.elastic.query.ElasticField;
import gr.cite.tools.elastic.query.ElasticNestedQuery; import gr.cite.tools.elastic.query.ElasticNestedQuery;
import org.opencdmp.commons.enums.DescriptionStatus;
import org.opencdmp.convention.ConventionService;
import org.opencdmp.elastic.data.nested.NestedDescriptionElasticEntity;
import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.Scope;
import org.springframework.data.elasticsearch.client.elc.ElasticsearchTemplate; import org.springframework.data.elasticsearch.client.elc.ElasticsearchTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Date; import java.util.*;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
@Component @Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class NestedDescriptionElasticQuery extends ElasticNestedQuery<NestedDescriptionElasticQuery, NestedDescriptionElasticEntity, UUID> { public class NestedDescriptionElasticQuery extends ElasticNestedQuery<NestedDescriptionElasticQuery, NestedDescriptionElasticEntity, UUID> {
private String nestedPath; private String nestedPath;
private InnerObjectDescriptionTemplateElasticQuery descriptionTemplateSubQuery;
public NestedDescriptionElasticQuery descriptionTemplateSubQuery(InnerObjectDescriptionTemplateElasticQuery subQuery) {
this.descriptionTemplateSubQuery = subQuery;
return this;
}
@Override @Override
public NestedDescriptionElasticQuery nestedPath(String value) { public NestedDescriptionElasticQuery nestedPath(String value) {
@ -61,7 +65,17 @@ public class NestedDescriptionElasticQuery extends ElasticNestedQuery<NestedDesc
@Override @Override
protected Query applyFilters() { protected Query applyFilters() {
return null; List<Query> predicates = new ArrayList<>();
if (this.descriptionTemplateSubQuery != null) {
predicates.add(this.descriptionTemplateSubQuery.innerPath(this.conventionService.asIndexer(this.getNestedPath(), NestedDescriptionElasticEntity._descriptionTemplate)).applyFilters());
}
if (!predicates.isEmpty()) {
return this.and(predicates);
} else {
return null;
}
} }
@Override @Override

View File

@ -1,13 +1,13 @@
package org.opencdmp.elastic.query; package org.opencdmp.elastic.query;
import co.elastic.clients.elasticsearch._types.query_dsl.Query; import co.elastic.clients.elasticsearch._types.query_dsl.Query;
import org.opencdmp.commons.enums.DescriptionTemplateVersionStatus;
import org.opencdmp.elastic.data.nested.NestedDescriptionTemplateElasticEntity;
import gr.cite.tools.data.query.FieldResolver; import gr.cite.tools.data.query.FieldResolver;
import gr.cite.tools.elastic.configuration.ElasticProperties; import gr.cite.tools.elastic.configuration.ElasticProperties;
import gr.cite.tools.elastic.mapper.FieldBasedMapper; import gr.cite.tools.elastic.mapper.FieldBasedMapper;
import gr.cite.tools.elastic.query.ElasticField; import gr.cite.tools.elastic.query.ElasticField;
import gr.cite.tools.elastic.query.ElasticNestedQuery; import gr.cite.tools.elastic.query.ElasticNestedQuery;
import org.opencdmp.commons.enums.DescriptionTemplateVersionStatus;
import org.opencdmp.elastic.data.nested.NestedDescriptionTemplateElasticEntity;
import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.Scope;
import org.springframework.data.elasticsearch.client.elc.ElasticsearchTemplate; import org.springframework.data.elasticsearch.client.elc.ElasticsearchTemplate;
@ -18,7 +18,7 @@ import java.util.Set;
import java.util.UUID; import java.util.UUID;
@Component @Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class NestedDescriptionTemplateElasticQuery extends ElasticNestedQuery<NestedDescriptionTemplateElasticQuery, NestedDescriptionTemplateElasticEntity, UUID> { public class NestedDescriptionTemplateElasticQuery extends ElasticNestedQuery<NestedDescriptionTemplateElasticQuery, NestedDescriptionTemplateElasticEntity, UUID> {
private String nestedPath; private String nestedPath;
@ -62,6 +62,7 @@ public class NestedDescriptionTemplateElasticQuery extends ElasticNestedQuery<Ne
NestedDescriptionTemplateElasticEntity mocDoc = new NestedDescriptionTemplateElasticEntity(); NestedDescriptionTemplateElasticEntity mocDoc = new NestedDescriptionTemplateElasticEntity();
if (columns.contains(NestedDescriptionTemplateElasticEntity._id)) mocDoc.setId(FieldBasedMapper.shallowSafeConversion(rawData.get(NestedDescriptionTemplateElasticEntity._id), UUID.class)); if (columns.contains(NestedDescriptionTemplateElasticEntity._id)) mocDoc.setId(FieldBasedMapper.shallowSafeConversion(rawData.get(NestedDescriptionTemplateElasticEntity._id), UUID.class));
if (columns.contains(NestedDescriptionTemplateElasticEntity._label)) mocDoc.setLabel(FieldBasedMapper.shallowSafeConversion(rawData.get(NestedDescriptionTemplateElasticEntity._label), String.class)); if (columns.contains(NestedDescriptionTemplateElasticEntity._label)) mocDoc.setLabel(FieldBasedMapper.shallowSafeConversion(rawData.get(NestedDescriptionTemplateElasticEntity._label), String.class));
if (columns.contains(NestedDescriptionTemplateElasticEntity._groupId)) mocDoc.setId(FieldBasedMapper.shallowSafeConversion(rawData.get(NestedDescriptionTemplateElasticEntity._groupId), UUID.class));
if (columns.contains(NestedDescriptionTemplateElasticEntity._versionStatus)) mocDoc.setVersionStatus(FieldBasedMapper.shallowSafeConversion(rawData.get(NestedDescriptionTemplateElasticEntity._versionStatus), DescriptionTemplateVersionStatus.class)); if (columns.contains(NestedDescriptionTemplateElasticEntity._versionStatus)) mocDoc.setVersionStatus(FieldBasedMapper.shallowSafeConversion(rawData.get(NestedDescriptionTemplateElasticEntity._versionStatus), DescriptionTemplateVersionStatus.class));
return mocDoc; return mocDoc;
} }
@ -70,6 +71,7 @@ public class NestedDescriptionTemplateElasticQuery extends ElasticNestedQuery<Ne
protected ElasticField fieldNameOf(FieldResolver item) { protected ElasticField fieldNameOf(FieldResolver item) {
if (item.match(NestedDescriptionTemplateElasticEntity._id)) return this.elasticFieldOf(NestedDescriptionTemplateElasticEntity._id).disableInfer(true); if (item.match(NestedDescriptionTemplateElasticEntity._id)) return this.elasticFieldOf(NestedDescriptionTemplateElasticEntity._id).disableInfer(true);
else if (item.match(NestedDescriptionTemplateElasticEntity._label)) return this.elasticFieldOf(NestedDescriptionTemplateElasticEntity._label).disableInfer(true); else if (item.match(NestedDescriptionTemplateElasticEntity._label)) return this.elasticFieldOf(NestedDescriptionTemplateElasticEntity._label).disableInfer(true);
else if (item.match(NestedDescriptionTemplateElasticEntity._groupId)) return this.elasticFieldOf(NestedDescriptionTemplateElasticEntity._groupId).disableInfer(true);
else if (item.match(NestedDescriptionTemplateElasticEntity._versionStatus)) return this.elasticFieldOf(NestedDescriptionTemplateElasticEntity._versionStatus).disableInfer(true); else if (item.match(NestedDescriptionTemplateElasticEntity._versionStatus)) return this.elasticFieldOf(NestedDescriptionTemplateElasticEntity._versionStatus).disableInfer(true);
else return null; else return null;
} }

View File

@ -1,11 +1,11 @@
package org.opencdmp.query.lookup; package org.opencdmp.query.lookup;
import org.opencdmp.commons.enums.DescriptionStatus;
import org.opencdmp.commons.enums.IsActive;
import org.opencdmp.query.DescriptionQuery;
import org.opencdmp.query.DmpDescriptionTemplateQuery;
import gr.cite.tools.data.query.Lookup; import gr.cite.tools.data.query.Lookup;
import gr.cite.tools.data.query.QueryFactory; import gr.cite.tools.data.query.QueryFactory;
import org.opencdmp.commons.enums.IsActive;
import org.opencdmp.elastic.query.InnerObjectDescriptionTemplateElasticQuery;
import org.opencdmp.elastic.query.NestedDescriptionElasticQuery;
import org.opencdmp.query.DmpDescriptionTemplateQuery;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
@ -22,7 +22,7 @@ public class DmpDescriptionTemplateLookup extends Lookup {
private List<IsActive> isActive; private List<IsActive> isActive;
public List<UUID> getIds() { public List<UUID> getIds() {
return ids; return this.ids;
} }
public void setIds(List<UUID> ids) { public void setIds(List<UUID> ids) {
@ -30,7 +30,7 @@ public class DmpDescriptionTemplateLookup extends Lookup {
} }
public List<UUID> getExcludedIds() { public List<UUID> getExcludedIds() {
return excludedIds; return this.excludedIds;
} }
public void setExcludedIds(List<UUID> excludedIds) { public void setExcludedIds(List<UUID> excludedIds) {
@ -38,7 +38,7 @@ public class DmpDescriptionTemplateLookup extends Lookup {
} }
public List<IsActive> getIsActive() { public List<IsActive> getIsActive() {
return isActive; return this.isActive;
} }
public void setIsActive(List<IsActive> isActive) { public void setIsActive(List<IsActive> isActive) {
@ -46,7 +46,7 @@ public class DmpDescriptionTemplateLookup extends Lookup {
} }
public List<UUID> getDmpIds() { public List<UUID> getDmpIds() {
return dmpIds; return this.dmpIds;
} }
public void setDmpIds(List<UUID> dmpIds) { public void setDmpIds(List<UUID> dmpIds) {
@ -54,11 +54,11 @@ public class DmpDescriptionTemplateLookup extends Lookup {
} }
public List<UUID> getDescriptionTemplateGroupIds() { public List<UUID> getDescriptionTemplateGroupIds() {
return descriptionTemplateGroupIds; return this.descriptionTemplateGroupIds;
} }
public List<UUID> getSectionIds() { public List<UUID> getSectionIds() {
return sectionIds; return this.sectionIds;
} }
public void setSectionIds(List<UUID> sectionIds) { public void setSectionIds(List<UUID> sectionIds) {
@ -83,4 +83,17 @@ public class DmpDescriptionTemplateLookup extends Lookup {
return query; return query;
} }
public NestedDescriptionElasticQuery enrichElasticInner(QueryFactory queryFactory) {
NestedDescriptionElasticQuery query = queryFactory.query(NestedDescriptionElasticQuery.class);
if (this.ids != null) throw new UnsupportedOperationException("");
if (this.dmpIds != null) throw new UnsupportedOperationException("");
if (this.descriptionTemplateGroupIds != null) query.descriptionTemplateSubQuery(queryFactory.query(InnerObjectDescriptionTemplateElasticQuery.class).groupIds(this.descriptionTemplateGroupIds));
if (this.sectionIds != null) throw new UnsupportedOperationException("");
if (this.excludedIds != null) throw new UnsupportedOperationException("");
this.enrichCommon(query);
return query;
}
} }

View File

@ -151,8 +151,8 @@ public class DmpLookup extends Lookup {
if (this.statuses != null) query.statuses(this.statuses); if (this.statuses != null) query.statuses(this.statuses);
if (this.versions != null) query.versions(this.versions); if (this.versions != null) query.versions(this.versions);
if (this.versionStatuses != null) query.versionStatuses(this.versionStatuses); if (this.versionStatuses != null) query.versionStatuses(this.versionStatuses);
if (this.dmpDescriptionTemplateSubQuery != null) throw new UnsupportedOperationException(""); if (this.dmpDescriptionTemplateSubQuery != null) query.descriptionSubQuery(this.dmpDescriptionTemplateSubQuery.enrichElasticInner(queryFactory));
if (this.dmpUserSubQuery != null) query.dmpSubQuery(this.dmpUserSubQuery.enrichElasticInner(queryFactory)); if (this.dmpUserSubQuery != null) query.dmpSubQuery(this.dmpUserSubQuery.enrichElasticInner(queryFactory));
this.enrichCommon(query); this.enrichCommon(query);

View File

@ -206,6 +206,7 @@ public class ElasticServiceImpl implements ElasticService {
propertyMap.put(NestedDescriptionTemplateElasticEntity._id, this.createElastic(FieldType.Keyword, false)); propertyMap.put(NestedDescriptionTemplateElasticEntity._id, this.createElastic(FieldType.Keyword, false));
propertyMap.put(NestedDescriptionTemplateElasticEntity._label, this.createElastic(FieldType.Text, true)); propertyMap.put(NestedDescriptionTemplateElasticEntity._label, this.createElastic(FieldType.Text, true));
propertyMap.put(NestedDescriptionTemplateElasticEntity._versionStatus, this.createElastic(FieldType.Short, true)); propertyMap.put(NestedDescriptionTemplateElasticEntity._versionStatus, this.createElastic(FieldType.Short, true));
propertyMap.put(NestedDescriptionTemplateElasticEntity._groupId, this.createElastic(FieldType.Keyword, true));
return propertyMap; return propertyMap;
} }

View File

@ -16,5 +16,4 @@
</mat-autocomplete> </mat-autocomplete>
<mat-error *ngIf="form.hasError('backendError')">{{ form.getError('backendError')?.message}}</mat-error> <mat-error *ngIf="form.hasError('backendError')">{{ form.getError('backendError')?.message}}</mat-error>
<mat-error *ngIf="form.hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error> <mat-error *ngIf="form.hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
</mat-form-field> </mat-form-field>