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