1 package fr.ifremer.quadrige3.synchro.service.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.Multimap;
27 import fr.ifremer.common.synchro.service.SynchroDatabaseConfiguration;
28 import fr.ifremer.quadrige3.core.dao.technical.Assert;
29 import fr.ifremer.quadrige3.core.dao.technical.hibernate.ConfigurationHelper;
30 import fr.ifremer.quadrige3.synchro.meta.DatabaseColumns;
31 import fr.ifremer.quadrige3.synchro.meta.data.DataSynchroTables;
32 import fr.ifremer.quadrige3.synchro.service.AbstractSynchroDatabaseConfiguration;
33 import fr.ifremer.quadrige3.synchro.service.SynchroDirection;
34 import fr.ifremer.quadrige3.synchro.vo.SynchroDateOperatorVO;
35
36 import java.io.File;
37 import java.util.Date;
38 import java.util.Map;
39 import java.util.Properties;
40 import java.util.Set;
41
42
43
44
45
46
47
48 public class DataSynchroDatabaseConfiguration extends AbstractSynchroDatabaseConfiguration {
49
50
51
52
53 private static final String IS_TEMPORARY_DATABASE = "quadrige3.synchro.database.isTemporary";
54
55
56
57
58 private static final String COLUMN_REMOTE_ID = "synchro.database.column.remoteId";
59
60
61
62
63 private static final String COLUMN_SYNCHRONIZATION_STATUS = "synchro.database.column.synchronizationStatus";
64
65
66
67
68 public static String DB_PHOTO_DIRECTORY = "quadrige3.synchro.database.photo.directory";
69
70 private final DataSynchroContext context;
71
72 private String columnRemoteId;
73
74 private String columnSynchronizationStatus;
75
76 private File dbPhotoDirectory;
77
78
79
80
81
82
83
84
85
86
87
88 public DataSynchroDatabaseConfiguration(DataSynchroContext context, SynchroDatabaseConfiguration otherBean) {
89 copy(otherBean);
90 Assert.notNull(context);
91 this.context = context;
92 }
93
94
95
96
97
98
99
100
101
102
103
104
105
106 public DataSynchroDatabaseConfiguration(DataSynchroContext context, Properties settings, boolean isTarget) {
107 super(settings, isTarget);
108 Assert.notNull(context);
109 this.context = context;
110 }
111
112 @Override
113 protected void reloadCachedFields() {
114 super.reloadCachedFields();
115
116 String dbPhotoDirectory = ConfigurationHelper.getString(DB_PHOTO_DIRECTORY, getProperties(), null);
117 if (dbPhotoDirectory != null) {
118 this.dbPhotoDirectory = new File(dbPhotoDirectory);
119 }
120
121 }
122
123
124
125
126
127
128
129
130 public String getColumnRemoteId() {
131 return columnRemoteId;
132 }
133
134
135
136
137
138
139
140
141
142
143 public SynchroDatabaseConfiguration setColumnRemoteId(String columnName) {
144 this.columnRemoteId = columnName;
145 setProperty(COLUMN_REMOTE_ID, columnName);
146 return this;
147 }
148
149
150
151
152
153
154
155
156 public String getColumnSynchronizationStatus() {
157 return columnSynchronizationStatus;
158 }
159
160
161
162
163
164
165
166
167
168
169 public SynchroDatabaseConfiguration setColumnSynchronizationStatus(String columnName) {
170 this.columnSynchronizationStatus = columnName;
171 setProperty(COLUMN_SYNCHRONIZATION_STATUS, columnName);
172 return this;
173 }
174
175 public File getDbPhotoDirectory() {
176 return dbPhotoDirectory;
177 }
178
179 public SynchroDatabaseConfiguration setDbPhotoDirectory(File dbPhotoDirectory) {
180 this.dbPhotoDirectory = dbPhotoDirectory;
181 setProperty(DB_PHOTO_DIRECTORY, dbPhotoDirectory.getAbsolutePath());
182 return this;
183 }
184
185 public boolean isEnablePhoto() {
186 return context.isEnablePhoto();
187 }
188
189
190
191
192
193
194
195
196 public Integer getUserId() {
197 return context.getUserId();
198 }
199
200
201
202
203
204
205
206
207 public Set<String> getProgramCodes() {
208 return context.getProgramCodes();
209 }
210
211
212
213
214
215
216
217
218
219 public void setIsTemporary(boolean isTemporaryDatabase) {
220 setProperty(IS_TEMPORARY_DATABASE, String.valueOf(isTemporaryDatabase));
221 }
222
223
224
225
226
227
228
229
230 public Date getDataStartDate() {
231 return context.getDataStartDate();
232 }
233
234
235
236
237
238
239
240
241 public Date getDataEndDate() {
242 return context.getDataEndDate();
243 }
244
245
246
247
248
249
250
251
252 public SynchroDateOperatorVO getDateOperator() {
253 return context.getDateOperator();
254 }
255
256
257
258
259
260
261
262
263 public boolean isDirtyOnly() {
264 return context.isDirtyOnly();
265 }
266
267
268
269
270
271
272
273
274 public Multimap<String, String> getPkIncludes() {
275 return context.getPkIncludes();
276 }
277
278
279
280
281
282
283
284
285 public SynchroDirection getDirection() {
286 return context.getDirection();
287 }
288
289
290
291
292
293
294
295
296 public boolean isForceEditedRowOverride() {
297 return context.isForceEditedRowOverride();
298 }
299
300
301
302
303
304
305
306
307 public File getChangeLogFile() {
308 return context.getChangeLogFile();
309 }
310
311
312
313
314
315
316
317
318 public Map<String, Map<String, Map<String, Object>>> getRemapValues() {
319 return context.getRemapValues();
320 }
321
322
323
324
325
326
327
328
329 public boolean isForceDuplication() {
330 return context.isForceDuplication();
331 }
332
333
334
335
336
337
338
339 public void excludeUnusedColumns() {
340
341 addColumnExclude(getColumnSynchronizationStatus());
342 addColumnExclude(getColumnRemoteId());
343 }
344
345
346
347
348
349
350
351 public void excludeMeasurementUnusedColumns() {
352
353 addColumnExclude(DataSynchroTables.MEASUREMENT.name(), DatabaseColumns.PAR_CD.name());
354 addColumnExclude(DataSynchroTables.MEASUREMENT.name(), DatabaseColumns.FRACTION_ID.name());
355 addColumnExclude(DataSynchroTables.MEASUREMENT.name(), DatabaseColumns.METHOD_ID.name());
356 addColumnExclude(DataSynchroTables.MEASUREMENT.name(), DatabaseColumns.MATRIX_ID.name());
357
358
359 addColumnExclude(DataSynchroTables.TAXON_MEASUREMENT.name(), DatabaseColumns.PAR_CD.name());
360 addColumnExclude(DataSynchroTables.TAXON_MEASUREMENT.name(), DatabaseColumns.FRACTION_ID.name());
361 addColumnExclude(DataSynchroTables.TAXON_MEASUREMENT.name(), DatabaseColumns.METHOD_ID.name());
362 addColumnExclude(DataSynchroTables.TAXON_MEASUREMENT.name(), DatabaseColumns.MATRIX_ID.name());
363
364
365 addColumnExclude(DataSynchroTables.MEASUREMENT_FILE.name(), DatabaseColumns.PAR_CD.name());
366 addColumnExclude(DataSynchroTables.MEASUREMENT_FILE.name(), DatabaseColumns.FRACTION_ID.name());
367 addColumnExclude(DataSynchroTables.MEASUREMENT_FILE.name(), DatabaseColumns.METHOD_ID.name());
368 addColumnExclude(DataSynchroTables.MEASUREMENT_FILE.name(), DatabaseColumns.MATRIX_ID.name());
369 }
370
371 public DataSynchroDatabaseConfiguration getSource() {
372 return context.getSource();
373 }
374
375 public DataSynchroDatabaseConfiguration getTarget() {
376 return context.getTarget();
377 }
378
379
380 @Override
381 public String toString() {
382 StringBuilder sb = new StringBuilder(super.toString());
383
384 sb.append("\n direction : ").append(getDirection().name());
385 sb.append("\n start date: ").append(getDataStartDate());
386 sb.append("\n end date: ").append(getDataEndDate());
387 sb.append("\n programs: ").append(getProgramCodes());
388 sb.append("\n user: ").append(getUserId());
389 sb.append("\n change log file: ").append(getChangeLogFile() == null ? "disable" : getChangeLogFile());
390 sb.append("\n force duplication: ").append(isForceDuplication());
391
392 return sb.toString();
393 }
394 }