Kawai Wiki

Rev

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

Rev Author Line No. Line
8 soliveira 1
package org.kawai;
6 soliveira 2
 
113 soliveira 3
import java.util.List;
6 soliveira 4
 
104 soliveira 5
import org.kawai.action.FileAction;
8 soliveira 6
import org.kawai.action.LoginAction;
11 soliveira 7
import org.kawai.action.PageAction;
8 soliveira 8
import org.kawai.action.UserAction;
11 soliveira 9
import org.kawai.dao.jdbc.JdbcPageDAO;
8 soliveira 10
import org.kawai.dao.jdbc.JdbcUserDAO;
138 soliveira 11
import org.kawai.model.Group;
8 soliveira 12
import org.kawai.model.Language;
11 soliveira 13
import org.kawai.model.Page;
60 soliveira 14
import org.kawai.model.Preview;
78 soliveira 15
import org.kawai.model.Revision;
8 soliveira 16
import org.kawai.model.User;
113 soliveira 17
import org.kawai.tag.kcode.KCodeHandler;
6 soliveira 18
import org.mentabean.DBTypes;
19
import org.mentawai.action.LogoutAction;
11 soliveira 20
import org.mentawai.ajax.renderer.JsonRenderer;
18 soliveira 21
import org.mentawai.ajax.renderer.ResultRenderer;
11 soliveira 22
import org.mentawai.core.ActionConfig;
6 soliveira 23
import org.mentawai.core.ApplicationManager;
24
import org.mentawai.core.Context;
133 soliveira 25
import org.mentawai.core.Filter;
6 soliveira 26
import org.mentawai.core.Props;
27
import org.mentawai.db.ConnectionHandler;
176 soliveira 28
import org.mentawai.db.mysql.MySQLBoneCPConnectionHandler;
6 soliveira 29
import org.mentawai.filter.AuthenticationFilter;
133 soliveira 30
import org.mentawai.filter.AuthorizationFilter;
6 soliveira 31
import org.mentawai.filter.ExceptionFilter;
101 soliveira 32
import org.mentawai.filter.FileUploadFilter;
149 soliveira 33
import org.mentawai.filter.FlashScopeFilter;
6 soliveira 34
import org.mentawai.filter.MentaContainerFilter;
35
import org.mentawai.filter.TransactionFilter;
49 soliveira 36
import org.mentawai.filter.ValidationFilter;
139 soliveira 37
import org.mentawai.i18n.LocaleManager;
6 soliveira 38
import org.mentawai.transaction.JdbcTransaction;
39
 
