1 package fr.ifremer.quadrige3.synchro.intercept.administration;
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.dao.Daos;
28 import fr.ifremer.common.synchro.dao.SynchroBaseDao;
29 import fr.ifremer.common.synchro.dao.SynchroTableDao;
30 import fr.ifremer.common.synchro.intercept.SynchroOperationRepository;
31 import fr.ifremer.common.synchro.meta.SynchroTableMetadata;
32 import fr.ifremer.common.synchro.meta.event.CreateQueryEvent;
33 import fr.ifremer.common.synchro.query.SynchroQueryBuilder;
34 import fr.ifremer.common.synchro.query.SynchroQueryName;
35 import fr.ifremer.quadrige3.synchro.meta.DatabaseColumns;
36 import fr.ifremer.quadrige3.synchro.meta.administration.ProgramStrategySynchroTables;
37 import org.apache.commons.logging.Log;
38 import org.apache.commons.logging.LogFactory;
39
40 import java.io.IOException;
41 import java.sql.PreparedStatement;
42 import java.sql.SQLException;
43 import java.util.List;
44
45
46
47
48
49
50
51
52
53
54
55 public class PmfmStrategyInterceptor extends AbstractProgramStrategyInterceptor {
56
57 private static final Log log = LogFactory.getLog(PmfmStrategyInterceptor.class);
58
59 private PreparedStatement deletePmfmAppliedStrategyStatement = null;
60
61
62
63
64
65
66 public PmfmStrategyInterceptor() {
67 super(ProgramStrategySynchroTables.PMFM_STRATEGY.name());
68 setEnableOnWrite(true);
69 }
70
71
72 @Override
73 protected void doClose() throws IOException {
74 super.doClose();
75
76 Daos.closeSilently(deletePmfmAppliedStrategyStatement);
77 deletePmfmAppliedStrategyStatement = null;
78 }
79
80
81
82
83
84
85
86
87
88 @Subscribe
89 public void handleQuery(CreateQueryEvent e) {
90
91 switch (e.queryName) {
92 case count:
93 case countFromUpdateDate:
94 case select:
95 case selectFromUpdateDate:
96 case selectMaxUpdateDate:
97
98 e.sql = addRestriction(e.source, e.queryName, e.sql);
99
100 default:
101 break;
102 }
103 }
104
105
106 @Override
107 protected void doOnDelete(List<Object> pk, SynchroTableDao sourceDao, SynchroTableDao targetDao, SynchroOperationRepository buffer)
108 throws SQLException {
109
110 Integer pmfmStratId = Integer.parseInt(pk.get(0).toString());
111
112
113 if (getConfig().isIntegrityConstraintEnable()) {
114 deletePmfmAppliedStrategyByPmfmStratId(targetDao, pmfmStratId);
115 }
116 }
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133 protected String addRestriction(SynchroTableMetadata table, SynchroQueryName queryName, String sql) {
134 SynchroQueryBuilder queryBuilder = SynchroQueryBuilder.newBuilder(sql);
135
136
137 String programFilterJoin = createProgramWhereClauseOrNull(getConfig(), "INNER JOIN STRATEGY s ON s.strat_id=t.strat_id AND s.prog_cd IN (%s)");
138 if (programFilterJoin != null) {
139 queryBuilder.addJoin(programFilterJoin);
140 }
141
142 return queryBuilder.build();
143 }
144
145
146
147
148
149
150
151
152 protected String createDeletePmfmAppliedStrategyByPmfmStratIdSql() {
153 return String.format("DELETE FROM %s where %s=?",
154 ProgramStrategySynchroTables.PMFM_APPLIED_STRATEGY.name(),
155 DatabaseColumns.PMFM_STRAT_ID);
156 }
157
158
159
160
161
162
163
164
165
166
167
168
169
170 protected void deletePmfmAppliedStrategyByPmfmStratId(SynchroBaseDao targetDao, int pmfmStratId) throws SQLException {
171
172
173 if (deletePmfmAppliedStrategyStatement == null || deletePmfmAppliedStrategyStatement.isClosed()) {
174 deletePmfmAppliedStrategyStatement = targetDao.getPreparedStatement(createDeletePmfmAppliedStrategyByPmfmStratIdSql());
175 }
176
177
178 deletePmfmAppliedStrategyStatement.setInt(1, pmfmStratId);
179 deletePmfmAppliedStrategyStatement.executeUpdate();
180 }
181
182
183
184 }