/** * Copyright (c) 2014-2017 by the respective copyright holders. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.smarthome.core.persistence; import java.util.Date; import org.eclipse.smarthome.core.types.State; /** * This class is used to define a filter for queries to a {@link PersistenceService}. * * <p> * It is designed as a Java bean, for which the different properties are constraints on the query result. These * properties include the item name, begin and end date and the item state. A compare operator can be defined to compare * not only state equality, but also its decimal value (<,>). * <p> * <p> * Additionally, the filter criteria supports ordering and paging of the result, so the caller can ask to only return * chunks of the result of a certain size (=pageSize) from a starting index (pageNumber*pageSize). * </p> * <p> * All setter methods return the filter criteria instance, so that the methods can be easily chained in order to define * a filter. * * @author Kai Kreuzer - Initial contribution and API */ public class FilterCriteria { /** Enumeration with all possible compare options */ public enum Operator { EQ("="), NEQ("!="), GT(">"), LT("<"), GTE(">="), LTE("<="); private final String symbol; Operator(String symbol) { this.symbol = symbol; } String getSymbol() { return symbol; } } /** Enumeration with all ordering options */ public enum Ordering { ASCENDING, DESCENDING } /** filter result to only contain entries for the given item */ private String itemName; /** filter result to only contain entries that are newer than the given date */ private Date beginDate; /** filter result to only contain entries that are older than the given date */ private Date endDate; /** return the result list from starting index pageNumber*pageSize only */ private int pageNumber = 0; /** return at most this many results */ private int pageSize = Integer.MAX_VALUE; /** use this operator to compare the item state */ private Operator operator = Operator.EQ; /** how to sort the result list by date */ private Ordering ordering = Ordering.DESCENDING; /** filter result to only contain entries that evaluate to true with the given operator and state */ private State state; public String getItemName() { return itemName; } public Date getBeginDate() { return beginDate; } public Date getEndDate() { return endDate; } public int getPageNumber() { return pageNumber; } public int getPageSize() { return pageSize; } public Operator getOperator() { return operator; } public Ordering getOrdering() { return ordering; } public State getState() { return state; } public FilterCriteria setItemName(String itemName) { this.itemName = itemName; return this; } public FilterCriteria setBeginDate(Date beginDate) { this.beginDate = beginDate; return this; } public FilterCriteria setEndDate(Date endDate) { this.endDate = endDate; return this; } public FilterCriteria setPageNumber(int pageNumber) { this.pageNumber = pageNumber; return this; } public FilterCriteria setPageSize(int pageSize) { this.pageSize = pageSize; return this; } public FilterCriteria setOperator(Operator operator) { this.operator = operator; return this; } public FilterCriteria setOrdering(Ordering ordering) { this.ordering = ordering; return this; } public FilterCriteria setState(State state) { this.state = state; return this; } }