org.codehaus.jackson.map.ser.BeanSerializerBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ehcache Show documentation
Show all versions of ehcache Show documentation
Ehcache is an open source, standards-based cache used to boost performance,
offload the database and simplify scalability. Ehcache is robust, proven and full-featured and
this has made it the most widely-used Java-based cache.
package org.codehaus.jackson.map.ser;
import java.util.*;
import org.codehaus.jackson.map.*;
import org.codehaus.jackson.map.introspect.BasicBeanDescription;
/**
* Builder class used for aggregating deserialization information about
* a POJO, in order to build a {@link JsonSerializer} for serializing
* intances.
* Main reason for using separate builder class is that this makes it easier
* to make actual serializer class fully immutable.
*
* @since 1.7
*/
public class BeanSerializerBuilder
{
private final static BeanPropertyWriter[] NO_PROPERTIES = new BeanPropertyWriter[0];
/*
/**********************************************************
/* General information about POJO
/**********************************************************
*/
final protected BasicBeanDescription _beanDesc;
/*
/**********************************************************
/* Accumulated information about properties
/**********************************************************
*/
/**
* Bean properties, in order of serialization
*/
protected List _properties;
/**
* Optional array of filtered property writers; if null, no
* view-based filtering is performed.
*/
protected BeanPropertyWriter[] _filteredProperties;
/**
* Writer used for "any getter" properties, if any.
*/
protected AnyGetterWriter _anyGetter;
/**
* Id of the property filter to use for POJO, if any.
*/
protected Object _filterId;
/*
/**********************************************************
/* Construction and setter methods
/**********************************************************
*/
public BeanSerializerBuilder(BasicBeanDescription beanDesc) {
_beanDesc = beanDesc;
}
/**
* Copy-constructor that may be used for sub-classing
*/
protected BeanSerializerBuilder(BeanSerializerBuilder src) {
_beanDesc = src._beanDesc;
_properties = src._properties;
_filteredProperties = src._filteredProperties;
_anyGetter = src._anyGetter;
_filterId = src._filterId;
}
public BasicBeanDescription getBeanDescription() { return _beanDesc; }
public List getProperties() { return _properties; }
public BeanPropertyWriter[] getFilteredProperties() { return _filteredProperties; }
/**
* @since 1.9
*/
public boolean hasProperties() {
return (_properties != null) && (_properties.size() > 0);
}
public void setProperties(List properties) {
_properties = properties;
}
public void setFilteredProperties(BeanPropertyWriter[] properties) {
_filteredProperties = properties;
}
public void setAnyGetter(AnyGetterWriter anyGetter) {
_anyGetter = anyGetter;
}
public void setFilterId(Object filterId) {
_filterId = filterId;
}
/*
/**********************************************************
/* Build methods for actually creating serializer instance
/**********************************************************
*/
/**
* Method called to create {@link BeanSerializer} instance with
* all accumulated information. Will construct a serializer if we
* have enough information, or return null if not.
*/
public JsonSerializer> build()
{
BeanPropertyWriter[] properties;
// No properties or any getter? No real serializer; caller gets to handle
if (_properties == null || _properties.isEmpty()) {
if (_anyGetter == null) {
return null;
}
properties = NO_PROPERTIES;
} else {
properties = _properties.toArray(new BeanPropertyWriter[_properties.size()]);
}
return new BeanSerializer(_beanDesc.getType(), properties, _filteredProperties, _anyGetter, _filterId);
}
/**
* Factory method for constructing an "empty" serializer; one that
* outputs no properties (but handles JSON objects properly, including
* type information)
*/
public BeanSerializer createDummy() {
return BeanSerializer.createDummy(_beanDesc.getBeanClass());
}
}