exclusion of deduplicated ds
This commit is contained in:
parent
8e7901afdd
commit
d5a754ffee
|
@ -1,5 +1,20 @@
|
|||
package eu.dnetlib.openaire.dsm.dao;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import javax.persistence.criteria.CriteriaBuilder;
|
||||
import javax.persistence.criteria.Expression;
|
||||
import javax.persistence.criteria.Path;
|
||||
import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
|
||||
import eu.dnetlib.enabling.datasources.common.DsmRuntimeException;
|
||||
import eu.dnetlib.openaire.dsm.domain.FilterName;
|
||||
import eu.dnetlib.openaire.dsm.domain.RequestFilter;
|
||||
|
@ -7,15 +22,6 @@ import eu.dnetlib.openaire.dsm.domain.RequestSort;
|
|||
import eu.dnetlib.openaire.dsm.domain.RequestSortOrder;
|
||||
import eu.dnetlib.openaire.dsm.domain.db.DatasourceApiDbEntry;
|
||||
import eu.dnetlib.openaire.dsm.domain.db.DatasourceDbEntry;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
|
||||
import javax.persistence.criteria.*;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
public class DatasourceSpecs {
|
||||
|
||||
|
@ -24,39 +30,38 @@ public class DatasourceSpecs {
|
|||
public static final String WILDCARD = "%";
|
||||
|
||||
public static Specification<DatasourceDbEntry> dsRegisteredbyNotNullSpec() {
|
||||
return (ds, query, cb) -> cb.and(
|
||||
cb.isNull(ds.get(FilterName.registeredby.name())).not(),
|
||||
cb.isNull(ds.get("registrationdate")).not());
|
||||
return (ds, query, cb) -> cb.and(cb.isNull(ds.get(FilterName.registeredby.name())).not(), cb.isNull(ds.get("registrationdate")).not());
|
||||
}
|
||||
|
||||
public static Specification<DatasourceDbEntry> dsSpec(final RequestSort requestSortBy, final RequestSortOrder order, final RequestFilter requestFilter) {
|
||||
log.debug(String.format("RequestFilter:'%s', RequestSort:'%s', RequestSortOrder:'%s'", requestFilter, requestSortBy, order));
|
||||
return (ds, query, cb) -> {
|
||||
final Predicate p = cb.conjunction();
|
||||
final List<Expression<Boolean>> expressions = p.getExpressions();
|
||||
|
||||
expressions.add(cb.equal(ds.get("eoscType"), "Data Source"));
|
||||
expressions.add(cb.equal(ds.get("dedupMainService"), true));
|
||||
|
||||
if (requestFilter != null) {
|
||||
final List<Expression<Boolean>> expressions = p.getExpressions();
|
||||
requestFilter.entrySet().stream()
|
||||
.forEach(e -> {
|
||||
switch (FilterName.type(e.getKey())) {
|
||||
requestFilter.entrySet()
|
||||
.stream()
|
||||
.forEach(e -> {
|
||||
switch (FilterName.type(e.getKey())) {
|
||||
|
||||
case exact:
|
||||
expressions.add(exactSearch(ds, cb, e));
|
||||
case exact:
|
||||
expressions.add(exactSearch(ds, cb, e));
|
||||
|
||||
break;
|
||||
case search:
|
||||
expressions.add(likeSearch(ds, cb, e));
|
||||
break;
|
||||
case search:
|
||||
expressions.add(likeSearch(ds, cb, e));
|
||||
|
||||
break;
|
||||
case searchOrgs:
|
||||
// search by case insensitive organization's country
|
||||
expressions.add(
|
||||
cb.equal(
|
||||
cb.lower(
|
||||
ds.join("organizations").get(FilterName.country.name())),
|
||||
getValue(e)));
|
||||
break;
|
||||
}
|
||||
});
|
||||
break;
|
||||
case searchOrgs:
|
||||
// search by case insensitive organization's country
|
||||
expressions.add(cb.equal(cb.lower(ds.join("organizations").get(FilterName.country.name())), getValue(e)));
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
if (requestSortBy != null) {
|
||||
if (order != null) {
|
||||
|
@ -83,21 +88,22 @@ public class DatasourceSpecs {
|
|||
final Predicate p = cb.conjunction();
|
||||
if (requestFilter != null) {
|
||||
final List<Expression<Boolean>> expressions = p.getExpressions();
|
||||
requestFilter.entrySet().stream()
|
||||
.forEach(e -> {
|
||||
switch (FilterName.type(e.getKey())) {
|
||||
requestFilter.entrySet()
|
||||
.stream()
|
||||
.forEach(e -> {
|
||||
switch (FilterName.type(e.getKey())) {
|
||||
|
||||
case exact:
|
||||
expressions.add(exactSearch(api, cb, e));
|
||||
break;
|
||||
case search:
|
||||
case exact:
|
||||
expressions.add(exactSearch(api, cb, e));
|
||||
break;
|
||||
case search:
|
||||
|
||||
expressions.add(likeSearch(api, cb, e));
|
||||
break;
|
||||
case searchOrgs:
|
||||
throw new DsmRuntimeException("not implemented");
|
||||
}
|
||||
});
|
||||
expressions.add(likeSearch(api, cb, e));
|
||||
break;
|
||||
case searchOrgs:
|
||||
throw new DsmRuntimeException("not implemented");
|
||||
}
|
||||
});
|
||||
}
|
||||
query.distinct(true);
|
||||
return p;
|
||||
|
@ -108,32 +114,25 @@ public class DatasourceSpecs {
|
|||
|
||||
// substring, case insensitive, like based search
|
||||
private static Predicate likeSearch(final Root<?> r, final CriteriaBuilder cb, final Entry<FilterName, Object> e) {
|
||||
return cb.like(
|
||||
cb.lower(
|
||||
r.get(e.getKey().name())),
|
||||
WILDCARD + getValue(e) + WILDCARD);
|
||||
return cb.like(cb.lower(r.get(e.getKey().name())), WILDCARD + getValue(e) + WILDCARD);
|
||||
}
|
||||
|
||||
// search by ID, managed. exact match
|
||||
// search by ID, managed. exact match
|
||||
private static Predicate exactSearch(final Root<?> r, final CriteriaBuilder cb, final Entry<FilterName, Object> e) {
|
||||
return cb.equal(r.get(e.getKey().name()), getValue(e));
|
||||
}
|
||||
|
||||
private static Object getValue(final Entry<FilterName, Object> e) {
|
||||
if (e.getValue() instanceof String) {
|
||||
final String s = ((String) e.getValue());
|
||||
final String s = (String) e.getValue();
|
||||
|
||||
if (!e.getKey().equals(FilterName.country)) {
|
||||
Boolean b = BooleanUtils.toBooleanObject(s);
|
||||
if (b != null) {
|
||||
return b;
|
||||
}
|
||||
final Boolean b = BooleanUtils.toBooleanObject(s);
|
||||
if (b != null) { return b; }
|
||||
}
|
||||
return e.getKey().equals(FilterName.id) ? s : StringUtils.lowerCase(s);
|
||||
}
|
||||
if (e.getValue() instanceof Boolean) {
|
||||
return e.getValue();
|
||||
}
|
||||
if (e.getValue() instanceof Boolean) { return e.getValue(); }
|
||||
|
||||
return e.getValue();
|
||||
}
|
||||
|
|
|
@ -57,6 +57,9 @@ public abstract class DatasourceIgnoredProperties {
|
|||
@JsonIgnore
|
||||
protected String eoscType;
|
||||
|
||||
@JsonIgnore
|
||||
protected Boolean dedupMainService;
|
||||
|
||||
public String getOd_contenttypes() {
|
||||
return od_contenttypes;
|
||||
}
|
||||
|
@ -193,4 +196,12 @@ public abstract class DatasourceIgnoredProperties {
|
|||
this.eoscType = eoscType;
|
||||
}
|
||||
|
||||
public Boolean getDedupMainService() {
|
||||
return dedupMainService;
|
||||
}
|
||||
|
||||
public void setDedupMainService(final Boolean dedupMainService) {
|
||||
this.dedupMainService = dedupMainService;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -31,6 +31,9 @@ public class DatasourceDbEntry extends Datasource<OrganizationDbEntry, IdentityD
|
|||
@Column(name = "eosc_type")
|
||||
private String eoscType = DEFAULT_EOSC_TYPE;
|
||||
|
||||
@Column(name = "dedup_main_service")
|
||||
private Boolean dedupMainService = true;
|
||||
|
||||
public String getOpenaireId() {
|
||||
return openaireId;
|
||||
}
|
||||
|
@ -53,7 +56,15 @@ public class DatasourceDbEntry extends Datasource<OrganizationDbEntry, IdentityD
|
|||
return eoscType;
|
||||
}
|
||||
|
||||
public void setEoscType(String eoscType) {
|
||||
public void setEoscType(final String eoscType) {
|
||||
this.eoscType = eoscType;
|
||||
}
|
||||
|
||||
public Boolean getDedupMainService() {
|
||||
return dedupMainService;
|
||||
}
|
||||
|
||||
public void setDedupMainService(final Boolean dedupMainService) {
|
||||
this.dedupMainService = dedupMainService;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue