Kawai Wiki

Rev

Rev 73 | Rev 78 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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