MentaTutorials

Rev

Rev 38 | Details | Compare with Previous | Last modification | View Log | RSS feed

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