package eu.eudat.data.query.items.table.dataset; import eu.eudat.data.dao.criteria.DatasetPublicCriteria; import eu.eudat.data.entities.Dataset; import eu.eudat.data.query.definition.TableQuery; import eu.eudat.queryable.QueryableList; import eu.eudat.queryable.types.FieldSelectionType; import eu.eudat.queryable.types.SelectionField; import java.util.Arrays; import java.util.UUID; /** * Created by ikalyvas on 10/2/2018. */ public class DatasetPublicTableRequest extends TableQuery { @Override public QueryableList applyCriteria() { QueryableList query = this.getQuery(); query.initSubQuery(String.class).where((builder, root) -> builder.equal(root.get("dmp").get("version"), query.subQueryMax((builder1, externalRoot, nestedRoot) -> builder1.equal(externalRoot.get("dmp").get("groupId"), nestedRoot.get("dmp").get("groupId")), Arrays.asList(new SelectionField(FieldSelectionType.COMPOSITE_FIELD, "dmp:version")), String.class))); if (this.getCriteria().projects != null && !this.getCriteria().projects.isEmpty()) query.where(((builder, root) -> root.get("dmp").get("project").get("id").in(this.getCriteria().projects))); if (this.getCriteria().projectStatus != null) query .where(((builder, root) -> builder.equal(root.get("dmp").get("project").get("status"), this.getCriteria().projectStatus.getValue()))); if (this.getCriteria().datasetProfile != null && !this.getCriteria().datasetProfile.isEmpty()) query .where(((builder, root) -> root.get("profile").get("id").in(this.getCriteria().datasetProfile))); if(this.getCriteria().dmpOrganisations != null && !this.getCriteria().dmpOrganisations.isEmpty())query .where(((builder, root) -> root.join("dmp").join("organisations").get("reference").in(this.getCriteria().dmpOrganisations))); return query; } @Override public QueryableList applyPaging(QueryableList items) { return null; } }