package com.fasterxml.jackson.databind.ser.impl; import java.util.*; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonObjectFormatVisitor; import com.fasterxml.jackson.databind.ser.BeanPropertyFilter; import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; /** * Simple {@link BeanPropertyFilter} implementation that only uses property name * to determine whether to serialize property as is, or to filter it out. */ public abstract class SimpleBeanPropertyFilter implements BeanPropertyFilter // sub-classes must also implement java.io.Serializable { /* /********************************************************** /* Life-cycle /********************************************************** */ protected SimpleBeanPropertyFilter() { } /** * Factory method to construct filter that filters out all properties <b>except</b> * ones includes in set */ public static SimpleBeanPropertyFilter filterOutAllExcept(Set<String> properties) { return new FilterExceptFilter(properties); } public static SimpleBeanPropertyFilter filterOutAllExcept(String... propertyArray) { HashSet<String> properties = new HashSet<String>(propertyArray.length); Collections.addAll(properties, propertyArray); return new FilterExceptFilter(properties); } public static SimpleBeanPropertyFilter serializeAllExcept(Set<String> properties) { return new SerializeExceptFilter(properties); } public static SimpleBeanPropertyFilter serializeAllExcept(String... propertyArray) { HashSet<String> properties = new HashSet<String>(propertyArray.length); Collections.addAll(properties, propertyArray); return new SerializeExceptFilter(properties); } /* /********************************************************** /* Methods for sub-classes /********************************************************** */ /** * Method called to determine whether property will be included * (if 'true' returned) or filtered out (if 'false' returned) */ protected abstract boolean include(BeanPropertyWriter writer); public void serializeAsField(Object bean, JsonGenerator jgen, SerializerProvider provider, BeanPropertyWriter writer) throws Exception { if (include(writer)) { writer.serializeAsField(bean, jgen, provider); } } public void depositSchemaProperty(BeanPropertyWriter writer, ObjectNode propertiesNode, SerializerProvider provider) throws JsonMappingException { if (include(writer)) { writer.depositSchemaProperty(propertiesNode, provider); } } public void depositSchemaProperty(BeanPropertyWriter writer, JsonObjectFormatVisitor objectVisitor, SerializerProvider provider) throws JsonMappingException { if (include(writer)) { writer.depositSchemaProperty(objectVisitor); } } /* /********************************************************** /* Sub-classes /********************************************************** */ /** * Filter implementation which defaults to filtering out unknown * properties and only serializes ones explicitly listed. */ public static class FilterExceptFilter extends SimpleBeanPropertyFilter implements java.io.Serializable { private static final long serialVersionUID = 1L; /** * Set of property names to serialize. */ protected final Set<String> _propertiesToInclude; public FilterExceptFilter(Set<String> properties) { _propertiesToInclude = properties; } @Override protected boolean include(BeanPropertyWriter writer) { return _propertiesToInclude.contains(writer.getName()); } } /** * Filter implementation which defaults to serializing all * properties, except for ones explicitly listed to be filtered out. */ public static class SerializeExceptFilter extends SimpleBeanPropertyFilter { /** * Set of property names to filter out. */ protected final Set<String> _propertiesToExclude; public SerializeExceptFilter(Set<String> properties) { _propertiesToExclude = properties; } @Override protected boolean include(BeanPropertyWriter writer) { return !_propertiesToExclude.contains(writer.getName()); } } }