/* * ALMA - Atacama Large Millimiter Array (c) European Southern Observatory, 2006 * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ package com.cosylab.logging.engine; import com.cosylab.logging.engine.audience.Audience; import com.cosylab.logging.engine.log.ILogEntry; import com.cosylab.logging.engine.log.LogTypeHelper; import com.cosylab.logging.engine.log.LogField; /** * Objects from this class checks if a log matches with the constraints. *
* The purpose of this object is to have a centralized way to check each log * against the given set of constraints before deciding it can be injected * in the system. *
* In particular it checks a log against the followings: *
LCEngine.setFilters()
*/
private Audience audience=Audience.AudienceInfo.ENGINEER.getAudience();
/**
* The filters to apply before publishing logs to the listeners.
* The filters are not applied to XML listeners.
* These filters are applied after the audience.
*/
private FiltersVector filters=null;
/**
* Set the filters to apply to incoming logs before sending to
* the listeners
*
* @param filters The filters to apply
* If null
or empty the filtering is disabled
*/
public void setFilters(FiltersVector filters) {
this.filters=filters;
}
/**
* Set the audience
*
* @param newAudience The new audience as defined in log_audience IDL module
* @see LCEngine.setFilters()
*/
public void setAudience(Audience newAudience) {
if (newAudience==null) {
throw new IllegalArgumentException("The audience can't be null");
}
audience=newAudience;
}
/**
* @return the audience
*/
public Audience getAudience() {
return audience;
}
/**
* @param discardLevel the discardLevel to set
*/
public void setDiscardLevel(LogTypeHelper discardLevel) {
actualDiscardLevel = discardLevel;
}
/**
* @return the filters
*/
public FiltersVector getFilters() {
return filters;
}
/**
* Check if the passed log matches with the constraints.
* * The log is checked in the following order: *
null
log to check
* @return true
if the log matches the criteria
*/
public final boolean match(ILogEntry log) {
if (log==null) {
throw new IllegalArgumentException("The log can't be null");
}
if (actualDiscardLevel!=null && log.getType().ordinal()<=actualDiscardLevel.ordinal()) {
return false;
}
// Check the log against the audience
if (!audience.matches(log)) {
return false;
}
if (filters==null) {
return true;
} else {
return filters.applyFilters(log);
}
}
/**
* Return the discard level used to filter out logs.
*
* @return The discard level in use
*/
public LogTypeHelper getActualDiscardLevel() {
return actualDiscardLevel;
}
}