aboutsummaryrefslogtreecommitdiffstats
path: root/src/eu/equalparts/cardbase/json/JSON.java
blob: b06f205915964b6ec3997def62572752b82fb923 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package eu.equalparts.cardbase.json;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;

import eu.equalparts.cardbase.card.Card;

/**
 * This class simply holds an {@code ObjectMapper} to be used whenever JSON must be parsed.
 * In the future it may be removed in favour of individual mappers for each function.
 * 
 * @author Eduardo Pedroni
 */
public final class JSON {
	
	/**
	 * The Jackson {@code ObjectMapper} which parses fetched JSON files.
	 */
	public static final ObjectMapper mapper = createMapper();

	/**
	 * Private constructor, this class is not to be instantiated.
	 */
	private JSON() {}
	
	/**
	 * Instantiate and configure Jackson mapper statically. 
	 * 
	 * @return the {@code ObjectMapper}, ready to use.
	 */
	private static ObjectMapper createMapper() {
		ObjectMapper objectMapper = new ObjectMapper();
		// classes don't necessarily use all json fields
		objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
		// disable auto detection
		objectMapper.disable(MapperFeature.AUTO_DETECT_CREATORS,
	            MapperFeature.AUTO_DETECT_FIELDS,
	            MapperFeature.AUTO_DETECT_GETTERS,
	            MapperFeature.AUTO_DETECT_IS_GETTERS);
		
		SimpleModule sm = new SimpleModule();
		sm.addDeserializer(Card.class, new CardDeserializer());
		sm.addSerializer(Card.class, new CardSerializer());
		
		objectMapper.registerModule(sm);
		return objectMapper;
	}
}