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