• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.fasterxml.jackson.databind.ser.impl;
2 
3 import com.fasterxml.jackson.annotation.ObjectIdGenerator;
4 import com.fasterxml.jackson.core.SerializableString;
5 import com.fasterxml.jackson.core.io.SerializedString;
6 import com.fasterxml.jackson.databind.*;
7 
8 /**
9  * Object that knows how to serialize Object Ids.
10  */
11 public final class ObjectIdWriter
12 {
13     public final JavaType idType;
14 
15     /**
16      * Name of id property to write, if not null: if null, should
17      * only write references, but id property is handled by some
18      * other entity.
19      */
20     public final SerializableString propertyName;
21 
22     /**
23      * Blueprint generator instance: actual instance will be
24      * fetched from {@link SerializerProvider} using this as
25      * the key.
26      */
27     public final ObjectIdGenerator<?> generator;
28 
29     /**
30      * Serializer used for serializing id values.
31      */
32     public final JsonSerializer<Object> serializer;
33 
34     /**
35      * Marker that indicates what the first reference is to be
36      * serialized as full POJO, or as Object Id (other references
37      * will always be serialized as Object Id)
38      *
39      * @since 2.1
40      */
41     public final boolean alwaysAsId;
42 
43     /*
44     /**********************************************************
45     /* Life-cycle
46     /**********************************************************
47      */
48 
49     @SuppressWarnings("unchecked")
ObjectIdWriter(JavaType t, SerializableString propName, ObjectIdGenerator<?> gen, JsonSerializer<?> ser, boolean alwaysAsId)50     protected ObjectIdWriter(JavaType t, SerializableString propName,
51             ObjectIdGenerator<?> gen, JsonSerializer<?> ser, boolean alwaysAsId)
52     {
53         idType = t;
54         propertyName = propName;
55         generator = gen;
56         serializer = (JsonSerializer<Object>) ser;
57         this.alwaysAsId = alwaysAsId;
58     }
59 
60     /**
61      * Factory method called by {@link com.fasterxml.jackson.databind.ser.std.BeanSerializerBase}
62      * with the initial information based on standard settings for the type
63      * for which serializer is being built.
64      *
65      * @since 2.3
66      */
construct(JavaType idType, PropertyName propName, ObjectIdGenerator<?> generator, boolean alwaysAsId)67     public static ObjectIdWriter construct(JavaType idType, PropertyName propName,
68             ObjectIdGenerator<?> generator, boolean alwaysAsId)
69     {
70         String simpleName = (propName == null) ? null : propName.getSimpleName();
71         SerializableString serName = (simpleName == null) ? null : new SerializedString(simpleName);
72         return new ObjectIdWriter(idType, serName, generator, null, alwaysAsId);
73     }
74 
withSerializer(JsonSerializer<?> ser)75     public ObjectIdWriter withSerializer(JsonSerializer<?> ser) {
76         return new ObjectIdWriter(idType, propertyName, generator, ser, alwaysAsId);
77     }
78 
79     /**
80      * @since 2.1
81      */
withAlwaysAsId(boolean newState)82     public ObjectIdWriter withAlwaysAsId(boolean newState) {
83         if (newState == alwaysAsId) {
84             return this;
85         }
86         return new ObjectIdWriter(idType, propertyName, generator, serializer, newState);
87     }
88 }
89