/**
* Copyright (c) 2004-2011 Wang Jinbao(Julian Wong), http://www.ralasafe.com
* Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
*/
package org.ralasafe.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.ralasafe.EntityExistException;
import org.ralasafe.entitle.QueryManager;
import org.ralasafe.entitle.ScriptTestResult;
import org.ralasafe.user.User;
public abstract class AbstractPolicyTestAction extends AbstractTestAction {
private static final Log log=LogFactory.getLog( AbstractPolicyTestAction.class );
public abstract AbstractPolicyDesignHandler createPolicyHandler( HttpServletRequest req );
public abstract String getPolicyHandlerAttributeKey( HttpServletRequest req );
private AbstractPolicyDesignHandler getPolicyHandler( HttpServletRequest req ) {
String oper=req.getParameter( "oper" );
String key=getPolicyHandlerAttributeKey( req );
AbstractPolicyDesignHandler handler=(AbstractPolicyDesignHandler) req.getSession().getAttribute( key );
if( handler==null||"loadFresh".equals(oper) ) {
handler=createPolicyHandler( req );
// save into session, will be removed when policy is saved
req.getSession().setAttribute( key, handler );
}
return handler;
}
protected void doGet( HttpServletRequest req, HttpServletResponse resp )
throws ServletException, IOException {
String oper=req.getParameter( "oper" );
if( log.isDebugEnabled() ) {
log.debug( "oper=" + oper );
}
AbstractPolicyDesignHandler handler=getPolicyHandler( req );
req.setAttribute( "handler", handler );
if( "return".equals( oper ) ) {
String gotoPage=handler.getManagePage();
// remove handler from session
req.getSession().removeAttribute( getPolicyHandlerAttributeKey( req ) );
// goto manage page
resp.sendRedirect( gotoPage );
return;
} else {
// prepare test
QueryManager queryMng=WebUtil.getQueryManager( req );
handler.prepareTest( queryMng );
WebUtil.forward( req, resp, handler.getTestMainPage() );
}
}
protected void doPost( HttpServletRequest req, HttpServletResponse resp )
throws ServletException, IOException {
String oper=req.getParameter( "oper" );
if( log.isDebugEnabled() ) {
log.debug( "oper=" + oper );
}
AbstractPolicyDesignHandler handler=getPolicyHandler( req );
req.setAttribute( "handler", handler );
if( "runTest".equals( oper ) ) {
boolean testUserNeeded=handler.isTestUserNeeded();
String[] testBusinessDataFields=handler.getTestBusinessDataFields();
String[] testContextFields=handler.getTestContextFields();
User testUser=buildTestUser( req, testUserNeeded );
Object testBdData=null;
Map testCtx=null;
try {
testBdData=buildTestBusinessData( req, testBusinessDataFields );
testCtx=buildTestContext( req, testContextFields );
} catch( Exception e ) {
PrintWriter writer=resp.getWriter();
writer.write( "<font color='red'><pre>" );
e.printStackTrace( writer );
writer.write( "</pre></font>" );
return;
}
ScriptTestResult testResult=handler.run( testUser, testBdData, testCtx );
req.setAttribute( "testResult", testResult );
WebUtil.forward( req, resp, handler.getShowTestResultPage() );
} else if( "save".equals( oper ) ) {
// remove handler from session
req.getSession().removeAttribute( getPolicyHandlerAttributeKey( req ) );
int id=WebUtil.getIntParameter( req, "id", -23 );
try {
handler.save( id );
} catch( EntityExistException e ) {
log.error( "", e );
throw new ServletException( e );
}
return;
} else if( "setBusinessDataClass".equals( oper ) ) {
String bdClass=req.getParameter( "businessDataClass" );
handler.setBusinessDataClass( bdClass );
req.setAttribute("testBusinessDataFields", handler.getTestBusinessDataFields() );
req.setAttribute("testBusinessDataFieldTypes", handler.getTestBusinessDataFieldTypes() );
req.setAttribute( "bdClass", bdClass );
WebUtil.forward( req, resp, "/ralasafe/common/inputTestBusinessData.jsp" );
return;
}
}
}