1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.ibatis.sqlmap.engine.exchange;
17
18 import com.ibatis.sqlmap.engine.type.DomTypeMarker;
19 import com.ibatis.sqlmap.engine.type.TypeHandlerFactory;
20
21 import java.util.List;
22 import java.util.Map;
23
24
25
26
27 public class DataExchangeFactory {
28
29
30 private final DataExchange domDataExchange;
31
32
33 private final DataExchange listDataExchange;
34
35
36 private final DataExchange mapDataExchange;
37
38
39 private final DataExchange primitiveDataExchange;
40
41
42 private final DataExchange complexDataExchange;
43
44
45 private TypeHandlerFactory typeHandlerFactory;
46
47
48
49
50
51
52
53 public DataExchangeFactory(TypeHandlerFactory typeHandlerFactory) {
54 this.typeHandlerFactory = typeHandlerFactory;
55 domDataExchange = new DomDataExchange(this);
56 listDataExchange = new ListDataExchange(this);
57 mapDataExchange = new ComplexDataExchange(this);
58 primitiveDataExchange = new PrimitiveDataExchange(this);
59 complexDataExchange = new ComplexDataExchange(this);
60 }
61
62
63
64
65
66
67 public TypeHandlerFactory getTypeHandlerFactory() {
68 return typeHandlerFactory;
69 }
70
71
72
73
74
75
76
77
78
79 public DataExchange getDataExchangeForClass(Class clazz) {
80 DataExchange dataExchange = null;
81 if (clazz == null) {
82 dataExchange = complexDataExchange;
83 } else if (DomTypeMarker.class.isAssignableFrom(clazz)) {
84 dataExchange = domDataExchange;
85 } else if (List.class.isAssignableFrom(clazz)) {
86 dataExchange = listDataExchange;
87 } else if (Map.class.isAssignableFrom(clazz)) {
88 dataExchange = mapDataExchange;
89 } else if (typeHandlerFactory.getTypeHandler(clazz) != null) {
90 dataExchange = primitiveDataExchange;
91 } else {
92 dataExchange = new JavaBeanDataExchange(this);
93 }
94 return dataExchange;
95 }
96
97 }