MentaTutorials

Rev

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

Rev Author Line No. Line
16 soliveira 1
package org.menta;
2
 
3
import java.sql.Connection;
4
 
5
import org.menta.action.LoginAction;
6
import org.menta.action.UserAction;
38 soliveira 7
import org.menta.dao.UserDAO;
16 soliveira 8
import org.menta.dao.jdbc.JdbcUserDAO;
9
import org.menta.model.Group;
10
import org.menta.model.Language;
11
import org.menta.model.User;
38 soliveira 12
import org.menta.service.UserService;
16 soliveira 13
import org.menta.service.impl.UserServiceImpl;
38 soliveira 14
import org.mentabean.BeanSession;
16 soliveira 15
import org.mentabean.DBTypes;
16
import org.mentabean.util.SQLUtils;
17
import org.mentawai.action.LogoutAction;
18
import org.mentawai.ajax.renderer.ResultRenderer;
19
import org.mentawai.core.ApplicationManager;
20
import org.mentawai.core.Context;
21
import org.mentawai.core.Props;
22
import org.mentawai.db.ConnectionHandler;
23
import org.mentawai.db.mysql.MySQLBoneCPConnectionHandler;
24
import org.mentawai.filter.AuthenticationFilter;
25
import org.mentawai.filter.ExceptionFilter;
26
import org.mentawai.filter.MentaContainerFilter;
27
import org.mentawai.filter.TransactionFilter;
28
import org.mentawai.filter.ValidationFilter;
29
import org.mentawai.mail.Email;
30
 
