usr/src/java/vpanels/app/usermgr/com/oracle/solaris/vp/panels/usermgr/client/swing/UserMgrBasicControl.java
changeset 847 a8e124b894b8
parent 811 c65c58b7a1f0
--- a/usr/src/java/vpanels/app/usermgr/com/oracle/solaris/vp/panels/usermgr/client/swing/UserMgrBasicControl.java	Thu Apr 26 00:14:30 2012 -0400
+++ b/usr/src/java/vpanels/app/usermgr/com/oracle/solaris/vp/panels/usermgr/client/swing/UserMgrBasicControl.java	Fri Apr 27 00:52:26 2012 -0400
@@ -25,9 +25,13 @@
 
 package com.oracle.solaris.vp.panels.usermgr.client.swing;
 
+
+import java.util.List;
+import java.util.Map;
+import com.oracle.solaris.rad.usermgr.*;
 import com.oracle.solaris.vp.panel.common.action.*;
-import com.oracle.solaris.vp.panel.common.control.Control;
-import com.oracle.solaris.vp.panel.swing.control.SettingsControl;
+import com.oracle.solaris.vp.panel.common.control.*;
+import com.oracle.solaris.vp.panel.swing.control.*;
 import com.oracle.solaris.vp.util.misc.finder.Finder;
 
 public class UserMgrBasicControl
@@ -36,21 +40,19 @@
     //
     // Static data
     //
-    public static final String ID = "basic";
-    public static final String NAME = Finder.getString("usermgr.basic.name");
+    public static final String ID = "usermgr";
+    public static final String PARAM_USER = "user";
+    private UserMgrPanelDescriptor descriptor;
 
     //
     // Instance data
     //
 
-    private UserMgrControl parent;
+    private UserManagedObject userMO;
 
-    //
-    // Constructor
-    //
-    public UserMgrBasicControl(UserMgrControl parent) {
-        super(ID, NAME, parent.getPanelDescriptor());
-	this.parent = parent;
+    public UserMgrBasicControl(UserMgrPanelDescriptor descriptor) {
+        super(ID, PARAM_USER, descriptor);
+	this.descriptor = descriptor;
     }
 
     //
@@ -58,11 +60,17 @@
     //
 
     @Override
+    public boolean isBrowsable() {
+	// This control requires init parameters
+	return false;
+    }
+
+    @Override
     protected boolean isChanged() {
-	// Save unconditionally for now
 	return true;
     }
 
+
     @Override
     protected UnsavedChangesAction getUnsavedChangesAction() {
 	// Always save changes on the client
@@ -74,32 +82,41 @@
         ActionFailedException, ActionUnauthorizedException {
 
 	UserMgrBasicPanel panel = getComponent();
-	UserManagedObject umo = parent.getUserManagedObject();
+	UserManagedObject umo = getUserManagedObject();
 
 	setPropertyChangeIgnore(true);
-	try {
-	    // Set the values from the panel
-	    if (panel.getUserDescProperty().isChanged()) {
-		String userdesc = panel.getUserDescProperty().getValue();
-		UserMgrUtils.validateUserDesc(userdesc);
-		umo.getUserDescProperty().setValue(userdesc);
-	    }
+
+	// Set changed values from the panel
+	if (panel.getGroupProperty().isChanged()) {
+	    umo.getGroupIdProperty().setValue(toGid(
+		panel.getGroupProperty().getValue()));
+	}
+
+	if (panel.getShellProperty().isChanged()) {
+	    umo.getShellProperty().setValue(
+		panel.getShellProperty().getValue());
+	}
 
-	    if (panel.getIsAdminProperty().isChanged()) {
-		boolean admin = panel.getIsAdminProperty().getValue();
-		umo.getIsAdminProperty().setValue(admin);
-	    }
+	// Set the values from the panel
+	if (panel.getDescProperty().isChanged()) {
+	    String userdesc = panel.getDescProperty().getValue();
+	    UserMgrUtils.validateUserDesc(userdesc);
+	    umo.getUserDescProperty().setValue(userdesc);
+	 }
 
-	    if (panel.getPassProperty().isChanged() ||
-		panel.getPassConfirmProperty().isChanged()) {
-		char[] pass1 = panel.getPassProperty().getValue();
-		char[] pass2 = panel.getPassConfirmProperty().getValue();
-		UserMgrUtils.validatePassword(umo.isNewUser(), pass1, pass2);
-		umo.getPassProperty().setValue(pass1);
-	    }
-	} finally {
-	    setPropertyChangeIgnore(false);
-	}
+	 if (panel.getHomeProperty().isChanged()) {
+	    String homeDir = panel.getHomeProperty().getValue();
+	    UserMgrUtils.validateHomeDir(homeDir);
+	    umo.getHomeDirProperty().setValue(homeDir);
+	 }
+
+	 if (panel.getPassProperty().isChanged() ||
+	    panel.getPassConfirmProperty().isChanged()) {
+	    char[] pass1 = panel.getPassProperty().getValue();
+	    char[] pass2 = panel.getPassConfirmProperty().getValue();
+	    UserMgrUtils.validatePassword(umo.isNewUser(), pass1, pass2);
+	    umo.getPassProperty().setValue(pass1);
+	 }
     }
 
     //
@@ -108,16 +125,72 @@
 
     @Override
     protected UserMgrBasicPanel createComponent() {
-        UserMgrBasicPanel panel = new UserMgrBasicPanel();
+        UserMgrBasicPanel panel = new UserMgrBasicPanel(descriptor);
         return panel;
     }
 
     @Override
     protected void initComponent() {
 	UserMgrBasicPanel panel = getComponent();
-	UserManagedObject umo = parent.getUserManagedObject();
+	UserManagedObject umo = getUserManagedObject();
 
 	// Initialize the panel
-	panel.init(umo);
+	panel.init(getPanelDescriptor(), umo);
+    }
+
+    private long toGid(String gName) {
+	List<Group> groups = getPanelDescriptor().getGroups();
+ 	for (Group g : groups) {
+	    if (gName.equals(g.getGroupName()))
+ 		return (g.getGroupID());
+ 	}
+ 	return 1L;
+    }
+
+    @Override
+    public void start(Navigator navigator, Map<String, String> parameters)
+	throws NavigationAbortedException, InvalidParameterException,
+	NavigationFailedException {
+
+	String param = getParameter(parameters, PARAM_USER);
+  	UserManagedObject umo =
+	    getPanelDescriptor().getUserManagedObject(param);
+	if (umo == null) {
+	    throw new InvalidParameterException(getId(), PARAM_USER, param);
+  	}
+
+  	setUserManagedObject(umo);
+
+ 	super.start(navigator, parameters);
+    }
+
+    @Override
+    public void stop(boolean isCancel) throws NavigationAbortedException {
+ 	super.stop(isCancel);
+ 	setUserManagedObject(null);
+    }
+
+    //
+    // UserMgrControl methods
+    //
+
+    public UserManagedObject getUserManagedObject() {
+	return userMO;
+    }
+
+    //
+    // Private methods
+    //
+
+    private void setUserManagedObject(UserManagedObject umo) {
+	this.userMO = umo;
+	setName(umo == null ? null : umo.getName());
+    }
+
+    /**
+     * Clear the advanced settings change state.
+     */
+    public void clearChanges() {
+        getComponent().clearChanges();
     }
 }