org.velocityweb.controller
Class Controller

java.lang.Object
  extended byorg.velocityweb.controller.Controller
Direct Known Subclasses:
SimpleController

public abstract class Controller
extends java.lang.Object

controller base class, should be customized for each project

Author:
Jacklondon Chen

Field Summary
protected  java.lang.String dbCharsetName
           
protected  java.lang.String defaultHtmlTemplateFileName
           
protected  java.lang.String outputHtmlCharsetName
           
 
Constructor Summary
Controller()
           
 
Method Summary
 boolean checkDatabaseConnectionPerRequest()
          check database connection per web request, return false if check fail.
 BatchJobAppContext createBatchJobAppContext(int transactionIsolation, java.util.Map context, java.util.ResourceBundle resourceBundle)
          create application context for each task, should be customized for each project if need
 WebAppContext createWebAppContext(int transactionIsolation, java.util.Map context, java.util.ResourceBundle resourceBundle, Controller controller)
          create application context for each web request, should be customized for each project
 void destroyApplication()
          destroy application when web server stopped
 java.lang.String getAppExceptionTemplateFileName()
          get template file name of exception
 java.lang.String getDatabaseConnectFailErrorMessage()
          get message for database connect fail, must be overrided
protected abstract  java.lang.Object getDataSource()
          get Datasource, must be override
 java.lang.String getDbCharsetName()
          get database charset name, this is for web validation for input string length
 java.lang.String getDefaultHtmlTemplateFileName()
          get home page template file name
 java.lang.String getDispatchFailMessageListTag()
          get fail message tag in template file
 java.lang.String getDispatchFailTemplateFileName()
          get template file name for "not find url you requested"
 java.lang.String getDispatchSuccessJumpUrlTag()
          get success forward tag in template file
 java.lang.String getDispatchSuccessMessageTag()
          get success message tag in template file
 java.lang.String getDispatchSuccessStaySecondsTag()
          get "dispath success stay seconds" tag name in template file
 java.lang.String getDispatchSuccessTemplateFileName()
          get update/delete success message template file name
 java.lang.String getDispatchTargetUrlTag()
          get dispatch target URL tag, for update/delete, these kind of request has same result pages, that is success or fail page, but different process logic
 LeafDispatcher getHomeDispatcher(javax.servlet.http.HttpServletRequest request)
          get home page dispatcher, if logined, return loginedHomeDispatcher, else unloginedHomeDispatcher
 LeafDispatcher getLoginDispatcher()
          get login page dispatcher
 LeafDispatcher getLoginedHomeDispatcher()
          get logined home page URL
 LeafDispatcher getNoRightDispatcher()
          get URL for when no access right,normally pages of "You have no right to access page"
 java.lang.String getOutputHtmlCharsetName()
           
 java.util.ResourceBundle getResourceBundle(javax.servlet.http.HttpServletRequest request)
          get resource bundle, must override this if need multi-language support
 java.lang.Object getSessionUser(javax.servlet.http.HttpServletRequest request)
          get logined user information in HTTP session
abstract  java.lang.String getTemplateRootFolder(javax.servlet.ServletConfig config)
          get template root folder, can be a URL in .war/.ear file, or folder outside .war/.ear file
