org.openfact.events.jpa.JpaAdminEventQuery Maven / Gradle / Ivy
package org.openfact.events.jpa;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Expression;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.openfact.events.admin.AdminEvent;
import org.openfact.events.admin.AdminEventQuery;
import org.openfact.events.admin.OperationType;
public class JpaAdminEventQuery implements AdminEventQuery {
private EntityManager em;
private CriteriaBuilder cb;
private CriteriaQuery cq;
private Root root;
private ArrayList predicates;
private Integer firstResult;
private Integer maxResults;
public JpaAdminEventQuery(EntityManager em) {
this.em = em;
cb = em.getCriteriaBuilder();
cq = cb.createQuery(AdminEventEntity.class);
root = cq.from(AdminEventEntity.class);
predicates = new ArrayList();
}
@Override
public AdminEventQuery organization(String organizationId) {
predicates.add(cb.equal(root.get("organizationId"), organizationId));
return this;
}
@Override
public AdminEventQuery operation(OperationType... operations) {
List operationStrings = new LinkedList();
for (OperationType e : operations) {
operationStrings.add(e.toString());
}
predicates.add(root.get("operationType").in(operationStrings));
return this;
}
@Override
public AdminEventQuery resourceType(String... resourceTypes) {
List resourceTypeStrings = new LinkedList();
for (String e : resourceTypes) {
resourceTypeStrings.add(e.toString());
}
predicates.add(root.get("resourceType").in(resourceTypeStrings));
return this;
}
@Override
public AdminEventQuery authOrganization(String authOrganizationId) {
predicates.add(cb.equal(root.get("authOrganizationId"), authOrganizationId));
return this;
}
@Override
public AdminEventQuery authUser(String authUserId) {
predicates.add(cb.equal(root.get("authUserId"), authUserId));
return this;
}
@Override
public AdminEventQuery authIpAddress(String ipAddress) {
predicates.add(cb.equal(root.get("authIpAddress"), ipAddress));
return this;
}
@Override
public AdminEventQuery resourcePath(String resourcePath) {
Expression rPath = root.get("resourcePath");
predicates.add(cb.like(rPath, resourcePath.replace('*', '%')));
return this;
}
@Override
public AdminEventQuery fromTime(Date fromTime) {
predicates.add(cb.greaterThanOrEqualTo(root.get("time"), fromTime.getTime()));
return this;
}
@Override
public AdminEventQuery toTime(Date toTime) {
predicates.add(cb.lessThanOrEqualTo(root.get("time"), toTime.getTime()));
return this;
}
@Override
public AdminEventQuery firstResult(int firstResult) {
this.firstResult = firstResult;
return this;
}
@Override
public AdminEventQuery maxResults(int maxResults) {
this.maxResults = maxResults;
return this;
}
@Override
public List getResultList() {
if (!predicates.isEmpty()) {
cq.where(cb.and(predicates.toArray(new Predicate[predicates.size()])));
}
cq.orderBy(cb.desc(root.get("time")));
TypedQuery query = em.createQuery(cq);
if (firstResult != null) {
query.setFirstResult(firstResult);
}
if (maxResults != null) {
query.setMaxResults(maxResults);
}
List events = new LinkedList();
for (AdminEventEntity e : query.getResultList()) {
events.add(JpaEventStoreProvider.convertAdminEvent(e));
}
return events;
}
}