Kawai Wiki

Rev

Rev 191 | Rev 228 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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