Kawai Wiki

Rev

Rev 182 | Rev 206 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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