1
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
27
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.document.business.rules;
35
36 import fr.paris.lutece.util.sql.DAOUtil;
37
38 import java.util.ArrayList;
39 import java.util.List;
40
41
42
43
44
45 public final class RuleDAO implements IRuleDAO
46 {
47
48 private static final String SQL_QUERY_NEW_PK = "SELECT max( id_rule ) FROM document_rule ";
49 private static final String SQL_QUERY_SELECT = "SELECT id_rule, rule_type FROM document_rule WHERE id_rule = ? ";
50 private static final String SQL_QUERY_SELECT_BY_RULE_TYPE_KEY = "SELECT id_rule FROM document_rule WHERE rule_type = ?";
51 private static final String SQL_QUERY_SELECT_ATTRIBUTES = "SELECT attr_name , attr_value FROM document_rule_attr WHERE id_rule = ?";
52 private static final String SQL_QUERY_INSERT = "INSERT INTO document_rule ( id_rule, rule_type ) VALUES ( ?, ? ) ";
53 private static final String SQL_QUERY_INSERT_ATTRIBUTE = " INSERT INTO document_rule_attr ( id_rule, attr_name , attr_value ) VALUES ( ?, ?, ? ) ";
54 private static final String SQL_QUERY_DELETE = "DELETE FROM document_rule WHERE id_rule = ? ";
55 private static final String SQL_QUERY_DELETE_ATTRIBUTES = "DELETE FROM document_rule_attr WHERE id_rule = ? ";
56 private static final String SQL_QUERY_SELECTALL = "SELECT id_rule, rule_type FROM document_rule ";
57
58
59
60
61
62 private int newPrimaryKey( )
63 {
64 DAOUtil daoUtil = new DAOUtil( SQL_QUERY_NEW_PK );
65 daoUtil.executeQuery( );
66
67 int nKey;
68
69 if ( !daoUtil.next( ) )
70 {
71
72 nKey = 1;
73 }
74
75 nKey = daoUtil.getInt( 1 ) + 1;
76
77 daoUtil.free( );
78
79 return nKey;
80 }
81
82
83
84
85
86
87 public synchronized void insert( Rule rule )
88 {
89 DAOUtil daoUtil = new DAOUtil( SQL_QUERY_INSERT );
90 rule.setId( newPrimaryKey( ) );
91 daoUtil.setInt( 1, rule.getId( ) );
92 daoUtil.setString( 2, rule.getRuleTypeId( ) );
93
94 daoUtil.executeUpdate( );
95 daoUtil.free( );
96
97
98 insertAttributes( rule );
99 }
100
101
102
103
104
105
106 private void insertAttributes( Rule rule )
107 {
108 String[] attributes = rule.getAttributesList( );
109
110 for ( int i = 0; i < attributes.length; i++ )
111 {
112 String strAttributeValue = rule.getAttribute( attributes[i] );
113 DAOUtil daoUtil = new DAOUtil( SQL_QUERY_INSERT_ATTRIBUTE );
114 daoUtil.setInt( 1, rule.getId( ) );
115 daoUtil.setString( 2, attributes[i] );
116 daoUtil.setString( 3, strAttributeValue );
117
118 daoUtil.executeUpdate( );
119 daoUtil.free( );
120 }
121 }
122
123
124
125
126
127
128
129
130 public Rule load( int nRuleId, IRuleTypesSet ruleTypesSet )
131 {
132 Rule rule = null;
133 DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT );
134 daoUtil.setInt( 1, nRuleId );
135 daoUtil.executeQuery( );
136
137 if ( daoUtil.next( ) )
138 {
139 String strRuleTypeId = daoUtil.getString( 2 );
140 rule = ruleTypesSet.newInstance( strRuleTypeId );
141 rule.setId( nRuleId );
142 rule.setRuleTypeId( strRuleTypeId );
143 loadAttributes( rule );
144 }
145
146 daoUtil.free( );
147
148 return rule;
149 }
150
151
152
153
154
155 private void loadAttributes( Rule rule )
156 {
157 DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_ATTRIBUTES );
158 daoUtil.setInt( 1, rule.getId( ) );
159 daoUtil.executeQuery( );
160
161 while ( daoUtil.next( ) )
162 {
163 rule.setAttribute( daoUtil.getString( 1 ), daoUtil.getString( 2 ) );
164 }
165
166 daoUtil.free( );
167 }
168
169
170
171
172
173 public void delete( int nRuleId )
174 {
175 deleteAttributes( nRuleId );
176
177 DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE );
178 daoUtil.setInt( 1, nRuleId );
179
180 daoUtil.executeUpdate( );
181 daoUtil.free( );
182 }
183
184
185
186
187
188 private void deleteAttributes( int nRuleId )
189 {
190 DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE_ATTRIBUTES );
191 daoUtil.setInt( 1, nRuleId );
192
193 daoUtil.executeUpdate( );
194 daoUtil.free( );
195 }
196
197
198
199
200
201 public void store( Rule rule )
202 {
203
204 deleteAttributes( rule.getId( ) );
205 insertAttributes( rule );
206 }
207
208
209
210
211
212
213 public List<Rule> selectRuleList( IRuleTypesSet ruleTypesSet )
214 {
215 List<Rule> listRules = new ArrayList<Rule>( );
216 DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECTALL );
217 daoUtil.executeQuery( );
218
219 while ( daoUtil.next( ) )
220 {
221 int nRuleId = daoUtil.getInt( 1 );
222 Rule rule = load( nRuleId, ruleTypesSet );
223 listRules.add( rule );
224 }
225
226 daoUtil.free( );
227
228 return listRules;
229 }
230
231
232
233
234
235
236
237 public List<Rule> selectRuleListByRuleTypeKey( String strRuleTypeKey, IRuleTypesSet ruleTypesSet )
238 {
239 List<Rule> listRules = new ArrayList<Rule>( );
240 DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_BY_RULE_TYPE_KEY );
241 daoUtil.setString( 1, strRuleTypeKey );
242 daoUtil.executeQuery( );
243
244 while ( daoUtil.next( ) )
245 {
246 Rule rule = ruleTypesSet.newInstance( strRuleTypeKey );
247 rule.setId( daoUtil.getInt( 1 ) );
248 rule.setRuleTypeId( strRuleTypeKey );
249 loadAttributes( rule );
250 listRules.add( rule );
251 }
252
253 daoUtil.free( );
254
255 return listRules;
256 }
257 }