/* userRenameWizard.java A wizard to manage user rename interactions for the userCustom object. Created: 29 January 1998 Version: 1.10 98/08/11 Module By: Jonathan Abbey Applied Research Laboratories, The University of Texas at Austin */ package arlut.csd.ganymede.custom; import java.rmi.*; import java.rmi.server.*; import java.util.*; import arlut.csd.ganymede.*; import arlut.csd.JDialog.JDialogBuff; /*------------------------------------------------------------------------------ class userRenameWizard ------------------------------------------------------------------------------*/ /** * A wizard to handle the wizard interactions required when a user is * renamed. All that this wizard actually does is pop up a dialog box * advising the user about the implications of renaming a user * account, and asking the user for a confirmation that he really * wants to do this. * * @see arlut.csd.ganymede.ReturnVal * @see arlut.csd.ganymede.Ganymediator */ public class userRenameWizard extends GanymediatorWizard { /** * The user-level session context that this wizard is acting in. This * object is used to handle necessary checkpoint/rollback activity by * this wizard, as well as to handle any necessary label lookups. */ GanymedeSession session; /** * Keeps track of the state of the wizard. Each time respond() is called, * state is checked to see what results from the user are expected and * what the appropriate dialogs or actions to perform in turn are.<br> * * state is also used by the userCustom object to make sure that * we have finished our interactions with the user when we tell the * user object to go ahead and remove the group. <br> * * <pre> * Values: * 1 - Wizard has been initialized, initial explanatory dialog * has been generated. * DONE (99) - Wizard has approved the proposed action, and is signalling * the user object code that it is okay to proceed with the * action without further consulting this wizard. * </pre> */ // int state; from superclass.. we don't want to shadow it here /** * The actual user object that this wizard is acting on */ userCustom userObject; /** * The username field in the user object that we may change */ DBField field; /** * The proposed new name for the user */ String newname; /** * The old name for the user */ String oldname; /* -- */ /** * * Constructor * */ /** * * This constructor registers the wizard as an active wizard * on the provided session. * * @param session The GanymedeSession object that this wizard will * use to interact with the Ganymede data store. * @param userObject The user object that this wizard will work with. * @param newname The proposed new name for the user. * */ public userRenameWizard(GanymedeSession session, userCustom userObject, DBField field, String newname, String oldname) throws RemoteException { super(session); // register ourselves this.session = session; this.userObject = userObject; this.field = field; this.newname = newname; this.oldname = oldname; } /** * * This method provides a default response if a user * hits cancel on a wizard dialog. This should be * subclassed if a wizard wants to provide a more * detailed cancel response. * */ public ReturnVal cancel() { return fail("User Rename Cancelled", "OK, good decision.", "Yeah, I guess", null, "ok.gif"); } /** * * The client will call us in this state with a Boolean * param for key "Keep old name as an email alias?" * */ public ReturnVal processDialog1() { ReturnVal retVal = null; /* -- */ System.err.println("userRenameWizard: USER_RENAME state 1 processing return vals from dialog"); Boolean answer = (Boolean) getParam("Keep old name as an email alias?"); // One thing we need to check is whether the new name that they // are wanting is already an alias for them.. StringDBField aliases = (StringDBField) userObject.getField(userSchema.ALIASES); if (aliases != null) { if (aliases.containsElementLocal(newname)) { aliases.deleteElementLocal(newname); } } System.err.println("userRenameWizard: Calling field.setValue()"); state = DONE; // let the userCustom wizardHook know to go // ahead and pass this operation through now // note that this setValue() operation will pass // through userObject.wizardHook(). wizardHook will see that we are // an active userRenameWizard, and are at state DONE, so it // will go ahead and unregister us and let the name change // go through to completion. retVal = field.setValue(newname); if (!ReturnVal.didSucceed(retVal)) { return retVal; } System.err.println("userRenameWizard: Returned from field.setValue()"); // now we need to add the old name to the alias list, possibly. if (answer != null && answer.booleanValue()) { aliases.addElementLocal(oldname); } retVal = ReturnVal.merge(retVal, success("User Rename Performed", "OK, User renamed.", "Thanks", null, "ok.gif")); retVal.addRescanField(userObject.getInvid(), userSchema.HOMEDIR); retVal.addRescanField(userObject.getInvid(), userSchema.ALIASES); retVal.addRescanField(userObject.getInvid(), userSchema.SIGNATURE); retVal.addRescanField(userObject.getInvid(), userSchema.VOLUMES); retVal.addRescanField(userObject.getInvid(), userSchema.EMAILTARGET); System.err.println("Returning confirmation dialog"); return retVal; } /** * * This method starts off the wizard process * */ public ReturnVal getStartDialog() { ReturnVal retVal = null; /* -- */ retVal = continueOn("User Rename Dialog", "Warning.\n\n" + "Renaming a user is a serious operation, with serious potential consequences.\n\n"+ "If you rename this user, the user's directory and mail file will need to be renamed.\n\n"+ "Any scripts or programs that refer to this user's name will need to be changed.", "OK", "Never Mind", "question.gif"); retVal.getDialog().addBoolean("Keep old name as an email alias?"); return retVal; } }