31
public class AppManager extends ApplicationManager {
32
 
33
        private Props props;
34
 
35
        @Override
36
        public void init(Context application) {
37
 
38
                this.props = getProps();
39
 
40
                ////////////////////////////////////////////
41
                // TURN ON/OFF DEBUG MODE
42
                ////////////////////////////////////////////
43
                setDebugMode(props.getBoolean("debug_mode"));
44
 
45
                ///////////////////////////////////////////////////
46
                // TURN ON/OFF APP MANAGER AUTO-REDEPLOY FEATURE
47
        // OBS: Requires http://www.javarebel.com to work
48
                ///////////////////////////////////////////////////
49
                setReloadable(props.getBoolean("auto_reload"));
50
 
51
                //////////////////////////////////////////
52
                // FOR SENDING EMAIL
53
                //////////////////////////////////////////
54
                if (!props.getBoolean("email.send_email")) {
55
 
56
                        Email.setSendEmail(false);
57
 
58
                } else {
59
 
60
                        Email.setDefaultHostName(props.getString("email.host"));
61
 
62
                        Email.setDefaultSslConnection( props.getBoolean("email.ssl") );
63
 
64
                        Email.setDefaultPort( props.getInt("email.port") );
65
 
66
                        if (props.getBoolean("email.use_authentication")) {
67
 
68
                                Email.setDefaultAuthentication(props.getString("email.user"), props.getString("email.pass"));
69
                        }
70
 
71
                        Email.setDefaultFrom(props.getString("email.from_email"), props.getString("email.from_name"));
72
                }
73
        }
74
 
75
        @Override
76
        public ConnectionHandler createConnectionHandler() {
77
 
78
                String driver = props.getString("jdbc.driver");
79
                String url = props.getString("jdbc.url");
80
                String user = props.getString("jdbc.user");
81
                String pass = props.getString("jdbc.pass");
82
 
83
                return new MySQLBoneCPConnectionHandler(driver, url, user, pass);
84
        }
85
 
86
        @Override
87
        public void setupDB() {
88
                initDatabaseIfNeeded();
89
        }
90
 
91
        @Override
92
        public void loadBeans() {
93
 
94
                bean(User.class, "Users")
95
                        .pk("id", DBTypes.AUTOINCREMENT)
96
                        .field("username", DBTypes.STRING)
97
                        .field("password", DBTypes.STRING)
98
                        .field("email", DBTypes.STRING)
99
                        .field("languageId", "language_id", DBTypes.INTEGER)
100
                        .field("groupId", "group_id", DBTypes.INTEGER);
101
        }
102
 
103
    @Override
104
    public void loadLists() {
105
                addLocalizedLists("groups", "languages");
106
        }
107
 
108
        @Override
109
        public void loadLocales() {
110
                addLocale(Language.ENGLISH.getLocale());
111
                addLocale(Language.PORTUGUESE.getLocale());
112
        }
113
 
114
        @Override
115
        public void loadFilters() {
116
 
117
                filter(new ExceptionFilter());
118
                on(EXCEPTION, fwd("/jsp/error.jsp"));
119
 
120
                filter(new MentaContainerFilter());
121
 
122
                filter(new AuthenticationFilter());
123
                on(LOGIN, redir("/jsp/login.jsp"));
124
 
125
                filter(new ValidationFilter());
126
 
38 soliveira 127
                filter(new TransactionFilter());
16 soliveira 128
        }
129
 
130
        @Override
131
        public void setupIoC() {
132
 
38 soliveira 133
                ioc(BeanSession.class, props.getClass("mentabean.dialect"));
16 soliveira 134
 
38 soliveira 135
                ioc(UserDAO.class, JdbcUserDAO.class);
16 soliveira 136
 
38 soliveira 137
                ioc(UserService.class, UserServiceImpl.class);
16 soliveira 138
        }
139
 
140
        @Override
141
        public void loadActions() {
142
 
143
                action("/User", UserAction.class, "add")
144
                        .bypassAuthentication()
145
                        .on(ERROR, fwd("/jsp/user/add.jsp"))
146
                        .on(CREATED, redir("/jsp/index.jsp"));
147
 
148
                action("/User", UserAction.class, "edit")
149
                        .comeBackAfterLogin()
150
                        .authorize(Group.ADMIN, Group.MASTER)
151
                        .on(ERROR, fwd("/jsp/user/edit.jsp"))
152
                        .on(SHOW, fwd("/jsp/user/edit.jsp"))
153
                        .on(UPDATED, redir("/jsp/index.jsp"));
154
 
155
                action("/User", UserAction.class, "check")
156
                        .bypassAuthentication()
157
                        .all(ajax(new ResultRenderer())); // return text/plain with the result...
158
 
159
                action("/Login", LoginAction.class)
28 soliveira 160
                        .methodParams("username", "password")
16 soliveira 161
                        .on(ERROR, fwd("/jsp/login.jsp"))
162
                        .on(SUCCESS, redir("/jsp/index.jsp"));
163
 
164
                action("/Logout", LogoutAction.class)
165
                        .on(SUCCESS, redir("/jsp/login.jsp"));
166
 
167
        }
168
 
169
        ////////////////////////////////////////////////////////////////////////////////
170
        // Database initialization so this app does not require any database setup
171
        //
172
        // NOTE: It is not necessary to do this if your database is already initialized
173
        ////////////////////////////////////////////////////////////////////////////////
174
 
175
        private void initDatabaseIfNeeded() {
176
 
177
                final ConnectionHandler connHandler = getConnectionHandler();
178
 
179
                connHandler.exec(new ConnectionHandler.Exec() {
180
 
181
                        @Override
182
                        public void exec(Connection conn) {
183
                                initDatabaseIfNeeded(conn);
184
                        }
185
                });
186
        }
187
 
188
        protected void initDatabaseIfNeeded(Connection conn) {
189
 
190
                if (SQLUtils.checkIfTableExists(conn, "users")) return;
191
 
192
                try {
193
                        String file = props.getAbsolutePath("db.script");
194
                        SQLUtils.executeScript(conn, file, "UTF-8");
195
                } catch(Exception e) {
196
                        e.printStackTrace();
197
                }
198
 
199
                if (!SQLUtils.checkIfTableExists(conn, "users")) throw new RuntimeException("Failed to initialize db!");
200
        }
201
}