MentaTutorials

Rev

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

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