Kawai Wiki

Rev

Rev 228 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 228 Rev 231
1
package org.kawai.dao.jdbc;
1
package org.kawai.dao.jdbc;
2
2
3
import java.sql.PreparedStatement;
3
import java.sql.PreparedStatement;
4
import java.sql.ResultSet;
4
import java.sql.ResultSet;
5
import java.sql.SQLException;
5
import java.sql.SQLException;
6
import java.util.ArrayList;
6
import java.util.ArrayList;
7
import java.util.LinkedList;
7
import java.util.LinkedList;
8
import java.util.List;
8
import java.util.List;
9
9
10
import org.kawai.dao.PageDAO;
10
import org.kawai.dao.PageDAO;
11
import org.kawai.model.Language;
11
import org.kawai.model.Language;
12
import org.kawai.model.Page;
12
import org.kawai.model.Page;
13
import org.kawai.model.Preview;
13
import org.kawai.model.Preview;
14
import org.kawai.model.Revision;
14
import org.kawai.model.Revision;
15
import org.kawai.model.User;
15
import org.kawai.model.User;
16
import org.mentabean.BeanSession;
16
import org.mentabean.BeanSession;
17
17
18
/**
18
/**
19
 * DAO class JdbcPageDAO.
19
 * DAO class JdbcPageDAO.
20
 *
20
 *
21
 * @author Sergio Oliveira
21
 * @author Sergio Oliveira
22
 *
22
 *
23
 */
23
 */
