MentaTutorials

Rev

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