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.collect.ImmutableSet;
27 import com.google.common.collect.Lists;
28 import com.google.common.eventbus.Subscribe;
29 import fr.ifremer.common.synchro.dao.SynchroTableDao;
30 import fr.ifremer.common.synchro.intercept.SynchroInterceptorBase;
31 import fr.ifremer.common.synchro.intercept.SynchroOperationRepository;
32 import fr.ifremer.common.synchro.meta.event.LoadJoinEvent;
33 import fr.ifremer.common.synchro.meta.event.LoadTableEvent;
34 import fr.ifremer.quadrige3.core.dao.referential.ObjectTypeCode;
35 import fr.ifremer.quadrige3.synchro.meta.DatabaseColumns;
36 import fr.ifremer.quadrige3.synchro.meta.data.DataSynchroTables;
37 import fr.ifremer.quadrige3.synchro.service.SynchroDirection;
38
39 import java.sql.SQLException;
40 import java.util.List;
41
42
43
44
45
46
47
48 public class SamplingOperationInterceptor extends AbstractDataInterceptor {
49
50 private int columnSamplingOperationIdIndex = -1;
51
52
53
54
55
56
57 public SamplingOperationInterceptor() {
58
59 super(DataSynchroTables.SAMPLING_OPERATION.name());
60 setEnableOnWrite(true);
61
62 }
63
64 @Override
65 public SynchroInterceptorBase clone() {
66 SamplingOperationInterceptor clone = (SamplingOperationInterceptor) super.clone();
67 clone.columnSamplingOperationIdIndex = this.columnSamplingOperationIdIndex;
68 return clone;
69 }
70
71 @Subscribe
72 public void handleLoadTable(LoadTableEvent e) {
73 columnSamplingOperationIdIndex = e.table.getSelectColumnIndex(DatabaseColumns.SAMPLING_OPER_ID.name());
74 }
75
76
77
78
79
80
81
82
83
84 @Subscribe
85 public void handleJoinLoad(LoadJoinEvent e) {
86
87 if (!e.join.isValid()) {
88 return;
89 }
90
91 String targetTableName = e.join.getTargetTable().getName();
92 SynchroDirection direction = getConfig().getDirection();
93
94
95 if (direction == SynchroDirection.IMPORT_SERVER2TEMP) {
96
97 if (DataSynchroTables.MEASUREMENT.name().equalsIgnoreCase(targetTableName)) {
98 e.join.setIsValid(false);
99 }
100
101
102 if (DataSynchroTables.TAXON_MEASUREMENT.name().equalsIgnoreCase(targetTableName)) {
103 e.join.setIsValid(false);
104 }
105
106
107 if (DataSynchroTables.MEASUREMENT_FILE.name().equalsIgnoreCase(targetTableName)) {
108 e.join.setIsValid(false);
109 }
110
111
112 if (DataSynchroTables.PHOTO.name().equalsIgnoreCase(targetTableName)) {
113 e.join.setIsValid(false);
114 }
115 }
116 }
117
118 @Override
119 protected void doOnWrite(Object[] data, List<Object> pk, SynchroTableDao sourceDao, SynchroTableDao targetDao, SynchroOperationRepository buffer, boolean insert) throws SQLException {
120
121
122 if (buffer == null) {
123 return;
124 }
125
126 Object samplingOperationId = data[columnSamplingOperationIdIndex];
127
128 if (samplingOperationId != null) {
129 buffer.addChildToUpdateFromManyColumns(DataSynchroTables.QUALIFICATION_HISTORY.name(),
130 ImmutableSet.of(DatabaseColumns.OBJECT_TYPE_CD.name(), DatabaseColumns.QUAL_HIST_ELEMENT_ID.name()),
131 Lists.newArrayList(ObjectTypeCode.SAMPLING_OPERATION.value(), Long.parseLong(samplingOperationId.toString())));
132 }
133 }
134
135
136
137 }