2014-07-11 12:32:03 -07:00
package com.foundation.web ;
import com.common.debug.Debug ;
import com.common.util.IHashMap ;
import com.common.util.LiteHashMap ;
import com.foundation.web.WebApplication.PathSubstitution ;
import com.foundation.web.interfaces.IConnectionContext ;
import com.foundation.web.interfaces.IRequest ;
import com.foundation.web.interfaces.IResponse ;
2014-12-07 18:34:03 -08:00
import com.foundation.web.interfaces.ISession ;
2014-07-11 12:32:03 -07:00
public class DefaultResourceRequestHandler extends ResourceRequestHandler {
private IHashMap nameSubstitutionMap = new LiteHashMap ( 10 ) ;
private IHashMap pathSubstitutionMap = new LiteHashMap ( 10 ) ;
2014-12-07 18:34:03 -08:00
/ * *
* DefaultResourceRequestHandler constructor .
* /
2014-07-11 12:32:03 -07:00
public DefaultResourceRequestHandler ( ) {
} //DefaultResourceRequestHandler()//
2014-12-07 18:34:03 -08:00
/ * ( non - Javadoc )
* @see com . foundation . web . ResourceRequestHandler # processWebSocketUpgrade ( com . foundation . web . interfaces . IRequest , com . foundation . web . interfaces . IResponse , com . foundation . web . interfaces . ISession , boolean , boolean , com . foundation . web . interfaces . IConnectionContext , java . lang . String , java . lang . String , java . lang . String , java . lang . String , java . lang . String )
* /
public void processWebSocketUpgrade ( IRequest request , IResponse response , ISession session , boolean isSecure , boolean clientHadBadSession , IConnectionContext connectionContext , String connection , String secWebSocketKey , String secWebSocketProtocol , String secWebSocketVersion , String origin ) {
response . setError ( IResponse . ERROR_UPGRADE_REJECTED ) ;
} //processWebSocketUpgrade()//
2014-07-11 12:32:03 -07:00
/ * *
* Adds a resource name subtitution mapping where the old resource name will be replaced by the new resource name automatically prior to the request being processed .
* @param oldName The old resource name .
* @param newName The new resource name .
* /
public void addResourceNameSubstitution ( String oldName , String newName ) {
nameSubstitutionMap . put ( oldName , newName ) ;
} //addResourceNameSubstitution()//
/ * *
* Adds a path subtitution mapping where the old path will be replaced by the new path automatically prior to the request being processed .
* @param oldPath The old resource name . eg : " / "
* @param newPath The new resource name . eg : " /subdir/index.html "
* @param forward Whether the substitution should constitute a forward ( where the client is told of the new path ) versus a redirect .
* /
public void addPathSubstitution ( String oldPath , String newPath , boolean forward ) {
pathSubstitutionMap . put ( oldPath , new PathSubstitution ( newPath , forward ) ) ;
} //addPathSubstitution()//
/ * ( non - Javadoc )
* @see com . foundation . web . ResourceRequestHandler # performPathSubstitution ( java . lang . String , com . foundation . web . interfaces . IRequest , com . foundation . web . interfaces . IResponse )
* /
protected String performPathSubstitution ( String path , IRequest request , IResponse response ) {
PathSubstitution substitutePath = ( PathSubstitution ) pathSubstitutionMap . get ( path ) ;
//First attempt to find a substitute path, then check to see if there is a substitute resource.//
if ( substitutePath ! = null ) {
if ( substitutePath . forward ( ) ) {
//Update the Browser's URL if a substitute is found so that additional requests that are relative to the primary resource's path don't fail spectacularly.//
response . setForwardUri ( substitutePath . getPath ( ) + ( request . getParameterString ( ) = = null ? " " : request . getParameterString ( ) ) ) ;
path = null ;
} //if//
else {
path = substitutePath . getPath ( ) ;
} //else//
} //if//
else {
int lastForwardSlash = path . lastIndexOf ( '/' ) ;
int lastBackSlash = path . lastIndexOf ( '\\' ) ;
int lastSlash = Math . max ( lastForwardSlash , lastBackSlash ) ;
//boolean hasDot = path.indexOf('.', lastSlash) != -1; //Note: This requires all accessed resources to have a dot in the name! Is this desired? Without this we can't tell if this is supposed to use the default resource in the directory though.
//String resourceName = hasDot && lastSlash + 2 != path.length() ? path.substring(lastSlash + 1) : "";
String resourceName = path . substring ( lastSlash + 1 ) ;
String newResourceName = ( String ) nameSubstitutionMap . get ( resourceName ) ;
if ( newResourceName ! = null ) {
if ( resourceName . length ( ) > 0 ) {
path = path . substring ( 0 , lastSlash + 1 ) + newResourceName ;
} //if//
else {
path + = newResourceName ;
} //else//
} //if//
} //else//
return path ;
} //performPathSubstitution()//
/ * ( non - Javadoc )
* @see com . foundation . web . ResourceRequestHandler # getMaxMessageSize ( com . foundation . web . interfaces . IRequest , com . foundation . web . SessionData , com . foundation . web . SecureSessionData )
* /
public int getMaxMessageSize ( IRequest request , SessionData sessionData , SecureSessionData secureSessionData ) {
return 0 ;
} //getMaxMessageSize()//
/ * ( non - Javadoc )
* @see com . foundation . web . ResourceRequestHandler # processRequest ( java . lang . String , com . foundation . web . interfaces . IRequest , com . foundation . web . interfaces . IResponse , com . foundation . web . SessionData , com . foundation . web . SecureSessionData , boolean , com . foundation . web . interfaces . IConnectionContext )
* /
public void processRequest ( String requestPath , IRequest request , IResponse response , SessionData sessionData , SecureSessionData secureSessionData , boolean isSecure , IConnectionContext connectionContext ) {
try {
int extensionDecimal = requestPath . lastIndexOf ( '.' ) ;
boolean cacheIndefinately = false ;
//Set images to cache indefinately.//
if ( extensionDecimal ! = - 1 ) {
String extension = requestPath . substring ( extensionDecimal + 1 ) . toLowerCase ( ) ;
if ( extension . equals ( " gif " ) | | extension . equals ( " png " ) | | extension . equals ( " jpg " ) | | extension . equals ( " jpeg " ) ) {
cacheIndefinately = true ;
} //if//
} //if//
FileContent . setContentResource ( response , requestPath , request , request . getCacheDate ( ) , null , cacheIndefinately ) ;
} //try//
catch ( Throwable e ) {
Debug . log ( e ) ;
} //catch//
} //processRequest()//
/ * ( non - Javadoc )
* @see com . foundation . web . ResourceRequestHandler # processRequest ( com . foundation . web . IWebRequestHandler , java . lang . String , com . foundation . web . interfaces . IRequest , com . foundation . web . interfaces . IResponse , com . foundation . web . SessionData , com . foundation . web . SecureSessionData , boolean , com . foundation . web . interfaces . IConnectionContext )
* /
public void processRequest ( IWebRequestHandler handler , String requestPath , IRequest request , IResponse response , SessionData sessionData , SecureSessionData secureSessionData , boolean isSecure , IConnectionContext connectionContext ) {
try {
handler . processRequest ( request , response , sessionData , secureSessionData ) ;
} //try//
catch ( Throwable e ) {
Debug . log ( e ) ;
} //catch//
} //processRequest()//
} //DefaultResourceRequestHandler//