40
public class AppManager extends ApplicationManager {
41
 
42
        private Props props;
43
 
44
        private ConnectionHandler connHandler;
45
 
46
        public ConnectionHandler getConnHandler() {
47
 
48
                return connHandler;
49
        }
50
 
51
        @Override
52
        public void init(Context application) {
53
 
162 soliveira 54
                ApplicationManager.DEFAULT_ENVIRONMENT = Environment.PROD;
55
 
6 soliveira 56
                this.props = getProps();
57
 
58
                ///////////////////////////////////////////////////
59
                // TURN ON/OFF APP MANAGER AUTO-REDEPLOY FEATURE
60
        // OBS: Requires http://www.javarebel.com to work
61
                ///////////////////////////////////////////////////
62
                setReloadable(props.getBoolean("auto_reload"));
63
 
113 soliveira 64
                ////////////////////////////////////////////////
65
                // Setting up supported kCodes tags
66
                ////////////////////////////////////////////////
67
 
68
                List<String> kCodeTags = props.getList("kcodes");
69
                for(String tag : kCodeTags) {
70
                        KCodeHandler.add(tag);
71
                }
6 soliveira 72
        }
73
 
74
        @Override
75
        public void setupDB() {
76
 
77
                String driver = props.getString("jdbc.driver");
78
                String url = props.getString("jdbc.url");
79
                String user = props.getString("jdbc.user");
80
                String pass = props.getString("jdbc.pass");
81
 
176 soliveira 82
                this.connHandler = new MySQLBoneCPConnectionHandler(driver, url, user, pass);
6 soliveira 83
        }
84
 
85
        @Override
86
        public void loadBeans() {
87
 
51 soliveira 88
                bean(User.class, "Users")
6 soliveira 89
                        .pk("id", DBTypes.AUTOINCREMENT)
90
                        .field("username", DBTypes.STRING)
91
                        .field("password", DBTypes.STRING)
92
                        .field("groupId", "group_id", DBTypes.INTEGER);
11 soliveira 93
 
22 soliveira 94
                bean(Page.class, "Pages")
11 soliveira 95
                        .pk("id", DBTypes.AUTOINCREMENT)
96
                        .field("name", DBTypes.STRING)
97
                        .field("title", DBTypes.STRING)
22 soliveira 98
                        .field("body", DBTypes.STRING)
99
                        .field("languageId", "language_id", DBTypes.INTEGER)
100
                        .field("systemPage", "system_page", DBTypes.BOOLEANSTRING)
24 soliveira 101
                        .field("frontPage", "front_page", DBTypes.BOOLEANSTRING)
25 soliveira 102
                        .field("modifiedById", "modified_by", DBTypes.INTEGER)
22 soliveira 103
                        .field("modifiedOn", "modified_on", DBTypes.NOW_ON_UPDATE_TIMESTAMP)
25 soliveira 104
                        .field("createdById", "created_by", DBTypes.INTEGER)
57 soliveira 105
                        .field("createdOn", "created_on", DBTypes.NOW_ON_INSERT_TIMESTAMP)
106
                        .field("deleted", DBTypes.BOOLEANSTRING);
60 soliveira 107
 
108
                bean(Preview.class, "Previews")
109
                        .pk("id", DBTypes.AUTOINCREMENT)
110
                        .field("userId", "user_id", DBTypes.INTEGER)
111
                        .field("title", DBTypes.STRING)
112
                        .field("body", DBTypes.STRING)
61 soliveira 113
                        .field("createdOn", "created_on", DBTypes.NOW_ON_INSERT_TIMESTAMP)
114
                        .field("name", DBTypes.STRING)
108 soliveira 115
                        .field("comment", DBTypes.STRING)
60 soliveira 116
                        .field("languageId", "language_id", DBTypes.INTEGER);
78 soliveira 117
 
118
                bean(Revision.class, "Revisions")
130 soliveira 119
                .pk("id", DBTypes.AUTOINCREMENT)
120
                .field("userId", "user_id", DBTypes.INTEGER)
121
                .field("newTitle", "new_title", DBTypes.STRING)
122
                .field("newBody", "new_body", DBTypes.STRING)
123
                .field("oldTitle", "old_title", DBTypes.STRING)
124
                .field("oldBody", "old_body", DBTypes.STRING)          
125
                .field("createdOn", "created_on", DBTypes.AUTOTIMESTAMP)
126
                .field("name", DBTypes.STRING)
127
                .field("languageId", "language_id", DBTypes.INTEGER)
128
                .field("comment", DBTypes.STRING)
129
                .field("revision", DBTypes.INTEGER);
78 soliveira 130
 
6 soliveira 131
        }
137 soliveira 132
 
133
        @Override
134
        public void loadLocales() {
139 soliveira 135
 
143 soliveira 136
                Language.clear();
137
 
142 soliveira 138
                if (!props.has("languages")) {
140 soliveira 139
 
142 soliveira 140
                        Language l = new Language(1, "English", "en");
139 soliveira 141
                        Language.add(l);
142
                        addLocale(l.getLocale());
142 soliveira 143
 
144
                } else {
145
 
146
                List<String[]> languages = props.getArrays("languages");
147
 
148
                for(int i = 0; i < languages.size(); i++) {
149
                        String[] array = languages.get(i);
150
 
151
                        Language l = new Language(i + 1, array[0], array[1], array.length >= 3 ? array[2] : null);
152
                        Language.add(l);
153
                        addLocale(l.getLocale());
154
                }
139 soliveira 155
                }
156
 
157
                LocaleManager.stopLocaleScan();
137 soliveira 158
        }
6 soliveira 159
 
160
    @Override
161
    public void loadLists() {
138 soliveira 162
                addList(Group.getListData());
137 soliveira 163
                addList(Language.getListData());
6 soliveira 164
        }
165
 
166
        @Override
167
        public void loadFilters() {
168
 
169
                /////////////////////////////////////////////
170
                // GLOBAL FILTERS
171
                /////////////////////////////////////////////
172
 
173
                filter(new ExceptionFilter());
137 soliveira 174
                on(EXCEPTION, fwd("/error.jsp"));
6 soliveira 175
 
176
                filter(new MentaContainerFilter());
177
 
149 soliveira 178
                filter(new FlashScopeFilter());
179
 
6 soliveira 180
                //////////////////////////////////////////////////////////
181
                // AUTHENTICATION: ALL ACTIONS THAT DO NOT IMPLEMENT
182
                // THE AuthenticationFree INTERFACE WILL REQUIRE
183
                // AUTHENTICATION
184
                //////////////////////////////////////////////////////////
185
                filter(new AuthenticationFilter());
130 soliveira 186
                on(LOGIN, redir("/"));
6 soliveira 187
 
49 soliveira 188
                filter(new ValidationFilter());
6 soliveira 189
 
190
                filter(new TransactionFilter("transaction"));
191
        }
192
 
193
        @Override
194
        public void setupIoC() {
195
 
196
                ////////////////////////////////////////////////////////
197
                // INVERSION OF CONTROL: SET UP YOUR REPOSITORIES OR 
198
                // ANY OTHER OBJECT IMPLEMENTATION YOU WANT TO MAKE 
199
                // AVAILABLE THROUGH IOC (INVERSION OF CONTROL)
200
                ////////////////////////////////////////////////////////
201
 
202
                ioc("conn", connHandler);
203
                ioc("beanManager", getBeanManager()); // always return the same instance...
204
                ioc("userDAO", JdbcUserDAO.class);
11 soliveira 205
                ioc("pageDAO", JdbcPageDAO.class);
6 soliveira 206
                ioc("beanSession", props.getClass("mentabean.dialect"));
207
                ioc("transaction", JdbcTransaction.class);
208
        }
209
 
210
        @Override
211
        public void loadActions() {
212
 
22 soliveira 213
                on(AJAX, ajax(new JsonRenderer()));
214
 
34 soliveira 215
                ActionConfig mainAction = action("/Page", PageAction.class)
12 soliveira 216
                        .on(SUCCESS, fwd("/show_page.jsp"));
11 soliveira 217
 
38 soliveira 218
                on(INDEX, redir(mainAction));
57 soliveira 219
                on(UPDATED, redir(mainAction,  true));
38 soliveira 220
 
133 soliveira 221
                Filter adminFilter = new AuthorizationFilter("admin");
222
                Filter editorFilter = new AuthorizationFilter("admin", "editor");
223
                on(ACCESSDENIED, redir(mainAction));
224
 
6 soliveira 225
                action("/User", UserAction.class, "add")
133 soliveira 226
                        .filter(adminFilter)
149 soliveira 227
                        .on(ERROR, chain(mainAction))
228
                        .on(CREATED, redir(mainAction));
6 soliveira 229
 
230
                action("/User", UserAction.class, "check")
133 soliveira 231
                        .filter(adminFilter)
18 soliveira 232
                        .all(ajax(new ResultRenderer()));
6 soliveira 233
 
234
                action("/Login", LoginAction.class)
34 soliveira 235
                        .on(ERROR, chain(mainAction))
42 soliveira 236
                        .on(SUCCESS, redir(mainAction, true));
6 soliveira 237
 
238
                action("/Logout", LogoutAction.class)
34 soliveira 239
                        .on(SUCCESS, redir(mainAction));
6 soliveira 240
 
133 soliveira 241
                action("/Page", PageAction.class, "get")
242
                .filter(editorFilter);
11 soliveira 243
 
133 soliveira 244
 
245
                action("/Page", PageAction.class, "getPreview")
246
                .filter(editorFilter);
247
 
248
                action("/Page", PageAction.class, "getRevisions")
249
                .filter(editorFilter);
250
 
38 soliveira 251
                action("/Page", PageAction.class, "add")
133 soliveira 252
                        .filter(editorFilter)
39 soliveira 253
                        .on(ERROR, chain(mainAction))
38 soliveira 254
                        .on(CREATED, redir(mainAction, true));
56 soliveira 255
 
133 soliveira 256
                action("/Page", PageAction.class, "setFrontPage")
257
                        .filter(adminFilter);
258
 
259
                action("/Page", PageAction.class, "delete")
260
                        .filter(adminFilter);
261
 
262
                action("/Page", PageAction.class, "edit")
263
                        .filter(editorFilter);
49 soliveira 264
 
133 soliveira 265
                action("/Page", PageAction.class, "list")
266
                        .filter(editorFilter);
38 soliveira 267
 
66 soliveira 268
                action("/Page", PageAction.class, "discardPreview")
133 soliveira 269
                        .filter(editorFilter)
66 soliveira 270
                        .on(REMOVED, redir(mainAction, true));
271
 
69 soliveira 272
                action("/Page", PageAction.class, "savePreview")
133 soliveira 273
                        .filter(editorFilter)
69 soliveira 274
                        .on(SUCCESS, redir(mainAction, true));
275
 
104 soliveira 276
                action("/Page", PageAction.class, "getCSS")
31 soliveira 277
                        .on(SUCCESS, fwd("/generate_css.jsp"));
278
 
104 soliveira 279
                action("/Page", PageAction.class, "getPrintCSS")
31 soliveira 280
                        .on(SUCCESS, fwd("/generate_css.jsp"));
281
 
104 soliveira 282
                action("/File", FileAction.class, "upload")
133 soliveira 283
                        .filter(editorFilter)
101 soliveira 284
                        .filter(new FileUploadFilter())
285
                        .on(SUCCESS, redir(mainAction, true));
286
 
133 soliveira 287
                action("/File", FileAction.class, "listFiles")
288
                        .filter(editorFilter);
103 soliveira 289
 
6 soliveira 290
        }
291
}