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.meta.SynchroDatabaseMetadata;
28 import fr.ifremer.common.synchro.meta.SynchroTableMetadata;
29 import fr.ifremer.common.synchro.meta.event.CreateQueryEvent;
30 import fr.ifremer.common.synchro.query.SynchroQueryBuilder;
31 import fr.ifremer.common.synchro.query.SynchroQueryName;
32 import fr.ifremer.common.synchro.query.SynchroQueryOperator;
33 import fr.ifremer.quadrige3.synchro.meta.DatabaseColumns;
34 import fr.ifremer.quadrige3.synchro.meta.administration.MoratoriumSynchroTables;
35 import fr.ifremer.quadrige3.synchro.meta.administration.ProgramStrategySynchroTables;
36 import org.apache.commons.collections4.SetUtils;
37 import org.hibernate.tool.hbm2ddl.TableMetadata;
38
39
40
41
42
43
44
45
46
47
48 public class TableWithProgCdInterceptor extends AbstractProgramStrategyInterceptor {
49
50
51
52
53
54
55 public TableWithProgCdInterceptor() {
56 super(SetUtils.union(ProgramStrategySynchroTables.tableNames(), MoratoriumSynchroTables.tableNames()));
57 }
58
59
60 @Override
61 public boolean doApply(SynchroDatabaseMetadata meta, TableMetadata table) {
62 return super.doApply(meta, table) && hasColumns(table, DatabaseColumns.PROG_CD.name());
63 }
64
65
66
67
68
69
70
71
72
73 @Subscribe
74 public void handleQuery(CreateQueryEvent e) {
75
76 switch (e.queryName) {
77 case count:
78 case countFromUpdateDate:
79 case select:
80 case selectFromUpdateDate:
81 case selectMaxUpdateDate:
82
83 e.sql = addRestriction(e.source, e.queryName, e.sql);
84
85 default:
86 break;
87 }
88 }
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105 protected String addRestriction(SynchroTableMetadata table, SynchroQueryName queryName, String sql) {
106 SynchroQueryBuilder queryBuilder = SynchroQueryBuilder.newBuilder(sql);
107
108
109 String programWhereClauseOrNull = createProgramWhereClauseOrNull(getConfig(), "t." + DatabaseColumns.PROG_CD.name() + " IN (%s)");
110 if (programWhereClauseOrNull != null) {
111 queryBuilder.addWhere(SynchroQueryOperator.AND, programWhereClauseOrNull);
112 }
113
114 return queryBuilder.build();
115 }
116 }