1 package com.fasterxml.jackson.databind;
2
3 import java.io.IOException;
4
5 import com.fasterxml.jackson.core.*;
6 import com.fasterxml.jackson.core.format.InputAccessor;
7 import com.fasterxml.jackson.core.format.MatchStrength;
8
9 /**
10  * Sub-class of {@link JsonFactory} that will create a proper
11  * {@link ObjectCodec} to allow seam-less conversions between
12  * JSON content and Java objects (POJOs).
13  * The only addition to regular {@link JsonFactory} currently
14  * is that {@link ObjectMapper} is constructed and passed as
15  * the codec to use.
16  */

17 public class MappingJsonFactory
18     extends JsonFactory
19 {
20     private static final long serialVersionUID = -1; // since 2.7
21
22     public MappingJsonFactory()
23     {
24         this(null);
25     }
26
27     public MappingJsonFactory(ObjectMapper mapper)
28     {
29         super(mapper);
30         if (mapper == null) {
31             setCodec(new ObjectMapper(this));
32         }
33     }
34
35     public MappingJsonFactory(JsonFactory src, ObjectMapper mapper)
36     {
37         super(src, mapper);
38         if (mapper == null) {
39             setCodec(new ObjectMapper(this));
40         }
41     }
42
43     /**
44      * We'll override the method to return more specific type; co-variance
45      * helps here
46      */

47     @Override
48     public final ObjectMapper getCodec() { return (ObjectMapper) _objectCodec; }
49
50     // @since 2.1
51     @Override
52     public JsonFactory copy()
53     {
54         _checkInvalidCopy(MappingJsonFactory.class);
55         // note: as with base class, must NOT copy mapper reference
56         return new MappingJsonFactory(thisnull);
57     }
58     
59     /*
60     /**********************************************************
61     /* Format detection functionality (since 1.8)
62     /**********************************************************
63      */

64     
65     /**
66      * Sub-classes need to override this method
67      */

68     @Override
69     public String getFormatName()
70     {
71         /* since non-JSON factories typically should not extend this class,
72          * let's just always return JSON as name.
73          */

74         return FORMAT_NAME_JSON;
75     }
76
77     /**
78      * Sub-classes need to override this method
79      */

80     @Override
81     public MatchStrength hasFormat(InputAccessor acc) throws IOException
82     {
83         if (getClass() == MappingJsonFactory.class) {
84             return hasJSONFormat(acc);
85         }
86         return null;
87     }
88 }
89