/**
* 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.util.Collection;
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.EntitleManager;
import org.ralasafe.entitle.Query;
import org.ralasafe.entitle.QueryEntitlement;
import org.ralasafe.entitle.QueryManager;
import org.ralasafe.entitle.UserCategory;
import org.ralasafe.entitle.UserCategoryManager;
import org.ralasafe.privilege.Privilege;
import org.ralasafe.privilege.PrivilegeManager;
public class QueryEntitlementAction extends Action {
private static final Log log=LogFactory.getLog( QueryEntitlementAction.class );
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( "loadEntitlements".equals( oper ) ) {
WebUtil.forward( req, resp, "/ralasafe/privilege/queryEntitlementTable.jsp" );
return;
} else if( "getEntitlement".equals( oper ) ) {
int index=WebUtil.getIntParameter( req, "index", -23 );
if( index>=0 ) {
QueryEntitlement entitlement=(QueryEntitlement) handler.getQueryEntitlements().get( index );
req.setAttribute( "entitlement", entitlement );
}
WebUtil.forward( req, resp, "/ralasafe/privilege/editQueryEntitlement.jsp" );
return;
} else 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/queryEntitlement.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( "addEntitle".equals( oper ) ) {
QueryEntitlement entitle=getQueryEntitlement( req );
handler.addEntitle( entitle );
return;
} else if( "editEntitle".equals( oper) ) {
int index=WebUtil.getIntParameter( req, "index", 0 );
QueryEntitlement entitle=getQueryEntitlement( req );
handler.updateEntitle( index, entitle );
return;
} else if( "moveEntitle".equals( oper ) ) {
int index=WebUtil.getIntParameter( req, "index", 0 );
String direct=req.getParameter( "direct" );
handler.moveEntitle( index, direct );
return;
} else if( "deleteEntitle".equals( oper) ) {
int index=WebUtil.getIntParameter( req, "index", 0 );
handler.deleteEntitle( index );
return;
} else if( "save".equals( oper ) ) {
try {
handler.save();
} catch( EntityExistException e ) {
log.error( "", e );
throw new ServletException( e );
}
// clean session
String key=getHandlerAttributeKey( req );
req.getSession().removeAttribute( key );
return;
}
}
private QueryEntitlement getQueryEntitlement( HttpServletRequest req ) {
String description=req.getParameter( "description" );
int queryId=WebUtil.getIntParameter( req, "queryId", -23 );
int ucId=WebUtil.getIntParameter( req, "ucId", -23 );
int id=WebUtil.getIntParameter( req, "id", -23 );
QueryManager queryManager=WebUtil.getQueryManager( req );
Query query=queryManager.getQuery( queryId );
UserCategoryManager userCategoryManager=WebUtil.getUserCategoryManager( req );
UserCategory userCategory=userCategoryManager.getUserCategory( ucId );
QueryEntitlement entitle=new QueryEntitlement();
entitle.setDescription( description );
entitle.setPrivilegeId( id );
entitle.setQueryId( queryId );
entitle.setUserCategoryId( ucId );
entitle.setQuery( query );
entitle.setUserCategory( userCategory );
return entitle;
}
}