com.fasterxml.jackson.jr.ob.impl.POJODefinition Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jackson-jr-objects Show documentation
Show all versions of jackson-jr-objects Show documentation
Simple data-binding that builds directly on jackson-core (streaming),
has no other dependencies, and provides additional builder-style content generator
package com.fasterxml.jackson.jr.ob.impl;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.*;
/**
* Definition of a single Bean-style Java class, without assumptions
* on usage for serialization or deserialization, used as input
* for constructing bean readers and writers.
*
* @since 2.8
*/
public class POJODefinition
{
protected final Class> _type;
protected final Prop[] _properties;
/**
* Possible per-class definition of names that may be ignored safely
* during deserialization.
*
* @since 2.11
*/
protected final Set _ignorableNames;
public final Constructor> defaultCtor;
public final Constructor> stringCtor;
public final Constructor> longCtor;
public POJODefinition(Class> type, Prop[] props,
Constructor> defaultCtor0, Constructor> stringCtor0, Constructor> longCtor0)
{
_type = type;
_properties = props;
defaultCtor = defaultCtor0;
stringCtor = stringCtor0;
longCtor = longCtor0;
_ignorableNames = null;
}
protected POJODefinition(POJODefinition base,
Prop[] props, Set ignorableN)
{
_type = base._type;
_properties = props;
defaultCtor = base.defaultCtor;
stringCtor = base.stringCtor;
longCtor = base.longCtor;
_ignorableNames = ignorableN;
}
public POJODefinition withProperties(Collection props) {
return new POJODefinition(this, props.toArray(new Prop[0]), _ignorableNames);
}
// @since 2.11
public POJODefinition withIgnorals(Set ignorableN) {
return new POJODefinition(this, _properties, ignorableN);
}
/*
/**********************************************************************
/* Public API
/**********************************************************************
*/
public List getProperties() {
return Arrays.asList(_properties);
}
@Deprecated // in 2.11, will be removed soon
public Prop[] properties() {
return _properties;
}
public Set getIgnorableNames() {
if (_ignorableNames == null) {
return Collections.emptySet();
}
return _ignorableNames;
}
/*
/**********************************************************************
/* Helper class for containing property definitions
/**********************************************************************
*/
public static final class Prop
{
public final String name;
public final Field field;
public final Method setter, getter, isGetter;
private final Collection aliases;
public Prop(String n, Field f,
Method setter0, Method getter0, Method isGetter0,
Collection aliases0)
{
name = n;
field = f;
setter = setter0;
getter = getter0;
isGetter = isGetter0;
if (aliases0 == null) {
aliases0 = Collections.emptyList();
}
aliases = aliases0;
}
public static PropBuilder builder(String name) {
return new PropBuilder(name);
}
public boolean hasSetter() {
return (setter != null) || (field != null);
}
public boolean hasAliases() {
return !aliases.isEmpty();
}
public Iterable aliases() {
return aliases;
}
}
static final class PropBuilder {
private final String _name;
private Field _field;
private Method _setter, _getter, _isGetter;
public PropBuilder(String name) {
_name = name;
}
public Prop build() {
return new Prop(_name, _field, _setter, _getter, _isGetter, null);
}
public PropBuilder withField(Field f) {
_field = f;
return this;
}
public PropBuilder withSetter(Method m) {
_setter = m;
return this;
}
public PropBuilder withGetter(Method m) {
_getter = m;
return this;
}
public PropBuilder withIsGetter(Method m) {
_isGetter = m;
return this;
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy