package com.fasterxml.jackson.databind.ser.impl;
import java.util.*;
import com.fasterxml.jackson.databind.ser.*;
/**
* Simple {@link FilterProvider} implementation that just stores
* direct id-to-filter mapping.
*/
public class SimpleFilterProvider
extends FilterProvider
implements java.io.Serializable // since 2.1
{
// generated for 2.1.0
private static final long serialVersionUID = -2825494703774121220L;
/**
* Mappings from ids to filters.
*/
protected final Map<String,BeanPropertyFilter> _filtersById;
/**
* This is the filter we return in case no mapping was found for
* given id; default is 'null' (in which case caller typically
* reports an error), but can be set to an explicit filter.
*/
protected BeanPropertyFilter _defaultFilter;
/**
* Flag that indicates whether request for an unknown filter id should
* result an exception (default) or not.
* Note that this is only relevant if no default filter has been
* configured.
*/
protected boolean _cfgFailOnUnknownId = true;
/*
/**********************************************************
/* Life-cycle: constructing, configuring
/**********************************************************
*/
public SimpleFilterProvider() {
this(new HashMap<String,BeanPropertyFilter>());
}
/**
* @param mapping Mapping from id to filter; used as is, no copy is made.
*/
public SimpleFilterProvider(Map<String,BeanPropertyFilter> mapping) {
_filtersById = mapping;
}
/**
* Method for defining filter to return for "unknown" filters; cases
* where there is no mapping from given id to an explicit filter.
*
* @param f Filter to return when no filter is found for given id
*/
public SimpleFilterProvider setDefaultFilter(BeanPropertyFilter f)
{
_defaultFilter = f;
return this;
}
public BeanPropertyFilter getDefaultFilter() {
return _defaultFilter;
}
public SimpleFilterProvider setFailOnUnknownId(boolean state) {
_cfgFailOnUnknownId = state;
return this;
}
public boolean willFailOnUnknownId() {
return _cfgFailOnUnknownId;
}
public SimpleFilterProvider addFilter(String id, BeanPropertyFilter filter) {
_filtersById.put(id, filter);
return this;
}
public BeanPropertyFilter removeFilter(String id) {
return _filtersById.remove(id);
}
/*
/**********************************************************
/* Public lookup API
/**********************************************************
*/
@Override
public BeanPropertyFilter findFilter(Object filterId)
{
BeanPropertyFilter f = _filtersById.get(filterId);
if (f == null) {
f = _defaultFilter;
if (f == null && _cfgFailOnUnknownId) {
throw new IllegalArgumentException("No filter configured with id '"+filterId+"' (type "
+filterId.getClass().getName()+")");
}
}
return f;
}
}