1 package fr.ifremer.quadrige2.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.SynchroTableDao;
28 import fr.ifremer.common.synchro.intercept.SynchroOperationRepository;
29 import fr.ifremer.common.synchro.meta.SynchroTableMetadata;
30 import fr.ifremer.common.synchro.meta.event.CreateQueryEvent;
31 import fr.ifremer.common.synchro.query.SynchroQueryBuilder;
32 import fr.ifremer.common.synchro.query.SynchroQueryName;
33 import fr.ifremer.quadrige2.synchro.intercept.referential.AbstractReferentialInterceptor;
34 import fr.ifremer.quadrige2.synchro.meta.DatabaseColumns;
35 import fr.ifremer.quadrige2.synchro.meta.administration.ProgramStrategySynchroTables;
36
37 import java.sql.SQLException;
38 import java.util.List;
39
40
41
42
43
44
45
46
47
48
49
50 public class AppliedStrategyInterceptor extends AbstractProgramStrategyInterceptor {
51
52
53
54
55
56
57 public AppliedStrategyInterceptor() {
58 super(ProgramStrategySynchroTables.APPLIED_STRATEGY.name());
59 setEnableOnWrite(true);
60 }
61
62
63
64
65
66
67
68
69
70 @Subscribe
71 public void handleQuery(CreateQueryEvent e) {
72
73 switch (e.queryName) {
74 case count:
75 case countFromUpdateDate:
76 case select:
77 case selectFromUpdateDate:
78 case selectMaxUpdateDate:
79
80 e.sql = addRestriction(e.source, e.queryName, e.sql);
81
82 default:
83 break;
84 }
85 }
86
87
88 @Override
89 protected void doOnDelete(List<Object> pk, SynchroTableDao sourceDao, SynchroTableDao targetDao, SynchroOperationRepository buffer)
90 throws SQLException {
91
92 Integer appliedStratId = Integer.parseInt(pk.get(0).toString());
93
94
95 buffer.addChildToDeleteFromOneColumn(ProgramStrategySynchroTables.APPLIED_PERIOD.name(), DatabaseColumns.APPLIED_STRAT_ID.name(),
96 appliedStratId);
97 }
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114 protected String addRestriction(SynchroTableMetadata table, SynchroQueryName queryName, String sql) {
115 SynchroQueryBuilder queryBuilder = SynchroQueryBuilder.newBuilder(sql);
116
117
118 String programFilterJoin = createProgramWhereClauseOrNull(getConfig(), "INNER JOIN STRATEGY s ON s.strat_id=t.strat_id AND s.prog_cd IN (%s)");
119 if (programFilterJoin != null) {
120 queryBuilder.addJoin(programFilterJoin);
121 }
122
123 return queryBuilder.build();
124 }
125 }