24
public class JdbcPageDAO extends AbstractJdbcDAO implements PageDAO {
24
public class JdbcPageDAO extends AbstractJdbcDAO implements PageDAO {
25
25
26
        /**
26
        /**
27
         * Parametric constructor.
27
         * Parametric constructor.
28
         * @param session BeanSession
28
         * @param session BeanSession
29
         */
29
         */
30
    public JdbcPageDAO(BeanSession session) {
30
    public JdbcPageDAO(BeanSession session) {
31
        super(session);
31
        super(session);
32
    }
32
    }
33
33
34
    /**
34
    /**
35
     * Loads the page object by id.
35
     * Loads the page object by id.
36
     * @return Page
36
     * @return Page
37
     */
37
     */
38
    @Override
38
    @Override
39
    public Page load(int id) {
39
    public Page load(int id) {
40
40
41
        Page p = new Page();
41
        Page p = new Page();
42
        p.setId(id);
42
        p.setId(id);
43
43
44
        if (session.load(p)) {
44
        if (session.load(p)) {
45
            loadUsers(p);
45
            loadUsers(p);
46
            return p;
46
            return p;
47
        }
47
        }
48
48
49
        return null;
49
        return null;
50
    }
50
    }
51
51
52
    /**
52
    /**
53
     * Loads the page object by name and language.
53
     * Loads the page object by name and language.
54
     * @return Page
54
     * @return Page
55
     */
55
     */
56
    @Override
56
    @Override
57
    public Page loadByName(String name, Language lang) {
57
    public Page loadByName(String name, Language lang) {
58
        return loadByName(name, lang, -1);
58
        return loadByName(name, lang, -1);
59
    }
59
    }
60
60
61
    /**
61
    /**
62
     * Loads the page object by name, language and revision.
62
     * Loads the page object by name, language and revision.
63
     * @return Page
63
     * @return Page
64
     */
64
     */
65
    @Override
65
    @Override
66
    public Page loadByName(String name, Language lang, int revision) {
66
    public Page loadByName(String name, Language lang, int revision) {
67
        Page p = new Page();
67
        Page p = new Page();
68
        p.setName(name);
68
        p.setName(name);
69
        p.setLanguageId(lang.getId());
69
        p.setLanguageId(lang.getId());
70
        p.setDeleted(false);
70
        p.setDeleted(false);
71
        p = session.loadUnique(p);
71
        p = session.loadUnique(p);
72
72
73
        if (p != null) {
73
        if (p != null) {
74
            if (revision >= 0) {
74
            if (revision >= 0) {
75
                Revision r = loadRevision(revision, name, lang);
75
                Revision r = loadRevision(revision, name, lang);
76
                if (r != null) {
76
                if (r != null) {
77
                    p.setCreatedById(r.getUserId());
77
                    p.setCreatedById(r.getUserId());
78
                    p.setCreatedOn(r.getCreatedOn());
78
                    p.setCreatedOn(r.getCreatedOn());
79
                    p.setModifiedById(-1);
79
                    p.setModifiedById(-1);
80
                    p.setModifiedOn(null);
80
                    p.setModifiedOn(null);
81
                    p.setRevision(true);
81
                    p.setRevision(true);
82
                    p.setRevisionNumber(r.getRevision());
82
                    p.setRevisionNumber(r.getRevision());
83
                    p.setTitle(r.getNewTitle());
83
                    p.setTitle(r.getNewTitle());
84
                    p.setBody(r.getNewBody());
84
                    p.setBody(r.getNewBody());
85
                }
85
                }
86
            }
86
            }
87
            loadUsers(p);
87
            loadUsers(p);
88
        }
88
        }
89
        return p;
89
        return p;
90
    }
90
    }
91
   
91
   
92
    @Override
92
    @Override
93
    public Page loadWithTitleOnly(String name, Language lang) {
93
    public Page loadWithTitleOnly(String name, Language lang) {
94
94
95
        Page p = new Page();
95
        Page p = new Page();
96
        p.setName(name);
96
        p.setName(name);
97
        p.setLanguageId(lang.getId());
97
        p.setLanguageId(lang.getId());
98
        p.setDeleted(false);
98
        p.setDeleted(false);
99
       
99
       
100
        List<Page> pages = session.loadList(p, new String[] { "id", "name", "title", "languageId" });
-
 
101
       
-
 
102
        if (pages == null || pages.size() != 1) {
-
 
103
                return null;
-
 
104
        }
-
 
105
       
-
 
106
        return pages.get(0);
-
 
-
 
100
        return session.loadUnique(p, "name", "title", "languageId");
107
    }
101
    }
108
102
109
    /**
103
    /**
110
     * Loads the front page by language.
104
     * Loads the front page by language.
111
     * @return Page
105
     * @return Page
112
     */
106
     */
113
    @Override
107
    @Override
114
    public Page loadFrontPage(Language lang) {
108
    public Page loadFrontPage(Language lang) {
115
        Page p = new Page();
109
        Page p = new Page();
116
        p.setLanguageId(lang.getId());
110
        p.setLanguageId(lang.getId());
117
        p.setFrontPage(true);
111
        p.setFrontPage(true);
118
        p.setDeleted(false);
112
        p.setDeleted(false);
119
        p = session.loadUnique(p);
113
        p = session.loadUnique(p);
120
        if (p != null) {
114
        if (p != null) {
121
            loadUsers(p);
115
            loadUsers(p);
122
        }
116
        }
123
        return p;
117
        return p;
124
    }
118
    }
125
119
126
    private void loadUsers(Page p) {
120
    private void loadUsers(Page p) {
127
        User modifier = new User();
121
        User modifier = new User();
128
        modifier.setId(p.getModifiedById());
122
        modifier.setId(p.getModifiedById());
129
123
130
        if (p.getModifiedById() > 0) {
124
        if (p.getModifiedById() > 0) {
131
            if (session.load(modifier)) {
125
            if (session.load(modifier)) {
132
                p.setModifiedBy(modifier);
126
                p.setModifiedBy(modifier);
133
            } else {
127
            } else {
134
                throw new IllegalStateException("Cannot load user by id: " + p.getModifiedById());
128
                throw new IllegalStateException("Cannot load user by id: " + p.getModifiedById());
135
            }
129
            }
136
        }
130
        }
137
131
138
        User creator = new User();
132
        User creator = new User();
139
        creator.setId(p.getCreatedById());
133
        creator.setId(p.getCreatedById());
140
134
141
        if (p.getCreatedById() > 0) {
135
        if (p.getCreatedById() > 0) {
142
            if (session.load(creator)) {
136
            if (session.load(creator)) {
143
                p.setCreatedBy(creator);
137
                p.setCreatedBy(creator);
144
            } else {
138
            } else {
145
                throw new IllegalStateException("Cannot load user by id: " + p.getCreatedById());
139
                throw new IllegalStateException("Cannot load user by id: " + p.getCreatedById());
146
            }
140
            }
147
        }
141
        }
148
    }
142
    }
149
143
150
    /**
144
    /**
151
     * Updates the page on database.
145
     * Updates the page on database.
152
     * @param p Page
146
     * @param p Page
153
     */
147
     */
154
    @Override
148
    @Override
155
    public void update(Page p) {
149
    public void update(Page p) {
156
        session.update(p);
150
        session.update(p);
157
    }
151
    }
158
152
159
    /**
153
    /**
160
     * Persist the page on database.
154
     * Persist the page on database.
161
     * @param p Page
155
     * @param p Page
162
     */
156
     */
163
    @Override
157
    @Override
164
    public void insert(Page p) {
158
    public void insert(Page p) {
165
        p.setDeleted(false);
159
        p.setDeleted(false);
166
        session.insert(p);
160
        session.insert(p);
167
    }
161
    }
168
162
169
    /**
163
    /**
170
     * Checks if page exists by name and language.
164
     * Checks if page exists by name and language.
171
     * @param name String
165
     * @param name String
172
     * @param lang Language
166
     * @param lang Language
173
     * @return boolean
167
     * @return boolean
174
     */
168
     */
175
    @Override
169
    @Override
176
    public boolean exists(String name, Language lang) {
170
    public boolean exists(String name, Language lang) {
177
        return loadByName(name, lang) != null;
171
        return loadByName(name, lang) != null;
178
    }
172
    }
179
173
180
    /**
174
    /**
181
     * Checks if is system page.
175
     * Checks if is system page.
182
     * @param name String
176
     * @param name String
183
     * @return boolean
177
     * @return boolean
184
     */
178
     */
185
    @Override
179
    @Override
186
    public boolean isSystemPage(String name) {
180
    public boolean isSystemPage(String name) {
187
        Page page = new Page();
181
        Page page = new Page();
188
        page.setName(name);
182
        page.setName(name);
189
        page.setDeleted(false);
183
        page.setDeleted(false);
190
        List<Page> list = session.loadList(page);
184
        List<Page> list = session.loadList(page);
191
        for(Page thePage : list) {
185
        for(Page thePage : list) {
192
            if (thePage.isSystemPage()) return true;
186
            if (thePage.isSystemPage()) return true;
193
        }
187
        }
194
        return false;
188
        return false;
195
    }
189
    }
196
190
197
    /**
191
    /**
198
     * Load all page including system pages.
192
     * Load all page including system pages.
199
     * @return List < Page >
193
     * @return List < Page >
200
     */
194
     */
201
    @Override
195
    @Override
202
    public List<Page> loadAll(boolean includeSystemPages) {
196
    public List<Page> loadAll(boolean includeSystemPages) {
203
197
204
        String[] propsToExclude = { "body" };
198
        String[] propsToExclude = { "body" };
205
199
206
        PreparedStatement stmt = null;
200
        PreparedStatement stmt = null;
207
        ResultSet rset = null;
201
        ResultSet rset = null;
208
202
209
        try {
203
        try {
210
204
211
            StringBuilder query = new StringBuilder(512);
205
            StringBuilder query = new StringBuilder(512);
212
            query.append("select ").append(session.buildSelectMinus(Page.class, "p", propsToExclude));
206
            query.append("select ").append(session.buildSelectMinus(Page.class, "p", propsToExclude));
213
            query.append(", ").append(session.buildSelect(User.class, "creator"));
207
            query.append(", ").append(session.buildSelect(User.class, "creator"));
214
            query.append(", ").append(session.buildSelect(User.class, "modifier"));
208
            query.append(", ").append(session.buildSelect(User.class, "modifier"));
215
            query.append(" from Pages p");
209
            query.append(" from Pages p");
216
            query.append(" join Users creator on p.created_by = creator.id");
210
            query.append(" join Users creator on p.created_by = creator.id");
217
            query.append(" left join Users modifier on p.modified_by = modifier.id");
211
            query.append(" left join Users modifier on p.modified_by = modifier.id");
218
            query.append(" where p.deleted = 'F' and p.language_id in (");
212
            query.append(" where p.deleted = 'F' and p.language_id in (");
219
           
213
           
220
            List<Language> langs = Language.all();
214
            List<Language> langs = Language.all();
221
            int count = 0;
215
            int count = 0;
222
            for(Language lang : langs) {
216
            for(Language lang : langs) {
223
                if (count++ > 0) query.append(",");
217
                if (count++ > 0) query.append(",");
224
                query.append(lang.getId());
218
                query.append(lang.getId());
225
            }
219
            }
226
            query.append(")");
220
            query.append(")");
227
           
221
           
228
            if (!includeSystemPages) {
222
            if (!includeSystemPages) {
229
                query.append(" and p.system_page = 'F'");
223
                query.append(" and p.system_page = 'F'");
230
            }
224
            }
231
            query.append(" order by p.system_page, p.front_page, p.name, p.language_id");
225
            query.append(" order by p.system_page, p.front_page, p.name, p.language_id");
232
226
233
            stmt = conn.prepareStatement(query.toString());
227
            stmt = conn.prepareStatement(query.toString());
234
228
235
            rset = stmt.executeQuery();
229
            rset = stmt.executeQuery();
236
230
237
            List<Page> pages = new LinkedList<Page>();
231
            List<Page> pages = new LinkedList<Page>();
238
232
239
            while(rset.next()) {
233
            while(rset.next()) {
240
234
241
                Page p = new Page();
235
                Page p = new Page();
242
                session.populateBeanMinus(rset, p, "p", propsToExclude);
236
                session.populateBeanMinus(rset, p, "p", propsToExclude);
243
237
244
                User creator = new User();
238
                User creator = new User();
245
                session.populateBean(rset, creator, "creator");
239
                session.populateBean(rset, creator, "creator");
246
                p.setCreatedBy(creator);
240
                p.setCreatedBy(creator);
247
241
248
                if (rset.getInt("modifier_id") > 0) {
242
                if (rset.getInt("modifier_id") > 0) {
249
                    User modifier = new User();
243
                    User modifier = new User();
250
                    session.populateBean(rset, modifier, "modifier");
244
                    session.populateBean(rset, modifier, "modifier");
251
                    p.setModifiedBy(modifier);
245
                    p.setModifiedBy(modifier);
252
                }
246
                }
253
247
254
                pages.add(p);
248
                pages.add(p);
255
            }
249
            }
256
250
257
            return pages;
251
            return pages;
258
252
259
        } catch(Exception e) {
253
        } catch(Exception e) {
260
            throw new RuntimeException(e);
254
            throw new RuntimeException(e);
261
        } finally {
255
        } finally {
262
            close(stmt, rset);
256
            close(stmt, rset);
263
        }
257
        }
264
    }
258
    }
265
259
266
    private Page get(List<Page> pages, Language lang) {
260
    private Page get(List<Page> pages, Language lang) {
267
        for(Page p : pages) {
261
        for(Page p : pages) {
268
            if (p.getLanguage() == lang) return p;
262
            if (p.getLanguage() == lang) return p;
269
        }
263
        }
270
        return null;
264
        return null;
271
    }
265
    }
272
266
273
    /**
267
    /**
274
     * Sets the new front page.
268
     * Sets the new front page.
275
     * @param p Page
269
     * @param p Page
276
     * @return boolean
270
     * @return boolean
277
     */
271
     */
278
    @Override
272
    @Override
279
    public boolean setNewFrontPage(Page p) {
273
    public boolean setNewFrontPage(Page p) {
280
274
281
        if (p.isSystemPage() || p.isFrontPage() || p.isDeleted()) return false;
275
        if (p.isSystemPage() || p.isFrontPage() || p.isDeleted()) return false;
282
276
283
        Page page = new Page();
277
        Page page = new Page();
284
        page.setFrontPage(true);
278
        page.setFrontPage(true);
285
        page.setDeleted(false);
279
        page.setDeleted(false);
286
280
287
        List<Page> frontPages = session.loadList(page);
281
        List<Page> frontPages = session.loadList(page);
288
        Page currFrontPage = get(frontPages, p.getLanguage());
282
        Page currFrontPage = get(frontPages, p.getLanguage());
289
283
290
        if (currFrontPage != null) {
284
        if (currFrontPage != null) {
291
            // it is not front-page anymore...
285
            // it is not front-page anymore...
292
            session.load(currFrontPage); // reload to attach to session...
286
            session.load(currFrontPage); // reload to attach to session...
293
            currFrontPage.setFrontPage(false);
287
            currFrontPage.setFrontPage(false);
294
            session.update(currFrontPage);
288
            session.update(currFrontPage);
295
        }
289
        }
296
290
297
        p.setFrontPage(true);
291
        p.setFrontPage(true);
298
        session.update(p);
292
        session.update(p);
299
293
300
        return true;
294
        return true;
301
    }
295
    }
302
296
303
    @Override
297
    @Override
304
    public boolean delete(Page p) {
298
    public boolean delete(Page p) {
305
        if (p.isDeleted() || p.isSystemPage() || p.isFrontPage()) return false;
299
        if (p.isDeleted() || p.isSystemPage() || p.isFrontPage()) return false;
306
        p.setDeleted(true);
300
        p.setDeleted(true);
307
        session.update(p);
301
        session.update(p);
308
        return true;
302
        return true;
309
    }
303
    }
310
304
311
    @Override
305
    @Override
312
    public Preview loadPreview(int userId, String name, Language lang) {
306
    public Preview loadPreview(int userId, String name, Language lang) {
313
        Preview p = new Preview();
307
        Preview p = new Preview();
314
        p.setName(name);
308
        p.setName(name);
315
        p.setLanguageId(lang.getId());
309
        p.setLanguageId(lang.getId());
316
        p.setUserId(userId);
310
        p.setUserId(userId);
317
311
318
        p = session.loadUnique(p);
312
        p = session.loadUnique(p);
319
313
320
        if (p != null) {
314
        if (p != null) {
321
            User user = new User();
315
            User user = new User();
322
            user.setId(userId);
316
            user.setId(userId);
323
            session.load(user);
317
            session.load(user);
324
            p.setUser(user);
318
            p.setUser(user);
325
319
326
            Page page = loadByName(name, lang);
320
            Page page = loadByName(name, lang);
327
            if (page != null) {
321
            if (page != null) {
328
                p.setNew(false);
322
                p.setNew(false);
329
                p.setSystemPage(page.isSystemPage());
323
                p.setSystemPage(page.isSystemPage());
330
            } else {
324
            } else {
331
                p.setNew(true);
325
                p.setNew(true);
332
                p.setSystemPage(false);
326
                p.setSystemPage(false);
333
            }
327
            }
334
        }
328
        }
335
329
336
        return p;
330
        return p;
337
    }
331
    }
338
332
339
    @Override
333
    @Override
340
    public Preview insertPreview(int userId, Page page, String comment) {
334
    public Preview insertPreview(int userId, Page page, String comment) {
341
        Preview preview = loadPreview(userId, page.getName(), page.getLanguage());
335
        Preview preview = loadPreview(userId, page.getName(), page.getLanguage());
342
        if (preview != null) {
336
        if (preview != null) {
343
            preview.setTitle(page.getTitle());
337
            preview.setTitle(page.getTitle());
344
            preview.setBody(page.getBody());
338
            preview.setBody(page.getBody());
345
            preview.setComment(comment);
339
            preview.setComment(comment);
346
            session.update(preview);
340
            session.update(preview);
347
        } else {
341
        } else {
348
            preview = new Preview();
342
            preview = new Preview();
349
            preview.setName(page.getName());
343
            preview.setName(page.getName());
350
            preview.setLanguageId(page.getLanguageId());
344
            preview.setLanguageId(page.getLanguageId());
351
            preview.setUserId(userId);
345
            preview.setUserId(userId);
352
            preview.setTitle(page.getTitle());
346
            preview.setTitle(page.getTitle());
353
            preview.setBody(page.getBody());
347
            preview.setBody(page.getBody());
354
            preview.setComment(comment);
348
            preview.setComment(comment);
355
            session.insert(preview);
349
            session.insert(preview);
356
        }
350
        }
357
        return preview;
351
        return preview;
358
    }
352
    }
359
353
360
    @Override
354
    @Override
361
    public String getFrontPage(Language lang) {
355
    public String getFrontPage(Language lang) {
362
        Page page = new Page();
356
        Page page = new Page();
363
        page.setLanguageId(lang.getId());
357
        page.setLanguageId(lang.getId());
364
        page.setFrontPage(true);
358
        page.setFrontPage(true);
365
359
366
        Page front = session.loadUnique(page);
360
        Page front = session.loadUnique(page);
367
        if (front != null) {
361
        if (front != null) {
368
            return front.getName();
362
            return front.getName();
369
        }
363
        }
370
        return null;
364
        return null;
371
    }
365
    }
372
366
373
    @Override
367
    @Override
374
    public Page loadByNameWithPreview(int userId, String name, Language lang) {
368
    public Page loadByNameWithPreview(int userId, String name, Language lang) {
375
        Page p = loadByName(name, lang);
369
        Page p = loadByName(name, lang);
376
        if (p == null) {
370
        if (p == null) {
377
            // we may still have a preview...
371
            // we may still have a preview...
378
            Preview preview = loadPreview(userId, name, lang);
372
            Preview preview = loadPreview(userId, name, lang);
379
            if (preview != null) {
373
            if (preview != null) {
380
                preview.setNew(true);
374
                preview.setNew(true);
381
                return preview.getPage();
375
                return preview.getPage();
382
            }
376
            }
383
            return null;
377
            return null;
384
        } else {
378
        } else {
385
            // check if we have a preview for this page...
379
            // check if we have a preview for this page...
386
            Preview preview = loadPreview(userId, name, lang);
380
            Preview preview = loadPreview(userId, name, lang);
387
            if (preview != null) {
381
            if (preview != null) {
388
                preview.setNew(false);
382
                preview.setNew(false);
389
                p.setPreview(preview);
383
                p.setPreview(preview);
390
            }
384
            }
391
            return p;
385
            return p;
392
        }
386
        }
393
    }
387
    }
394
388
395
    @Override
389
    @Override
396
    public void deletePreview(int userId, String name, Language lang) {
390
    public void deletePreview(int userId, String name, Language lang) {
397
        Preview preview = loadPreview(userId, name, lang);
391
        Preview preview = loadPreview(userId, name, lang);
398
        if (preview != null) {
392
        if (preview != null) {
399
            Preview p = new Preview();
393
            Preview p = new Preview();
400
            p.setId(preview.getId());
394
            p.setId(preview.getId());
401
            session.delete(p);
395
            session.delete(p);
402
        }
396
        }
403
    }
397
    }
404
398
405
    @Override
399
    @Override
406
    public Revision loadRevision(int revision, String name, Language lang) {
400
    public Revision loadRevision(int revision, String name, Language lang) {
407
        Revision r = new Revision();
401
        Revision r = new Revision();
408
        r.setRevision(revision);
402
        r.setRevision(revision);
409
        r.setName(name);
403
        r.setName(name);
410
        r.setLanguageId(lang.getId());
404
        r.setLanguageId(lang.getId());
411
        return session.loadUnique(r);
405
        return session.loadUnique(r);
412
    }
406
    }
413
407
414
    @Override
408
    @Override
415
    public void insertRevision(Revision r) {
409
    public void insertRevision(Revision r) {
416
410
417
        PreparedStatement stmt = null;
411
        PreparedStatement stmt = null;
418
        ResultSet rset = null;
412
        ResultSet rset = null;
419
413
420
        try {
414
        try {
421
415
422
            // first time, lock whole table
416
            // first time, lock whole table
423
            stmt = conn.prepareStatement("LOCK TABLES Revisions WRITE"); // this works as a synchronized block locked on the database... (I tested it!)
417
            stmt = conn.prepareStatement("LOCK TABLES Revisions WRITE"); // this works as a synchronized block locked on the database... (I tested it!)
424
            stmt.execute();
418
            stmt.execute();
425
            stmt.close();
419
            stmt.close();
426
420
427
            stmt = conn.prepareStatement("select max(revision) from Revisions where name = ? and language_id = ?");
421
            stmt = conn.prepareStatement("select max(revision) from Revisions where name = ? and language_id = ?");
428
            stmt.setString(1, r.getName());
422
            stmt.setString(1, r.getName());
429
            stmt.setInt(2, r.getLanguageId());
423
            stmt.setInt(2, r.getLanguageId());
430
            rset = stmt.executeQuery();
424
            rset = stmt.executeQuery();
431
            rset.next();
425
            rset.next();
432
            int revisionNumber = rset.getInt(1) + 1;
426
            int revisionNumber = rset.getInt(1) + 1;
433
427
434
            if (rset.wasNull()) {
428
            if (rset.wasNull()) {
435
                // inserting for the very first time... (page creatiion, not modification)
429
                // inserting for the very first time... (page creatiion, not modification)
436
                revisionNumber = 0;
430
                revisionNumber = 0;
437
            }
431
            }
438
432
439
            rset.close();
433
            rset.close();
440
            stmt.close();
434
            stmt.close();
441
435
442
            r.setRevision(revisionNumber);
436
            r.setRevision(revisionNumber);
443
            session.insert(r);
437
            session.insert(r);
444
438
445
            stmt = conn.prepareStatement("UNLOCK TABLES");
439
            stmt = conn.prepareStatement("UNLOCK TABLES");
446
            stmt.execute();
440
            stmt.execute();
447
441
448
        } catch(Exception e) {
442
        } catch(Exception e) {
449
            throw new RuntimeException(e);
443
            throw new RuntimeException(e);
450
        } finally {
444
        } finally {
451
            close(stmt, rset);
445
            close(stmt, rset);
452
        }
446
        }
453
    }
447
    }
454
448
455
    @Override
449
    @Override
456
    public List<Revision> loadRevisions(String name, Language lang) {
450
    public List<Revision> loadRevisions(String name, Language lang) {
457
451
458
        String[] propsToExclude = { "oldTitle", "newTitle", "oldBody", "newBody" };
452
        String[] propsToExclude = { "oldTitle", "newTitle", "oldBody", "newBody" };
459
453
460
        PreparedStatement stmt = null;
454
        PreparedStatement stmt = null;
461
        ResultSet rset = null;
455
        ResultSet rset = null;
462
456
463
        try {
457
        try {
464
458
465
            StringBuilder query = new StringBuilder(256);
459
            StringBuilder query = new StringBuilder(256);
466
            query.append("select ").append(session.buildSelectMinus(Revision.class, "r", propsToExclude));
460
            query.append("select ").append(session.buildSelectMinus(Revision.class, "r", propsToExclude));
467
            query.append(", ").append(session.buildSelect(User.class, "u"));
461
            query.append(", ").append(session.buildSelect(User.class, "u"));
468
            query.append(", p.system_page p_system_page");
462
            query.append(", p.system_page p_system_page");
469
            query.append(", p.front_page p_front_page");
463
            query.append(", p.front_page p_front_page");
470
            query.append(", p.title p_title");
464
            query.append(", p.title p_title");
471
            query.append(" from Revisions r join Users u on r.user_id = u.id");
465
            query.append(" from Revisions r join Users u on r.user_id = u.id");
472
            query.append(" join Pages p on r.name = p.name and r.language_id = p.language_id");
466
            query.append(" join Pages p on r.name = p.name and r.language_id = p.language_id");
473
            query.append(" where r.name = ? and r.language_id = ?");
467
            query.append(" where r.name = ? and r.language_id = ?");
474
            query.append(" order by revision desc");
468
            query.append(" order by revision desc");
475
            query.append(" limit 50");
469
            query.append(" limit 50");
476
470
477
            stmt = conn.prepareStatement(query.toString());
471
            stmt = conn.prepareStatement(query.toString());
478
            stmt.setString(1, name);
472
            stmt.setString(1, name);
479
            stmt.setInt(2, lang.getId());
473
            stmt.setInt(2, lang.getId());
480
474
481
            rset = stmt.executeQuery();
475
            rset = stmt.executeQuery();
482
476
483
            List<Revision> revisions = new ArrayList<Revision>(50);
477
            List<Revision> revisions = new ArrayList<Revision>(50);
484
478
485
            while(rset.next()) {
479
            while(rset.next()) {
486
480
487
                Revision r = new Revision();
481
                Revision r = new Revision();
488
                session.populateBeanMinus(rset, r, "r", propsToExclude);
482
                session.populateBeanMinus(rset, r, "r", propsToExclude);
489
483
490
                User u = new User();
484
                User u = new User();
491
                session.populateBean(rset, u, "u");
485
                session.populateBean(rset, u, "u");
492
                r.setUser(u);
486
                r.setUser(u);
493
487
494
                boolean isSystemPage = rset.getString("p_system_page").equals("T");
488
                boolean isSystemPage = rset.getString("p_system_page").equals("T");
495
                r.setSystemPage(isSystemPage);
489
                r.setSystemPage(isSystemPage);
496
490
497
                boolean isFrontPage = rset.getString("p_front_page").equals("T");
491
                boolean isFrontPage = rset.getString("p_front_page").equals("T");
498
                r.setFrontPage(isFrontPage);
492
                r.setFrontPage(isFrontPage);
499
493
500
                String title = rset.getString("p_title");
494
                String title = rset.getString("p_title");
501
                r.setTitle(title);
495
                r.setTitle(title);
502
496
503
                revisions.add(r);
497
                revisions.add(r);
504
            }
498
            }
505
499
506
            return revisions;
500
            return revisions;
507
        } catch(Exception e) {
501
        } catch(Exception e) {
508
            throw new RuntimeException(e);
502
            throw new RuntimeException(e);
509
        } finally {
503
        } finally {
510
            close(stmt, rset);
504
            close(stmt, rset);
511
        }
505
        }
512
    }
506
    }
513
507
514
    @Override
508
    @Override
515
    public List<Revision> loadLastRevisions(Language lang, boolean includeSystemPages) {
509
    public List<Revision> loadLastRevisions(Language lang, boolean includeSystemPages) {
516
510
517
        String[] propsToExclude = { "oldTitle", "newTitle", "oldBody", "newBody" };
511
        String[] propsToExclude = { "oldTitle", "newTitle", "oldBody", "newBody" };
518
512
519
        PreparedStatement stmt = null;
513
        PreparedStatement stmt = null;
520
        ResultSet rset = null;
514
        ResultSet rset = null;
521
515
522
        try {
516
        try {
523
            StringBuilder sb = new StringBuilder(512);
517
            StringBuilder sb = new StringBuilder(512);
524
            sb.append("select ").append(session.buildSelectMinus(Revision.class, "r", propsToExclude));
518
            sb.append("select ").append(session.buildSelectMinus(Revision.class, "r", propsToExclude));
525
            sb.append(", ").append(session.buildSelect(User.class, "u"));
519
            sb.append(", ").append(session.buildSelect(User.class, "u"));
526
            sb.append(", p.system_page p_system_page");
520
            sb.append(", p.system_page p_system_page");
527
            sb.append(", p.front_page p_front_page");
521
            sb.append(", p.front_page p_front_page");
528
            sb.append(", p.title p_title");
522
            sb.append(", p.title p_title");
529
            sb.append(" from Revisions r join Users u on r.user_id = u.id");
523
            sb.append(" from Revisions r join Users u on r.user_id = u.id");
530
            sb.append(" join Pages p on r.name = p.name and r.language_id = p.language_id");
524
            sb.append(" join Pages p on r.name = p.name and r.language_id = p.language_id");
531
            sb.append(" where r.language_id = ?");
525
            sb.append(" where r.language_id = ?");
532
            if (!includeSystemPages) {
526
            if (!includeSystemPages) {
533
                sb.append(" and p.system_page = 'F'");
527
                sb.append(" and p.system_page = 'F'");
534
            }
528
            }
535
            sb.append(" order by r.created_on desc");
529
            sb.append(" order by r.created_on desc");
536
            sb.append(" limit 50");
530
            sb.append(" limit 50");
537
531
538
            stmt = conn.prepareStatement(sb.toString());
532
            stmt = conn.prepareStatement(sb.toString());
539
            stmt.setInt(1, lang.getId());
533
            stmt.setInt(1, lang.getId());
540
534
541
            rset = stmt.executeQuery();
535
            rset = stmt.executeQuery();
542
536
543
            List<Revision> results = new ArrayList<Revision>(50);
537
            List<Revision> results = new ArrayList<Revision>(50);
544
538
545
            while(rset.next()) {
539
            while(rset.next()) {
546
                Revision r = new Revision();
540
                Revision r = new Revision();
547
                session.populateBeanMinus(rset, r, "r", propsToExclude);
541
                session.populateBeanMinus(rset, r, "r", propsToExclude);
548
542
549
                User u = new User();
543
                User u = new User();
550
                session.populateBean(rset, u, "u");
544
                session.populateBean(rset, u, "u");
551
                r.setUser(u);
545
                r.setUser(u);
552
546
553
                boolean isSystemPage = rset.getString("p_system_page").equals("T");
547
                boolean isSystemPage = rset.getString("p_system_page").equals("T");
554
                r.setSystemPage(isSystemPage);
548
                r.setSystemPage(isSystemPage);
555
549
556
                boolean isFrontPage = rset.getString("p_front_page").equals("T");
550
                boolean isFrontPage = rset.getString("p_front_page").equals("T");
557
                r.setFrontPage(isFrontPage);
551
                r.setFrontPage(isFrontPage);
558
552
559
                String title = rset.getString("p_title");
553
                String title = rset.getString("p_title");
560
                r.setTitle(title);
554
                r.setTitle(title);
561
555
562
                results.add(r);
556
                results.add(r);
563
            }
557
            }
564
558
565
            return results;
559
            return results;
566
560
567
        } catch(Exception e) {
561
        } catch(Exception e) {
568
            throw new RuntimeException(e);
562
            throw new RuntimeException(e);
569
        } finally {
563
        } finally {
570
            close(stmt, rset);
564
            close(stmt, rset);
571
        }
565
        }
572
566
573
    }
567
    }
574
}
568
}
575
 
569