package org.ff4j.audit;
/*
* #%L
* ff4j-core
* %%
* Copyright (C) 2013 - 2016 FF4J
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import org.ff4j.utils.TimeUtils;
import org.ff4j.utils.Util;
/**
* Sample Query into Event Repository.
*
* @author Cedrick LUNVEN (@clunven)
*/
public class EventQueryDefinition implements Serializable {
/** Serial. */
private static final long serialVersionUID = -1649081647715140190L;
/** fix a limit of results. */
private int maxresult;
/** Result will use pagination. **/
private boolean pageable = false;
/** Requested page number. **/
private int pagenumber = 0;
/** Requested page size. **/
private int pagesize = 0;
/** Bound bottom. */
private long from = TimeUtils.getTodayMidnightTime();
/** Bound top. */
private long to = TimeUtils.getTomorrowMidnightTime();
/** Filter about names (feature uid, property name). */
private Set < String > namesFilter = new HashSet<String>();
/** Filter on action @see {@link EventConstants}. */
private Set < String > actionFilters = new HashSet<String>();
/** Filter on source @see {@link EventConstants}. */
private Set < String > sourceFilters = new HashSet<String>();
/** Filter on source @see {@link EventConstants}. */
private Set < String > hostFilters = new HashSet<String>();
/**
* Default constucot
*/
public EventQueryDefinition() {
}
/**
* Constructor for a slot.
*/
public EventQueryDefinition(long from, long to) {
this.from = from;
this.to = to;
}
public EventQueryDefinition addFilterName(String name) {
this.namesFilter.add(name);
return this;
}
public EventQueryDefinition addFilterAction(String action) {
this.actionFilters.add(action);
return this;
}
public EventQueryDefinition addFilterSource(String source) {
this.sourceFilters.add(source);
return this;
}
public EventQueryDefinition addFilterHost(String host) {
this.hostFilters.add(host);
return this;
}
/**
* Match Event.
*
* @param evt
* current event over this query
* @return
* if event is valid
*/
public boolean match(Event evt) {
return (evt.getTimestamp() >= from) &&
(evt.getTimestamp() <= to) &&
matchAction(evt.getAction()) &&
matchSource(evt.getSource()) &&
matchHost(evt.getHostName()) &&
matchName(evt.getName());
}
public boolean matchAction(String action) {
return (actionFilters.isEmpty()) || (Util.hasLength(action) && actionFilters.contains(action));
}
public boolean matchSource(String source) {
return (sourceFilters.isEmpty()) || (Util.hasLength(source) && sourceFilters.contains(source));
}
public boolean matchHost(String host) {
return (hostFilters.isEmpty()) || (Util.hasLength(host) && hostFilters.contains(host));
}
public boolean matchName(String name) {
return (namesFilter.isEmpty()) || (Util.hasLength(name) && namesFilter.contains(name));
}
/**
* Getter accessor for attribute 'from'.
*
* @return
* current value of 'from'
*/
public Long getFrom() {
return from;
}
/**
* Setter accessor for attribute 'from'.
*
* @param from
* new value for 'from '
*/
public void setFrom(Long from) {
this.from = from;
}
/**
* Getter accessor for attribute 'to'.
*
* @return
* current value of 'to'
*/
public Long getTo() {
return to;
}
/**
* Setter accessor for attribute 'to'.
*
* @param to
* new value for 'to '
*/
public void setTo(Long to) {
this.to = to;
}
/**
* Getter accessor for attribute 'namesFilter'.
*
* @return
* current value of 'namesFilter'
*/
public Set<String> getNamesFilter() {
return namesFilter;
}
/**
* Setter accessor for attribute 'namesFilter'.
* @param namesFilter
* new value for 'namesFilter '
*/
public void setNamesFilter(Set<String> namesFilter) {
this.namesFilter = namesFilter;
}
/**
* Getter accessor for attribute 'actionFilters'.
*
* @return
* current value of 'actionFilters'
*/
public Set<String> getActionFilters() {
return actionFilters;
}
/**
* Setter accessor for attribute 'actionFilters'.
* @param actionFilters
* new value for 'actionFilters '
*/
public void setActionFilters(Set<String> actionFilters) {
this.actionFilters = actionFilters;
}
/**
* Getter accessor for attribute 'sourceFilters'.
*
* @return
* current value of 'sourceFilters'
*/
public Set<String> getSourceFilters() {
return sourceFilters;
}
/**
* Setter accessor for attribute 'sourceFilters'.
* @param sourceFilters
* new value for 'sourceFilters '
*/
public void setSourceFilters(Set<String> sourceFilters) {
this.sourceFilters = sourceFilters;
}
/**
* Getter accessor for attribute 'hostFilters'.
*
* @return
* current value of 'hostFilters'
*/
public Set<String> getHostFilters() {
return hostFilters;
}
/**
* Setter accessor for attribute 'hostFilters'.
* @param hostFilters
* new value for 'hostFilters '
*/
public void setHostFilters(Set<String> hostFilters) {
this.hostFilters = hostFilters;
}
/**
* Setter accessor for attribute 'from'.
* @param from
* new value for 'from '
*/
public void setFrom(long from) {
this.from = from;
}
/**
* Setter accessor for attribute 'to'.
* @param to
* new value for 'to '
*/
public void setTo(long to) {
this.to = to;
}
/**
* Getter accessor for attribute 'maxresult'.
*
* @return
* current value of 'maxresult'
*/
public int getMaxresult() {
return maxresult;
}
/**
* Setter accessor for attribute 'maxresult'.
* @param maxresult
* new value for 'maxresult '
*/
public void setMaxresult(int maxresult) {
this.maxresult = maxresult;
}
/**
* Getter accessor for attribute 'pageable'.
*
* @return
* current value of 'pageable'
*/
public boolean isPageable() {
return pageable;
}
/**
* Setter accessor for attribute 'pageable'.
* @param pageable
* new value for 'pageable '
*/
public void setPageable(boolean pageable) {
this.pageable = pageable;
}
/**
* Getter accessor for attribute 'pagenumber'.
*
* @return
* current value of 'pagenumber'
*/
public int getPagenumber() {
return pagenumber;
}
/**
* Setter accessor for attribute 'pagenumber'.
* @param pagenumber
* new value for 'pagenumber '
*/
public void setPagenumber(int pagenumber) {
this.pagenumber = pagenumber;
}
/**
* Getter accessor for attribute 'pagesize'.
*
* @return
* current value of 'pagesize'
*/
public int getPagesize() {
return pagesize;
}
/**
* Setter accessor for attribute 'pagesize'.
* @param pagesize
* new value for 'pagesize '
*/
public void setPagesize(int pagesize) {
this.pagesize = pagesize;
}
}