/**
* 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.Collection;
import java.util.HashMap;
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.SystemConstant;
import org.ralasafe.entitle.DecisionEntitlementTestResult;
import org.ralasafe.entitle.EntitleManager;
import org.ralasafe.entitle.QueryManager;
import org.ralasafe.privilege.Privilege;
import org.ralasafe.privilege.PrivilegeManager;
import org.ralasafe.user.User;
public class DecisionEntitlementTestAction extends AbstractTestAction {
private static final Log log=LogFactory.getLog( DecisionEntitlementTestAction.class );
public DecisionEntitlementHandler createHandler( HttpServletRequest req ) {
int id=WebUtil.getIntParameter( req, "id", -23 );
PrivilegeManager pvlgMng=WebUtil.getPrivilegeManager( req );
EntitleManager entitleMng=WebUtil.getEntitleManager( req );
QueryManager queryMng=WebUtil.getQueryManager( req );
Privilege pvlg=pvlgMng.getPrivilege( id );
Collection entitlements=entitleMng.getDecisionEntitlements( id );
if( log.isDebugEnabled() ) {
log.debug( "id=" + id + ", name=" + pvlg.getName() );
}
return new DecisionEntitlementHandler( pvlg, entitlements, queryMng, entitleMng );
}
public String getHandlerAttributeKey( HttpServletRequest req ) {
int id=WebUtil.getIntParameter( req, "id", 0 );
return "_$ralasafeDecisionEntitlement_" + id;
}
private DecisionEntitlementHandler getHandler( HttpServletRequest req ) {
String oper=req.getParameter( "oper" );
String key=getHandlerAttributeKey( req );
DecisionEntitlementHandler handler=null;
Object obj=req.getSession().getAttribute( key );
if( obj==null||"loadFresh".equals(oper) ) {
handler=createHandler( req );
// save into session, will be removed when policy is saved
req.getSession().setAttribute( key, handler );
} else {
handler=(DecisionEntitlementHandler) obj;
}
return handler;
}
protected void doGet( HttpServletRequest req, HttpServletResponse resp )
throws ServletException, IOException {
String oper=req.getParameter( "oper" );
if( log.isDebugEnabled() ) {
log.debug( "oper=" + oper );
}
DecisionEntitlementHandler handler=getHandler( req );
req.setAttribute( "handler", handler );
if( "return".equals( oper ) ) {
String gotoUrl="./nonRolePrivilegeMng.rls";
if( handler.getPrivilege().getType()==0 ) {
gotoUrl="./privilegeMng.rls";
}
String key=getHandlerAttributeKey( req );
req.getSession().removeAttribute( key );
resp.sendRedirect( gotoUrl );
return;
} else {
WebUtil.forward( req, resp, "/ralasafe/privilege/decisionEntitlementTest.jsp" );
return;
}
}
protected void doPost( HttpServletRequest req, HttpServletResponse resp )
throws ServletException, IOException {
String oper=req.getParameter( "oper" );
if( log.isDebugEnabled() ) {
log.debug( "oper=" + oper );
}
DecisionEntitlementHandler handler=getHandler( req );
req.setAttribute( "handler", handler );
if( "runTest".equals( oper ) ) {
User testUser=buildTestUser( req, true );
Map testCtx=null;
Object testBdData;
try {
testCtx=buildTestContext( req, handler.getTestContextFields() );
testBdData=buildTestBusinessData( req, handler.getTestBusinessDataFields() );
} catch( Exception e ) {
log.error( e );
PrintWriter writer=resp.getWriter();
writer.write( "<font color='red'><pre>" );
e.printStackTrace( writer );
writer.write( "</pre></font>" );
return;
}
DecisionEntitlementTestResult testResult;
try {
if( testCtx==null ) {
testCtx=new HashMap();
}
testCtx.put( SystemConstant.BUSINESS_DATA, testBdData );
testResult=handler.run( req.getLocale(), testUser, testCtx );
req.setAttribute( "testResult", testResult );
WebUtil.forward( req, resp, "/ralasafe/privilege/testDecisionEntitlementResult.jsp" );
} catch( Exception e ) {
log.error( "", e );
PrintWriter writer=resp.getWriter();
writer.write( "<font color='red'><pre>" );
e.printStackTrace( writer );
writer.write( "</pre></font>" );
}
} else if( "setBusinessDataClass".equals( oper ) ) {
String bdClass=req.getParameter( "businessDataClass" );
handler.setBusinessDataClass( bdClass );
try {
req.setAttribute("testBusinessDataFields", handler.getTestBusinessDataFields() );
req.setAttribute("testBusinessDataFieldTypes", handler.getTestBusinessDataFieldTypes() );
} catch( Exception e ) {
log.error( "", e );
PrintWriter writer=resp.getWriter();
writer.write( "<font color='red'><pre>" );
e.printStackTrace( writer );
writer.write( "</pre></font>" );
}
req.setAttribute( "bdClass", bdClass );
WebUtil.forward( req, resp, "/ralasafe/common/inputTestBusinessData.jsp" );
return;
}
}
}