Rev 16 |
Rev 28 |
Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
package org.menta;
import java.sql.Connection;
import org.menta.action.LoginAction;
import org.menta.action.UserAction;
import org.menta.dao.jdbc.JdbcUserDAO;
import org.menta.model.Group;
import org.menta.model.Language;
import org.menta.model.User;
import org.menta.service.impl.UserServiceImpl;
import org.mentabean.DBTypes;
import org.mentabean.util.SQLUtils;
import org.mentawai.action.LogoutAction;
import org.mentawai.ajax.renderer.ResultRenderer;
import org.mentawai.core.ApplicationManager;
import org.mentawai.core.Context;
import org.mentawai.core.Props;
import org.mentawai.db.ConnectionHandler;
import org.mentawai.db.mysql.MySQLBoneCPConnectionHandler;
import org.mentawai.filter.AuthenticationFilter;
import org.mentawai.filter.ExceptionFilter;
import org.mentawai.filter.MentaContainerFilter;
import org.mentawai.filter.TransactionFilter;
import org.mentawai.filter.ValidationFilter;
import org.mentawai.mail.Email;
public class AppManager
extends ApplicationManager
{
private Props props
;
@
Override
public void init
(Context application
) {
this.
props = getProps
();
////////////////////////////////////////////
// TURN ON/OFF DEBUG MODE
////////////////////////////////////////////
setDebugMode
(props.
getBoolean("debug_mode"));
///////////////////////////////////////////////////
// TURN ON/OFF APP MANAGER AUTO-REDEPLOY FEATURE
// OBS: Requires http://www.javarebel.com to work
///////////////////////////////////////////////////
setReloadable
(props.
getBoolean("auto_reload"));
//////////////////////////////////////////
// FOR SENDING EMAIL
//////////////////////////////////////////
if (!props.
getBoolean("email.send_email")) {
Email.
setSendEmail(false);
} else {
Email.
setDefaultHostName(props.
getString("email.host"));
Email.
setDefaultSslConnection( props.
getBoolean("email.ssl") );
Email.
setDefaultPort( props.
getInt("email.port") );
if (props.
getBoolean("email.use_authentication")) {
Email.
setDefaultAuthentication(props.
getString("email.user"), props.
getString("email.pass"));
}
Email.
setDefaultFrom(props.
getString("email.from_email"), props.
getString("email.from_name"));
}
}
@
Override
public ConnectionHandler createConnectionHandler
() {
String driver = props.
getString("jdbc.driver");
String url = props.
getString("jdbc.url");
String user = props.
getString("jdbc.user");
String pass = props.
getString("jdbc.pass");
return new MySQLBoneCPConnectionHandler
(driver, url, user, pass
);
}
@
Override
public void setupDB
() {
initDatabaseIfNeeded
();
}
@
Override
public void loadBeans
() {
bean
(User.
class,
"Users")
.
pk("id", DBTypes.
AUTOINCREMENT)
.
field("username", DBTypes.
STRING)
.
field("password", DBTypes.
STRING)
.
field("email", DBTypes.
STRING)
.
field("languageId",
"language_id", DBTypes.
INTEGER)
.
field("groupId",
"group_id", DBTypes.
INTEGER);
}
@
Override
public void loadLists
() {
addLocalizedLists
("groups",
"languages");
}
@
Override
public void loadLocales
() {
addLocale
(Language.
ENGLISH.
getLocale());
addLocale
(Language.
PORTUGUESE.
getLocale());
}
@
Override
public void loadFilters
() {
filter
(new ExceptionFilter
());
on
(EXCEPTION, fwd
("/jsp/error.jsp"));
filter
(new MentaContainerFilter
());
filter
(new AuthenticationFilter
());
on
(LOGIN, redir
("/jsp/login.jsp"));
filter
(new ValidationFilter
());
filter
(new TransactionFilter
("transaction"));
}
@
Override
public void setupIoC
() {
ioc
("beanSession", props.
getClass("mentabean.dialect"));
ioc
("userDAO", JdbcUserDAO.
class);
ioc
("userService", UserServiceImpl.
class);
}
@
Override
public void loadActions
() {
action
("/User", UserAction.
class,
"add")
.
bypassAuthentication()
.
on(ERROR, fwd
("/jsp/user/add.jsp"))
.
on(CREATED, redir
("/jsp/index.jsp"));
action
("/User", UserAction.
class,
"edit")
.
comeBackAfterLogin()
.
authorize(Group.
ADMIN,
Group.
MASTER)
.
on(ERROR, fwd
("/jsp/user/edit.jsp"))
.
on(SHOW, fwd
("/jsp/user/edit.jsp"))
.
on(UPDATED, redir
("/jsp/index.jsp"));
action
("/User", UserAction.
class,
"check")
.
bypassAuthentication()
.
all(ajax
(new ResultRenderer
())); // return text/plain with the result...
action
("/Login", LoginAction.
class)
.
pojoParams("username",
"password")
.
on(ERROR, fwd
("/jsp/login.jsp"))
.
on(SUCCESS, redir
("/jsp/index.jsp"));
action
("/Logout", LogoutAction.
class)
.
on(SUCCESS, redir
("/jsp/login.jsp"));
}
////////////////////////////////////////////////////////////////////////////////
// Database initialization so this app does not require any database setup
//
// NOTE: It is not necessary to do this if your database is already initialized
////////////////////////////////////////////////////////////////////////////////
private void initDatabaseIfNeeded
() {
final ConnectionHandler connHandler = getConnectionHandler
();
connHandler.
exec(new ConnectionHandler.
Exec() {
@
Override
public void exec
(Connection conn
) {
initDatabaseIfNeeded
(conn
);
}
});
}
protected void initDatabaseIfNeeded
(Connection conn
) {
if (SQLUtils.
checkIfTableExists(conn,
"users")) return;
try {
String file = props.
getAbsolutePath("db.script");
SQLUtils.
executeScript(conn, file,
"UTF-8");
} catch(Exception e
) {
e.
printStackTrace();
}
if (!SQLUtils.
checkIfTableExists(conn,
"users")) throw new RuntimeException("Failed to initialize db!");
}
}