abstract  TemplateWrapper getTemplateWrapper()
          get template web wrapper, can be VelocityTemplateWebWrapper or FreemarkerTemplateWebWrapper
 LeafDispatcher getUnloginedHomeDispatcher()
          get un-logined home page URL
 boolean hasAccessRight(LeafDispatcher leafDispatcher, javax.servlet.http.HttpServletRequest request)
          check if user has access right, based on request URL
 boolean hasLogined(javax.servlet.http.HttpServletRequest request)
          check if user has logined
 void initAppExceptionPage(java.util.Map context, java.lang.Throwable error)
          init exception page, normally translate exception message to be showed on pages
 boolean initApplication()
          init application when web server started, must be overrided
 boolean isDbDuplicateException(java.lang.Throwable t)
          check if framework catch un-handle exception, it is data duplicate? must be translate to well-read message
 boolean isNewDispatchInstancePerRequest()
          create new dispatch instance per request?
 boolean needLogin(LeafDispatcher leafDispatcher, javax.servlet.http.HttpServletRequest request)
          check if the specified URL can be accessed without login, must be override
 void onAfterUseConnection(java.sql.Connection con)
          callback event, after use connection
 void onBeforeUseConnection(java.sql.Connection con)
          callback event, before use connection
 LeafDispatcher processCheck(LeafDispatcher leafDispatcher, javax.servlet.http.HttpServletRequest request)
          process check, check login, check access right
 void setAppExceptionTemplateFileName(java.lang.String appExceptionTemplateFileName)
          set template file name of exception
 void setDbCharsetName(java.lang.String dbCharsetName)
          set database charset name, this is for web validation for input string length
 void setDefaultHtmlTemplateFileName(java.lang.String defaultHtmlTemplateFileName)
          set home page template file name
 void setDispatchFailMessageListTag(java.lang.String dispatchFailMessageListTag)
          set fail message tag in template file, must be called
 void setDispatchFailTemplateFileName(java.lang.String dispatchFailTemplateFileName)
          set template file name for "not find url you requested"
 void setDispatchSuccessJumpUrlTag(java.lang.String dispatchSuccessJumpUrlTag)
          set success forward tag in template file, must be called
 void setDispatchSuccessMessageTag(java.lang.String dispatchSuccessMessageTag)
          set success message tag in template file, must be called
 void setDispatchSuccessStaySecondsTag(java.lang.String dispatchSuccessStaySecondsTag)
          set "dispath success stay seconds" tag name in template file
 void setDispatchSuccessTemplateFileName(java.lang.String dispatchSuccessTemplateFileName)
          set update/delete success message template file name
 void setDispatchTargetUrlTag(java.lang.String dispatchTargetUrlTag)
          set dispatch target URL tag, for update/delete, these kind of request has same result pages, that is success or fail page, but different process logic
 void setLoginDispatcher(LeafDispatcher loginDispatcher)
          set login dispatcher
 void setLoginedHomeDispatcher(LeafDispatcher loginedHomeDispatcher)
          set logined home page url
 void setNoRightDispatcher(LeafDispatcher noRightDispatcher)
          set URL for when no access right,normally pages of "You have no right to access page"
 void setOutputHtmlCharsetName(java.lang.String outputHtmlCharsetName)
           
 void setSessionUser(javax.servlet.http.HttpServletRequest request, java.lang.Object user)
          save user information in HTTP session after logined
 void setUnloginedHomeDispatcher(LeafDispatcher unloginedHomeDispatcher)
          set un-logined home page url
 java.lang.Throwable transalateUnhandleException(java.lang.Throwable t, java.util.ResourceBundle rb)
          translate unhandle exception
 void writeToResponse(javax.servlet.http.HttpServletResponse response, java.lang.String html, java.lang.String charsetName)
          write HTML to response with specified charset encoding
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

outputHtmlCharsetName

protected java.lang.String outputHtmlCharsetName

dbCharsetName

protected java.lang.String dbCharsetName

defaultHtmlTemplateFileName

protected java.lang.String defaultHtmlTemplateFileName
Constructor Detail

Controller

public Controller()
Method Detail

createWebAppContext

public WebAppContext createWebAppContext(int transactionIsolation,
                                         java.util.Map context,
                                         java.util.ResourceBundle resourceBundle,
                                         Controller controller)
create application context for each web request, should be customized for each project

Parameters:
transactionIsolation -
context -
resourceBundle -
Returns:
application context instance

createBatchJobAppContext

public BatchJobAppContext createBatchJobAppContext(int transactionIsolation,
                                                   java.util.Map context,
                                                   java.util.ResourceBundle resourceBundle)
create application context for each task, should be customized for each project if need

Parameters:
transactionIsolation -
context -
resourceBundle -
Returns:
application context

initApplication

public boolean initApplication()
init application when web server started, must be overrided

Returns:
return true if init successed

destroyApplication

public void destroyApplication()
destroy application when web server stopped


checkDatabaseConnectionPerRequest

public boolean checkDatabaseConnectionPerRequest()
check database connection per web request, return false if check fail. if do not want to check, just return true.

Returns:
true if connection is ok.

getSessionUser

public java.lang.Object getSessionUser(javax.servlet.http.HttpServletRequest request)
get logined user information in HTTP session

Parameters:
request -

setSessionUser

public void setSessionUser(javax.servlet.http.HttpServletRequest request,
                           java.lang.Object user)
save user information in HTTP session after logined

Parameters:
request -
user -

onBeforeUseConnection

public void onBeforeUseConnection(java.sql.Connection con)
callback event, before use connection

Parameters:
con -

onAfterUseConnection

public void onAfterUseConnection(java.sql.Connection con)
callback event, after use connection

Parameters:
con -

getDatabaseConnectFailErrorMessage

public java.lang.String getDatabaseConnectFailErrorMessage()
get message for database connect fail, must be overrided

Returns:
fail message to be showed on web

