Kawai Wiki

Rev

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

Rev 73 Rev 77
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.LinkedList;
5
import java.util.LinkedList;
6
import java.util.List;
6
import java.util.List;
7
7
8
import org.kawai.dao.PageDAO;
8
import org.kawai.dao.PageDAO;
9
import org.kawai.model.Language;
9
import org.kawai.model.Language;
10
import org.kawai.model.Page;
10
import org.kawai.model.Page;
11
import org.kawai.model.Preview;
11
import org.kawai.model.Preview;
12
import org.kawai.model.User;
12
import org.kawai.model.User;
13
import org.mentabean.BeanSession;
13
import org.mentabean.BeanSession;
14
14
15
public class JdbcPageDAO extends AbstractJdbcDAO implements PageDAO {
15
public class JdbcPageDAO extends AbstractJdbcDAO implements PageDAO {
16
       
16
       
17
        public JdbcPageDAO(BeanSession session) {
17
        public JdbcPageDAO(BeanSession session) {
18
                super(session);
18
                super(session);
19
        }
19
        }
20
20
21
        @Override
21
        @Override
22
        public Page load(int id) {
22
        public Page load(int id) {
23
               
23
               
24
                Page p = new Page();
24
                Page p = new Page();
25
                p.setId(id);
25
                p.setId(id);
26
               
26
               
27
                if (session.load(p)) {
27
                if (session.load(p)) {
28
                        loadUsers(p);
28
                        loadUsers(p);
29
                        return p;
29
                        return p;
30
                }
30
                }
31
               
31
               
32
                return null;
32
                return null;
33
        }
33
        }
34
       
34
       
35
        @Override
35
        @Override
36
        public Page loadByName(String name, Language lang) {
36
        public Page loadByName(String name, Language lang) {
37
                Page p = new Page();
37
                Page p = new Page();
38
                p.setName(name);
38
                p.setName(name);
39
                p.setLanguageId(lang.getId());
39
                p.setLanguageId(lang.getId());
40
                p.setDeleted(false);
40
                p.setDeleted(false);
41
                p = session.loadUnique(p);
41
                p = session.loadUnique(p);
42
                if (p != null) {
42
                if (p != null) {
43
                        loadUsers(p);
43
                        loadUsers(p);
44
                }
44
                }
45
                return p;
45
                return p;
46
        }
46
        }
47
       
47
       
48
        @Override
48
        @Override
49
        public Page loadFrontPage(Language lang) {
49
        public Page loadFrontPage(Language lang) {
50
                Page p = new Page();
50
                Page p = new Page();
51
                p.setLanguageId(lang.getId());
51
                p.setLanguageId(lang.getId());
52
                p.setFrontPage(true);
52
                p.setFrontPage(true);
53
                p.setDeleted(false);
53
                p.setDeleted(false);
54
                p = session.loadUnique(p);
54
                p = session.loadUnique(p);
55
                if (p != null) {
55
                if (p != null) {
56
                        loadUsers(p);
56
                        loadUsers(p);
57
                }
57
                }
58
                return p;
58
                return p;
59
        }
59
        }
60
       
60
       
61
        private void loadUsers(Page p) {
61
        private void loadUsers(Page p) {
62
                User modifier = new User();
62
                User modifier = new User();
63
                modifier.setId(p.getModifiedById());
63
                modifier.setId(p.getModifiedById());
64
               
64
               
65
                if (p.getModifiedById() > 0) {
65
                if (p.getModifiedById() > 0) {
66
                        if (session.load(modifier)) {
66
                        if (session.load(modifier)) {
67
                                p.setModifiedBy(modifier);
67
                                p.setModifiedBy(modifier);
68
                        } else {
68
                        } else {
69
                                throw new IllegalStateException("Cannot load user by id: " + p.getModifiedById());
69
                                throw new IllegalStateException("Cannot load user by id: " + p.getModifiedById());
70
                        }
70
                        }
71
                }
71
                }
72
               
72
               
73
                User creator = new User();
73
                User creator = new User();
74
                creator.setId(p.getCreatedById());
74
                creator.setId(p.getCreatedById());
75
               
75
               
76
                if (p.getCreatedById() > 0) {
76
                if (p.getCreatedById() > 0) {
77
                        if (session.load(creator)) {
77
                        if (session.load(creator)) {
78
                                p.setCreatedBy(creator);
78
                                p.setCreatedBy(creator);
79
                        } else {
79
                        } else {
80
                                throw new IllegalStateException("Cannot load user by id: " + p.getCreatedById());
80
                                throw new IllegalStateException("Cannot load user by id: " + p.getCreatedById());
81
                        }
81
                        }
82
                }
82
                }
83
        }
83
        }
84
       
84
       
85
        @Override
85
        @Override
86
        public void update(Page p) {
86
        public void update(Page p) {
87
                session.update(p);
87
                session.update(p);
88
        }
88
        }
89
       
89
       
90
        @Override
90
        @Override
91
        public void insert(Page p) {
91
        public void insert(Page p) {
92
                p.setDeleted(false);
92
                p.setDeleted(false);
93
                session.insert(p);
93
                session.insert(p);
94
        }
94
        }
95
       
95
       
96
        @Override
96
        @Override
97
        public boolean exists(String name, Language lang) {
97
        public boolean exists(String name, Language lang) {
98
                return loadByName(name, lang) != null;
98
                return loadByName(name, lang) != null;
99
        }
99
        }
100
       
100
       
101
        @Override
101
        @Override
102
        public boolean isSystemPage(String name) {
102
        public boolean isSystemPage(String name) {
103
                Page page = new Page();
103
                Page page = new Page();
104
                page.setName(name);
104
                page.setName(name);
105
                page.setDeleted(false);
105
                page.setDeleted(false);
106
                List<Page> list = session.loadList(page);
106
                List<Page> list = session.loadList(page);
107
                for(Page thePage : list) {
107
                for(Page thePage : list) {
108
                        if (thePage.isSystemPage()) return true;
108
                        if (thePage.isSystemPage()) return true;
109
                }
109
                }
110
                return false;
110
                return false;
111
        }
111
        }
112
       
112
       
113
        @Override
113
        @Override
114
        public List<Page> loadAll() {
-
 
-
 
114
        public List<Page> loadAll(boolean includeSystemPages) {
115
               
115
               
116
                PreparedStatement stmt = null;
116
                PreparedStatement stmt = null;
117
                ResultSet rset = null;
117
                ResultSet rset = null;
118
               
118
               
119
                try {
119
                try {
120
120
121
                        StringBuilder query = new StringBuilder(512);
121
                        StringBuilder query = new StringBuilder(512);
122
                        query.append("select ").append(session.buildSelect(Page.class, "p"));
122
                        query.append("select ").append(session.buildSelect(Page.class, "p"));
123
                        query.append(", ").append(session.buildSelect(User.class, "creator"));
123
                        query.append(", ").append(session.buildSelect(User.class, "creator"));
124
                        query.append(", ").append(session.buildSelect(User.class, "modifier"));
124
                        query.append(", ").append(session.buildSelect(User.class, "modifier"));
125
                        query.append(" from Pages p");
125
                        query.append(" from Pages p");
126
                        query.append(" join Users creator on p.created_by = creator.id");
126
                        query.append(" join Users creator on p.created_by = creator.id");
127
                        query.append(" left join Users modifier on p.modified_by = modifier.id");
127
                        query.append(" left join Users modifier on p.modified_by = modifier.id");
128
                        query.append(" where p.deleted = 'F' and p.system_page = 'F'");
-
 
129
                        query.append(" order by p.name, p.language_id");
-
 
-
 
128
                        query.append(" where p.deleted = 'F'");
-
 
129
                        if (!includeSystemPages) {
-
 
130
                                query.append(" and p.system_page = 'F'");
-
 
131
                        }
-
 
132
                        query.append(" order by p.system_page, p.front_page, p.name, p.language_id");
130
                       
133
                       
131
                        stmt = conn.prepareStatement(query.toString());
134
                        stmt = conn.prepareStatement(query.toString());
132
                       
135
                       
133
                        rset = stmt.executeQuery();
136
                        rset = stmt.executeQuery();
134
                       
137
                       
135
                        List<Page> pages = new LinkedList<Page>();
138
                        List<Page> pages = new LinkedList<Page>();
136
                       
139
                       
137
                        while(rset.next()) {
140
                        while(rset.next()) {
138
                               
141
                               
139
                                Page p = new Page();
142
                                Page p = new Page();
140
                                session.populateBean(rset, p, "p");
143
                                session.populateBean(rset, p, "p");
141
                               
144
                               
142
                                User creator = new User();
145
                                User creator = new User();
143
                                session.populateBean(rset, creator, "creator");
146
                                session.populateBean(rset, creator, "creator");
144
                                p.setCreatedBy(creator);
147
                                p.setCreatedBy(creator);
145
                               
148
                               
146
                                if (rset.getInt("modifier_id") > 0) {
149
                                if (rset.getInt("modifier_id") > 0) {
147
                                        User modifier = new User();
150
                                        User modifier = new User();
148
                                        session.populateBean(rset, modifier, "modifier");
151
                                        session.populateBean(rset, modifier, "modifier");
149
                                        p.setModifiedBy(modifier);
152
                                        p.setModifiedBy(modifier);
150
                                }
153
                                }
151
                               
154
                               
152
                                pages.add(p);
155
                                pages.add(p);
153
                        }
156
                        }
154
                       
157
                       
155
                        return pages;
158
                        return pages;
156
                       
159
                       
157
                } catch(Exception e) {
160
                } catch(Exception e) {
158
                        throw new RuntimeException(e);
161
                        throw new RuntimeException(e);
159
                } finally {
162
                } finally {
160
                        close(stmt, rset);
163
                        close(stmt, rset);
161
                }
164
                }
162
        }
165
        }
163
       
166
       
164
        private Page get(List<Page> pages, Language lang) {
167
        private Page get(List<Page> pages, Language lang) {
165
                for(Page p : pages) {
168
                for(Page p : pages) {
166
                        if (p.getLanguage() == lang) return p;
169
                        if (p.getLanguage() == lang) return p;
167
                }
170
                }
168
                return null;
171
                return null;
169
        }
172
        }
170
       
173
       
171
        @Override
174
        @Override
172
        public boolean setNewFrontPage(Page p) {
175
        public boolean setNewFrontPage(Page p) {
173
               
176
               
174
                if (p.isSystemPage() || p.isFrontPage() || p.isDeleted()) return false;
177
                if (p.isSystemPage() || p.isFrontPage() || p.isDeleted()) return false;
175
               
178
               
176
                Page page = new Page();
179
                Page page = new Page();
177
                page.setFrontPage(true);
180
                page.setFrontPage(true);
178
                page.setDeleted(false);
181
                page.setDeleted(false);
179
               
182
               
180
                List<Page> frontPages = session.loadList(page);
183
                List<Page> frontPages = session.loadList(page);
181
                Page currFrontPage = get(frontPages, p.getLanguage());
184
                Page currFrontPage = get(frontPages, p.getLanguage());
182
               
185
               
183
                if (currFrontPage != null) {
186
                if (currFrontPage != null) {
184
                        // it is not front-page anymore...
187
                        // it is not front-page anymore...
185
                        session.load(currFrontPage); // reload to attach to session...
188
                        session.load(currFrontPage); // reload to attach to session...
186
                        currFrontPage.setFrontPage(false);
189
                        currFrontPage.setFrontPage(false);
187
                        session.update(currFrontPage);
190
                        session.update(currFrontPage);
188
                }
191
                }
189
               
192
               
190
                p.setFrontPage(true);
193
                p.setFrontPage(true);
191
                session.update(p);
194
                session.update(p);
192
               
195
               
193
                return true;
196
                return true;
194
        }
197
        }
195
       
198
       
196
        @Override
199
        @Override
197
        public boolean delete(Page p) {
200
        public boolean delete(Page p) {
198
                if (p.isDeleted() || p.isSystemPage() || p.isFrontPage()) return false;
201
                if (p.isDeleted() || p.isSystemPage() || p.isFrontPage()) return false;
199
                p.setDeleted(true);
202
                p.setDeleted(true);
200
                session.update(p);
203
                session.update(p);
201
                return true;
204
                return true;
202
        }
205
        }
203
       
206
       
204
        @Override
207
        @Override
205
        public Preview loadPreview(int userId, String name, Language lang) {
208
        public Preview loadPreview(int userId, String name, Language lang) {
206
                Preview p = new Preview();
209
                Preview p = new Preview();
207
                p.setName(name);
210
                p.setName(name);
208
                p.setLanguageId(lang.getId());
211
                p.setLanguageId(lang.getId());
209
                p.setUserId(userId);
212
                p.setUserId(userId);
210
               
213
               
211
                p = session.loadUnique(p);
214
                p = session.loadUnique(p);
212
               
215
               
213
                if (p != null) {
216
                if (p != null) {
214
                        User user = new User();
217
                        User user = new User();
215
                        user.setId(userId);
218
                        user.setId(userId);
216
                        session.load(user);
219
                        session.load(user);
217
                        p.setUser(user);
220
                        p.setUser(user);
218
                       
221
                       
219
                        Page page = loadByName(name, lang);
222
                        Page page = loadByName(name, lang);
220
                        if (page != null) {
223
                        if (page != null) {
221
                                p.setNew(false);
224
                                p.setNew(false);
222
                                p.setSystemPage(page.isSystemPage());
225
                                p.setSystemPage(page.isSystemPage());
223
                        } else {
226
                        } else {
224
                                p.setNew(true);
227
                                p.setNew(true);
225
                                p.setSystemPage(false);
228
                                p.setSystemPage(false);
226
                        }
229
                        }
227
                }
230
                }
228
               
231
               
229
                return p;
232
                return p;
230
        }
233
        }
231
       
234
       
232
        @Override
235
        @Override
233
        public Preview insertPreview(int userId, Page page) {
236
        public Preview insertPreview(int userId, Page page) {
234
                Preview preview = loadPreview(userId, page.getName(), page.getLanguage());
237
                Preview preview = loadPreview(userId, page.getName(), page.getLanguage());
235
                if (preview != null) {
238
                if (preview != null) {
236
                        preview.setTitle(page.getTitle());
239
                        preview.setTitle(page.getTitle());
237
                        preview.setBody(page.getBody());
240
                        preview.setBody(page.getBody());
238
                        session.update(preview);
241
                        session.update(preview);
239
                } else {
242
                } else {
240
                        preview = new Preview();
243
                        preview = new Preview();
241
                        preview.setName(page.getName());
244
                        preview.setName(page.getName());
242
                        preview.setLanguageId(page.getLanguageId());
245
                        preview.setLanguageId(page.getLanguageId());
243
                        preview.setUserId(userId);
246
                        preview.setUserId(userId);
244
                        preview.setTitle(page.getTitle());
247
                        preview.setTitle(page.getTitle());
245
                        preview.setBody(page.getBody());
248
                        preview.setBody(page.getBody());
246
                        session.insert(preview);
249
                        session.insert(preview);
247
                }
250
                }
248
                return preview;
251
                return preview;
249
        }
252
        }
250
       
253
       
251
        @Override
254
        @Override
252
        public String getFrontPage(Language lang) {
255
        public String getFrontPage(Language lang) {
253
                Page page = new Page();
256
                Page page = new Page();
254
                page.setLanguageId(lang.getId());
257
                page.setLanguageId(lang.getId());
255
                page.setFrontPage(true);
258
                page.setFrontPage(true);
256
               
259
               
257
                Page front = session.loadUnique(page);
260
                Page front = session.loadUnique(page);
258
                if (front != null) {
261
                if (front != null) {
259
                        return front.getName();
262
                        return front.getName();
260
                }
263
                }
261
                return null;
264
                return null;
262
        }
265
        }
263
       
266
       
264
        @Override
267
        @Override
265
        public Page loadByNameWithPreview(int userId, String name, Language lang) {
268
        public Page loadByNameWithPreview(int userId, String name, Language lang) {
266
                Page p = loadByName(name, lang);
269
                Page p = loadByName(name, lang);
267
                if (p == null) {
270
                if (p == null) {
268
                        // we may still have a preview...
271
                        // we may still have a preview...
269
                        Preview preview = loadPreview(userId, name, lang);
272
                        Preview preview = loadPreview(userId, name, lang);
270
                        if (preview != null) {
273
                        if (preview != null) {
271
                                preview.setNew(true);
274
                                preview.setNew(true);
272
                                return preview.getPage();
275
                                return preview.getPage();
273
                        }
276
                        }
274
                        return null;
277
                        return null;
275
                } else {
278
                } else {
276
                        // check if we have a preview for this page...
279
                        // check if we have a preview for this page...
277
                        Preview preview = loadPreview(userId, name, lang);
280
                        Preview preview = loadPreview(userId, name, lang);
278
                        if (preview != null) {
281
                        if (preview != null) {
279
                                preview.setNew(false);
282
                                preview.setNew(false);
280
                                p.setPreview(preview);
283
                                p.setPreview(preview);
281
                        }
284
                        }
282
                        return p;
285
                        return p;
283
                }
286
                }
284
        }
287
        }
285
       
288
       
286
        @Override
289
        @Override
287
        public void deletePreview(int userId, String name, Language lang) {
290
        public void deletePreview(int userId, String name, Language lang) {
288
                Preview preview = loadPreview(userId, name, lang);
291
                Preview preview = loadPreview(userId, name, lang);
289
                if (preview != null) {
292
                if (preview != null) {
290
                        Preview p = new Preview();
293
                        Preview p = new Preview();
291
                        p.setId(preview.getId());
294
                        p.setId(preview.getId());
292
                        session.delete(p);
295
                        session.delete(p);
293
                }
296
                }
294
        }
297
        }
295
}
298
}