
ca.gc.aafc.dina.repository.ReadOnlyDinaRepositoryV2 Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dina-base-api Show documentation
Show all versions of dina-base-api Show documentation
Base DINA API package for Java built on SpringBoot and Crnk
package ca.gc.aafc.dina.repository;
import java.util.List;
import java.util.function.Predicate;
import ca.gc.aafc.dina.filter.FilterComponent;
import ca.gc.aafc.dina.filter.FilterExpression;
import ca.gc.aafc.dina.filter.FilterGroup;
import ca.gc.aafc.dina.filter.QueryComponent;
import ca.gc.aafc.dina.filter.QueryStringParser;
import ca.gc.aafc.dina.filter.SimpleObjectFilterHandlerV2;
import ca.gc.aafc.dina.service.PredicateBasedReadOnlyDinaService;
/**
* Based repository for accessing read-only data.
*/
public class ReadOnlyDinaRepositoryV2 {
private final PredicateBasedReadOnlyDinaService service;
public ReadOnlyDinaRepositoryV2(PredicateBasedReadOnlyDinaService service) {
this.service = service;
}
public D findOne(K key) {
return service.findOne(key);
}
public List findAll(String queryString) {
QueryComponent queryComponents = QueryStringParser.parse(queryString);
FilterComponent fc = queryComponents.getFilters();
Predicate predicate = handlePredicate(fc);
return service.findAll(predicate, queryComponents.getPageOffset(), queryComponents.getPageLimit());
}
private Predicate handlePredicate(FilterComponent fc) {
Predicate predicate = null;
if (fc instanceof FilterExpression fex) {
predicate = and(predicate, SimpleObjectFilterHandlerV2.buildPredicate(fex));
} else if( fc instanceof FilterGroup fgrp) {
// multiple values can be submitted with en EQUALS to create an OR.
if (fgrp.getConjunction() == FilterGroup.Conjunction.OR) {
predicate = handleOr(fgrp.getComponents());
} else {
predicate = handleAnd(fgrp.getComponents());
}
}
return predicate;
}
private Predicate handleOr(List orList) {
Predicate predicate = null;
for (FilterComponent fc : orList) {
if (fc instanceof FilterExpression fex) {
predicate = or(predicate, SimpleObjectFilterHandlerV2.buildPredicate(fex));
} else if (fc instanceof FilterGroup fg) {
predicate = or(predicate, handlePredicate(fg));
}
}
return predicate;
}
private Predicate handleAnd(List andList) {
Predicate predicate = null;
for (FilterComponent fc : andList) {
if (fc instanceof FilterExpression fex) {
predicate = and(predicate, SimpleObjectFilterHandlerV2.buildPredicate(fex));
} else if (fc instanceof FilterGroup fg) {
predicate = and(predicate, handlePredicate(fg));
}
}
return predicate;
}
private Predicate and(Predicate current, Predicate toAdd) {
if( current == null) {
return toAdd;
}
return current.and(toAdd);
}
private Predicate or(Predicate current, Predicate toAdd) {
if( current == null) {
return toAdd;
}
return current.or(toAdd);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy