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.eventbus.Subscribe;
27 import fr.ifremer.common.synchro.meta.SynchroTableMetadata;
28 import fr.ifremer.common.synchro.meta.event.CreateQueryEvent;
29 import fr.ifremer.common.synchro.meta.event.LoadTableEvent;
30 import fr.ifremer.common.synchro.query.SynchroQueryBuilder;
31 import fr.ifremer.common.synchro.query.SynchroQueryOperator;
32 import fr.ifremer.quadrige2.core.dao.referential.ObjectTypeCode;
33 import fr.ifremer.quadrige2.synchro.intercept.data.internal.ExportFkRemoteIdInterceptor;
34 import fr.ifremer.quadrige2.synchro.intercept.data.internal.ImportRemoteIdInterceptor;
35 import fr.ifremer.quadrige2.synchro.meta.DatabaseColumns;
36 import fr.ifremer.quadrige2.synchro.meta.data.DataSynchroTables;
37 import fr.ifremer.quadrige2.synchro.service.SynchroDirection;
38
39
40
41
42
43
44
45 public class QualificationHistoryInterceptor extends AbstractDataInterceptor {
46
47
48
49
50
51
52 public QualificationHistoryInterceptor() {
53 super(
54 DataSynchroTables.QUALIFICATION_HISTORY.name(),
55
56 SynchroDirection.IMPORT_TEMP2LOCAL,
57
58 SynchroDirection.EXPORT_TEMP2SERVER,
59 SynchroDirection.EXPORT_LOCAL2TEMP);
60 }
61
62
63
64
65
66
67
68
69
70 @Subscribe
71 public void handleQuery(CreateQueryEvent e) {
72
73 SynchroDirection direction = getConfig().getDirection();
74
75 switch (e.queryName) {
76
77 case count:
78 case countFromUpdateDate:
79 case select:
80 case selectFromUpdateDate:
81 case selectMaxUpdateDate:
82
83 if (direction == SynchroDirection.IMPORT_TEMP2LOCAL) {
84 e.sql = addRestrictionsOnImport(e.sql);
85
86 } else if (direction == SynchroDirection.EXPORT_LOCAL2TEMP
87 || direction == SynchroDirection.EXPORT_TEMP2SERVER) {
88 e.sql = addRestrictionsOnExport(e.sql);
89 }
90 break;
91 default:
92 break;
93 }
94 }
95
96
97
98
99
100
101
102
103
104 @Subscribe
105 public void handleTableLoad(LoadTableEvent e) {
106
107 SynchroTableMetadata table = e.table;
108 SynchroDirection direction = getConfig().getDirection();
109
110
111 if (direction == SynchroDirection.IMPORT_TEMP2LOCAL) {
112
113
114 ImportRemoteIdInterceptor remoteIdInterceptor = new ImportRemoteIdInterceptor(
115 getConfig(),
116 DataSynchroTables.SURVEY.name(),
117 DatabaseColumns.QUAL_HIST_ELEMENT_ID.name(),
118 table.getSelectColumnIndex(DatabaseColumns.QUAL_HIST_ELEMENT_ID.name()),
119 DatabaseColumns.SURVEY_ID.name(),
120 false);
121 table.addInterceptor(remoteIdInterceptor);
122 }
123
124
125 else if (direction == SynchroDirection.EXPORT_TEMP2SERVER) {
126
127
128 ExportFkRemoteIdInterceptor remoteIdInterceptor = new ExportFkRemoteIdInterceptor(
129 getConfig(),
130 DataSynchroTables.SURVEY.name(),
131 DatabaseColumns.QUAL_HIST_ELEMENT_ID.name(),
132 table.getSelectColumnIndex(DatabaseColumns.QUAL_HIST_ELEMENT_ID.name()),
133 DatabaseColumns.SURVEY_ID.name(),
134 false);
135 table.addInterceptor(remoteIdInterceptor);
136 }
137
138 }
139
140
141
142
143
144
145
146
147
148
149
150
151 protected String addRestrictionsOnImport(String sql) {
152
153 SynchroQueryBuilder query = SynchroQueryBuilder.newBuilder(sql);
154
155
156 query.addWhere(SynchroQueryOperator.AND, String.format("t.%s = '%s'",
157 DatabaseColumns.OBJECT_TYPE_CD,
158 ObjectTypeCode.SURVEY.value()));
159
160 return query.build();
161 }
162
163
164
165
166
167
168
169
170
171
172 protected String addRestrictionsOnExport(String sql) {
173
174 SynchroQueryBuilder query = SynchroQueryBuilder.newBuilder(sql);
175
176
177 query.addWhere(SynchroQueryOperator.AND, String.format("t.%s = '%s'",
178 DatabaseColumns.OBJECT_TYPE_CD,
179 ObjectTypeCode.SURVEY.value()));
180
181 return query.build();
182 }
183
184
185 }