package de.webman.acl.eventhandler;
import java.util.*;
import com.teamkonzept.web.*;
import com.teamkonzept.lib.*;
import com.teamkonzept.webman.*;
import com.teamkonzept.webman.mainint.*;
import com.teamkonzept.webman.mainint.events.*;
import de.webman.acl.*;
/**
Updates a group definiton in the database
* @author $Author: alex $
* @version $Revision: 1.3 $
*/
public class ACGroupDeleteUserEventHandler extends DefaultEventHandler implements ParameterTypes, DatabaseDefaults, FrameConstants
{
private ACGroupDeleteUserEventHandler() {}
private static ACGroupDeleteUserEventHandler instance = new ACGroupDeleteUserEventHandler();
public static ACGroupDeleteUserEventHandler getInstance()
{
return instance;
}
public void handleEvent(TKEvent evt) throws TKException
{
try {
WebManEvent.checkEvent(evt.getRemoteUser(), evt.getName(), ContextConstants.ACCESS_CONTROL);
String groupId = evt.getParameter( PARAMETER, "GROUP_ID");
String userId = evt.getParameter( PARAMETER, "USER_ID");
if (groupId != null && groupId.length() > 0)
{
doGroup(evt);
}
else if (userId != null && userId.length() > 0)
{
doUser(evt);
}
} catch (Throwable e) {
throw WebmanExceptionHandler.getException(e);
}
}
/**
returns true if this class handles the event
*/
public boolean isHandler(TKEvent evt)
{
return evt.getName().equalsIgnoreCase( "AC_GROUP_DELETE_CHILD" );
}
/**
entfernt logins aus einer Gruppe
*/
private void doGroup(TKEvent evt) throws Throwable
{
String groupId = evt.getParameter( PARAMETER, "GROUP_ID");
TKParams params = evt.getParams();
if (groupId != null) {
Profile theGroup = null;
theGroup = ProfileFactory.getInstance().getProfile(new Integer(groupId));
if (theGroup != null) {
removeLogin(theGroup, params, "DEL_USER_ID");
removeLogin(theGroup, params, "DEL_GROUP_ID");
}
}
TKHTMLTemplate t = evt.getPrepHTMLTemplate( "f_ac_group.tmpl" );
String editPage = evt.getParameter(PARAMETER, "EDIT_PAGE");
t.set("EDIT_PAGE", (editPage == null ? "1" : editPage));
HTMLUtils.fillFrameSet( t, LEFT_FRAME_WIDTH, "AC_GROUP_LIST", "AC_GROUP_EDIT" );
t.set("GROUP_ID", new Integer(groupId));
WebManEvent.fillEventsIntoTemplate(evt.getRemoteUser(), t, ACCESS_CONTROL);
evt.finishTemplate( t );
}
/**
entfernt logins aus einer Gruppe
*/
private void removeLogin(Profile profile, TKParams params, String parameter) throws Exception
{
TKVector vec = new TKVector();
if ( params.hasMultiple( PARAMETER, parameter ))
{
vec = params.getVector( PARAMETER, parameter );
}
else if ( params.get( PARAMETER, parameter ) != null )
{
vec.addElement( params.get( PARAMETER, parameter ));
}
Enumeration vecEnum = vec.elements();
while (vecEnum.hasMoreElements())
{
String lId = (String)vecEnum.nextElement();
Login login = LoginFactory.getInstance().getLogin(new Integer(lId));
if (login != null) {
profile.removeChild(login);
ProfileFactory.getInstance().modifyProfile(profile);
}
}
}
/**
entfernt einen Benutzer aus mehreren Gruppen
*/
private void doUser(TKEvent evt) throws Throwable
{
String userId = evt.getParameter( PARAMETER, "USER_ID");
TKParams params = evt.getParams();
if (userId != null && userId.length() > 0) {
Login theUser = null;
theUser = LoginFactory.getInstance().getLogin(new Integer(userId));
if (theUser != null) {
removeLoginFromGroups(theUser, params, "DEL_GROUP_ID");
}
}
TKHTMLTemplate t = evt.getPrepHTMLTemplate( "f_ac_user.tmpl" );
String editPage = evt.getParameter(PARAMETER, "EDIT_PAGE");
t.set("EDIT_PAGE", (editPage == null ? "1" : editPage));
HTMLUtils.fillFrameSet( t, LEFT_FRAME_WIDTH, "AC_USER_LIST", "AC_USER_EDIT" );
t.set("USER_ID", new Integer(userId));
WebManEvent.fillEventsIntoTemplate(evt.getRemoteUser(), t, ACCESS_CONTROL);
evt.finishTemplate( t );
}
/**
entfernt den Benutzer aus verschiedene Gruppen
*/
private void removeLoginFromGroups(Login login, TKParams params, String parameter) throws Exception
{
TKVector vec = new TKVector();
if ( params.hasMultiple( PARAMETER, parameter ))
{
vec = params.getVector( PARAMETER, parameter );
}
else if ( params.get( PARAMETER, parameter ) != null )
{
vec.addElement( params.get( PARAMETER, parameter ));
}
Enumeration vecEnum = vec.elements();
while (vecEnum.hasMoreElements())
{
String lId = (String)vecEnum.nextElement();
Profile profile = ProfileFactory.getInstance().getProfile(new Integer(lId));
if (profile != null) {
profile.removeChild(login);
ProfileFactory.getInstance().modifyProfile(profile);
}
}
}
}
|