hasLogined

public boolean hasLogined(javax.servlet.http.HttpServletRequest request)
check if user has logined

Parameters:
request -
Returns:
true if logined, otherwise false

hasAccessRight

public boolean hasAccessRight(LeafDispatcher leafDispatcher,
                              javax.servlet.http.HttpServletRequest request)
check if user has access right, based on request URL

Parameters:
leafDispatcher - stands for one URL
request - HTTP request
Returns:
true if user can access this URL

setUnloginedHomeDispatcher

public void setUnloginedHomeDispatcher(LeafDispatcher unloginedHomeDispatcher)
set un-logined home page url

Parameters:
unloginedHomeDispatcher -

getUnloginedHomeDispatcher

public LeafDispatcher getUnloginedHomeDispatcher()
get un-logined home page URL

Returns:
un-logined home page URL

getLoginedHomeDispatcher

public LeafDispatcher getLoginedHomeDispatcher()
get logined home page URL

Returns:
logined home page URL

setLoginedHomeDispatcher

public void setLoginedHomeDispatcher(LeafDispatcher loginedHomeDispatcher)
set logined home page url

Parameters:
loginedHomeDispatcher -

getHomeDispatcher

public LeafDispatcher getHomeDispatcher(javax.servlet.http.HttpServletRequest request)
get home page dispatcher, if logined, return loginedHomeDispatcher, else unloginedHomeDispatcher

Parameters:
request -
Returns:
home page dispatcher

getNoRightDispatcher

public LeafDispatcher getNoRightDispatcher()
get URL for when no access right,normally pages of "You have no right to access page"

Returns:
No right page URL

setNoRightDispatcher

public void setNoRightDispatcher(LeafDispatcher noRightDispatcher)
set URL for when no access right,normally pages of "You have no right to access page"

Parameters:
noRightDispatcher - No right page URL

needLogin

public boolean needLogin(LeafDispatcher leafDispatcher,
                         javax.servlet.http.HttpServletRequest request)
check if the specified URL can be accessed without login, must be override

Parameters:
leafDispatcher -
request -
Returns:
result flag indicate that the leaf dispatcher need login to access

getLoginDispatcher

public LeafDispatcher getLoginDispatcher()
get login page dispatcher

Returns:
login page dispatcher

setLoginDispatcher

public void setLoginDispatcher(LeafDispatcher loginDispatcher)
set login dispatcher

Parameters:
loginDispatcher -

getDataSource

protected abstract java.lang.Object getDataSource()
get Datasource, must be override

Returns:

getAppExceptionTemplateFileName

public java.lang.String getAppExceptionTemplateFileName()
get template file name of exception

Returns:
template file name of exception

setAppExceptionTemplateFileName

public void setAppExceptionTemplateFileName(java.lang.String appExceptionTemplateFileName)
set template file name of exception

Parameters:
appExceptionTemplateFileName - exception template file name

getOutputHtmlCharsetName

public java.lang.String getOutputHtmlCharsetName()
Returns:
Returns the outputHtmlCharsetName.

setOutputHtmlCharsetName

public void setOutputHtmlCharsetName(java.lang.String outputHtmlCharsetName)
Parameters:
outputHtmlCharsetName - The outputHtmlCharsetName to set.

initAppExceptionPage

public void initAppExceptionPage(java.util.Map context,
                                 java.lang.Throwable error)
init exception page, normally translate exception message to be showed on pages

Parameters:
context -
error -

getResourceBundle

public java.util.ResourceBundle getResourceBundle(javax.servlet.http.HttpServletRequest request)
get resource bundle, must override this if need multi-language support

Parameters:
request -

getDbCharsetName

public java.lang.String getDbCharsetName()
get database charset name, this is for web validation for input string length

Returns:
database charset name

setDbCharsetName

public void setDbCharsetName(java.lang.String dbCharsetName)
set database charset name, this is for web validation for input string length

Parameters:
dbCharsetName - DB charaset name

isDbDuplicateException

public boolean isDbDuplicateException(java.lang.Throwable t)
check if framework catch un-handle exception, it is data duplicate? must be translate to well-read message

Parameters:
t -
Returns:
return true if the exception is a DB duplicate error

transalateUnhandleException

public java.lang.Throwable transalateUnhandleException(java.lang.Throwable t,
                                                       java.util.ResourceBundle rb)
translate unhandle exception

Parameters:
t - error
rb - resource bundle, for multi-language usage.
Returns:
translated exception

getDispatchFailTemplateFileName

public java.lang.String getDispatchFailTemplateFileName()
get template file name for "not find url you requested"

