/**
* 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.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.entitle.EntitleManager;
import org.ralasafe.entitle.QueryEntitlementTestResult;
import org.ralasafe.entitle.QueryManager;
import org.ralasafe.privilege.Privilege;
import org.ralasafe.privilege.PrivilegeManager;
import org.ralasafe.user.User;
public class QueryEntitlementTestAction extends AbstractTestAction {
private static final Log log=LogFactory.getLog( QueryEntitlementTestAction.class );
private static final int DEFAULT_QUERY_RESULT_PAGE_SIZE=15;
public QueryEntitlementHandler 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.getQueryEntitlements( id );
if( log.isDebugEnabled() ) {
log.debug( "id=" + id + ", name=" + pvlg.getName() );
}
return new QueryEntitlementHandler( pvlg, entitlements, queryMng, entitleMng );
}
public String getHandlerAttributeKey( HttpServletRequest req ) {
int id=WebUtil.getIntParameter( req, "id", 0 );
return "_$ralasafeQueryEntitlement_" + id;
}
private QueryEntitlementHandler getHandler( HttpServletRequest req ) {
String oper=req.getParameter( "oper" );
String key=getHandlerAttributeKey( req );
QueryEntitlementHandler 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=(QueryEntitlementHandler) 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 );
}
QueryEntitlementHandler 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/queryEntitlementTest.jsp" );
return;
}
}
protected void doPost( HttpServletRequest req, HttpServletResponse resp )
throws ServletException, IOException {
String oper=req.getParameter( "oper" );
if( log.isDebugEnabled() ) {
log.debug( "oper=" + oper );
}
QueryEntitlementHandler handler=getHandler( req );
req.setAttribute( "handler", handler );
if( "runTest".equals( oper ) ) {
User testUser=buildTestUser( req, true );
Map testCtx=null;
try {
testCtx=buildTestContext( req, handler.getTestContextFields() );
} catch( Exception e ) {
log.error( e );
PrintWriter writer=resp.getWriter();
writer.write( "<font color='red'><pre>" );
e.printStackTrace( writer );
writer.write( "</pre></font>" );
return;
}
int first=WebUtil.getIntParameter( req, "first", 0 );
QueryEntitlementTestResult testResult;
try {
testResult=handler.run( req.getLocale(), testUser, testCtx, first, DEFAULT_QUERY_RESULT_PAGE_SIZE );
req.setAttribute( "testResult", testResult );
WebUtil.forward( req, resp, "/ralasafe/privilege/testQueryEntitlementResult.jsp" );
} catch( Exception e ) {
PrintWriter writer=resp.getWriter();
writer.write( "<font color='red'><pre>" );
e.printStackTrace( writer );
writer.write( "</pre></font>" );
}
}
}
}