1 package fr.ifremer.quadrige2.synchro.intercept.data;
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 import com.google.common.collect.Maps;
27 import com.google.common.eventbus.Subscribe;
28 import fr.ifremer.common.synchro.intercept.SynchroInterceptorBase;
29 import fr.ifremer.common.synchro.meta.SynchroDatabaseMetadata;
30 import fr.ifremer.common.synchro.meta.SynchroTableMetadata;
31 import fr.ifremer.common.synchro.meta.event.LoadTableEvent;
32 import fr.ifremer.quadrige2.synchro.intercept.data.internal.ReplaceColumnValuesInterceptor;
33 import fr.ifremer.quadrige2.synchro.service.SynchroDirection;
34 import fr.ifremer.quadrige2.synchro.service.data.DataSynchroDatabaseConfiguration;
35 import org.apache.commons.collections4.MapUtils;
36 import org.hibernate.tool.hbm2ddl.TableMetadata;
37
38 import java.util.Map;
39
40
41
42
43
44
45
46
47 public class ReplaceTableValuesInterceptor extends AbstractDataInterceptor {
48
49 private boolean isEnable = false;
50
51
52
53
54
55
56 public ReplaceTableValuesInterceptor() {
57 super(SynchroDirection.IMPORT_FILE2LOCAL);
58 }
59
60
61 @Override
62 protected void init(DataSynchroDatabaseConfiguration config) {
63 super.init(config);
64 isEnable = MapUtils.isNotEmpty(config.getRemapValues());
65 }
66
67
68 @Override
69 public SynchroInterceptorBase clone() {
70 ReplaceTableValuesInterceptor result = (ReplaceTableValuesInterceptor) super.clone();
71 result.isEnable = isEnable;
72 return result;
73 }
74
75
76 @Override
77 public boolean doApply(SynchroDatabaseMetadata meta, TableMetadata table) {
78
79 return isEnable && getConfig().getRemapValues().containsKey(table.getName());
80 }
81
82
83
84
85
86
87
88
89
90 @Subscribe
91 public void handleLoadTable(LoadTableEvent e) {
92 SynchroTableMetadata table = e.table;
93
94 Map<String, Map<String, Object>> valuesMapByColumnName = getConfig().getRemapValues().get(table.getName());
95 for (String columnName : valuesMapByColumnName.keySet()) {
96
97 int columnIndex = table.getSelectColumnIndex(columnName);
98 if (columnIndex != -1) {
99 Map<String, Object> valuesMap = valuesMapByColumnName.get(columnName);
100
101 ReplaceColumnValuesInterceptor replaceInterceptor = new ReplaceColumnValuesInterceptor(
102 columnIndex,
103 valuesMap);
104 table.addInterceptor(replaceInterceptor);
105 }
106 }
107 }
108
109
110
111 }