Returns:
template file name for "not find url you requested"

setDispatchFailTemplateFileName

public void setDispatchFailTemplateFileName(java.lang.String dispatchFailTemplateFileName)
set template file name for "not find url you requested"

Parameters:
dispatchFailTemplateFileName - template file name for "not find url you requested"

getDispatchSuccessTemplateFileName

public java.lang.String getDispatchSuccessTemplateFileName()
get update/delete success message template file name

Returns:
update/delete success message template file name

setDispatchSuccessTemplateFileName

public void setDispatchSuccessTemplateFileName(java.lang.String dispatchSuccessTemplateFileName)
set update/delete success message template file name

Parameters:
dispatchSuccessTemplateFileName -

isNewDispatchInstancePerRequest

public boolean isNewDispatchInstancePerRequest()
create new dispatch instance per request?

Returns:
flag of creating new dispatch instance per request

getDefaultHtmlTemplateFileName

public java.lang.String getDefaultHtmlTemplateFileName()
get home page template file name

Returns:
home page template file name

setDefaultHtmlTemplateFileName

public void setDefaultHtmlTemplateFileName(java.lang.String defaultHtmlTemplateFileName)
set home page template file name

Parameters:
defaultHtmlTemplateFileName - default home page template file name

getDispatchFailMessageListTag

public java.lang.String getDispatchFailMessageListTag()
get fail message tag in template file

Returns:
fail message tag in template file

setDispatchFailMessageListTag

public void setDispatchFailMessageListTag(java.lang.String dispatchFailMessageListTag)
set fail message tag in template file, must be called

Parameters:
dispatchFailMessageListTag - fail message tag

getDispatchSuccessJumpUrlTag

public java.lang.String getDispatchSuccessJumpUrlTag()
get success forward tag in template file

Returns:
success forward tag in template file

setDispatchSuccessJumpUrlTag

public void setDispatchSuccessJumpUrlTag(java.lang.String dispatchSuccessJumpUrlTag)
set success forward tag in template file, must be called

Parameters:
dispatchSuccessJumpUrlTag - success forward tag

getDispatchSuccessMessageTag

public java.lang.String getDispatchSuccessMessageTag()
get success message tag in template file

Returns:
success message tag in template file

setDispatchSuccessMessageTag

public void setDispatchSuccessMessageTag(java.lang.String dispatchSuccessMessageTag)
set success message tag in template file, must be called

Parameters:
dispatchSuccessMessageTag - success message tag

processCheck

public LeafDispatcher processCheck(LeafDispatcher leafDispatcher,
                                   javax.servlet.http.HttpServletRequest request)
process check, check login, check access right

Parameters:
leafDispatcher -
request -
Returns:
the correct page to be showed after check

getDispatchTargetUrlTag

public java.lang.String getDispatchTargetUrlTag()
get dispatch target URL tag, for update/delete, these kind of request has same result pages, that is success or fail page, but different process logic

Returns:
dispatch target URL tag

setDispatchTargetUrlTag

public void setDispatchTargetUrlTag(java.lang.String dispatchTargetUrlTag)
set dispatch target URL tag, for update/delete, these kind of request has same result pages, that is success or fail page, but different process logic

Parameters:
dispatchTargetUrlTag -

getDispatchSuccessStaySecondsTag

public java.lang.String getDispatchSuccessStaySecondsTag()
get "dispath success stay seconds" tag name in template file

Returns:
"dispath success stay seconds" tag name in template file

setDispatchSuccessStaySecondsTag

public void setDispatchSuccessStaySecondsTag(java.lang.String dispatchSuccessStaySecondsTag)
set "dispath success stay seconds" tag name in template file

Parameters:
dispatchSuccessStaySecondsTag - "dispath success stay seconds" tag name

getTemplateWrapper

public abstract TemplateWrapper getTemplateWrapper()
get template web wrapper, can be VelocityTemplateWebWrapper or FreemarkerTemplateWebWrapper

Returns:
template web wrapper

writeToResponse

public void writeToResponse(javax.servlet.http.HttpServletResponse response,
                            java.lang.String html,
                            java.lang.String charsetName)
                     throws java.io.IOException
write HTML to response with specified charset encoding

Parameters:
response -
html -
charsetName -
Throws:
java.io.IOException

getTemplateRootFolder

public abstract java.lang.String getTemplateRootFolder(javax.servlet.ServletConfig config)
get template root folder, can be a URL in .war/.ear file, or folder outside .war/.ear file

Parameters:
config -
Returns:
template root folder