17520 - "Change role..." needs better behavior when no roles
authorDan Labrecque <Dan.Labrecque@oracle.com>
Tue, 14 Dec 2010 14:54:59 -0500
changeset 624 23c2892e582e
parent 623 4f64317532d4
child 625 0ad7f2393529
17520 - "Change role..." needs better behavior when no roles
usr/src/java/vpanels/client/org/opensolaris/os/vp/client/common/RadLoginManager.java
usr/src/java/vpanels/client/org/opensolaris/os/vp/client/common/resources/Resources.properties
usr/src/java/vpanels/client/org/opensolaris/os/vp/client/swing/AppLoginManager.java
usr/src/java/vpanels/client/org/opensolaris/os/vp/client/swing/LoginPane.java
usr/src/java/vpanels/panel/org/opensolaris/os/vp/panel/common/LoginRequest.java
usr/src/java/vpanels/panel/org/opensolaris/os/vp/panel/swing/control/PanelFrameControl.java
--- a/usr/src/java/vpanels/client/org/opensolaris/os/vp/client/common/RadLoginManager.java	Mon Dec 13 20:11:57 2010 -0500
+++ b/usr/src/java/vpanels/client/org/opensolaris/os/vp/client/common/RadLoginManager.java	Tue Dec 14 14:54:59 2010 -0500
@@ -493,6 +493,15 @@
 	throws ActionAbortedException;
 
     /**
+     * Prompts the user to acknowledge lack of roles for user.
+     *
+     * @param	    request
+     *		    the {@link LoginRequest} encapsulating the values and
+     *		    error status of each core {@link LoginProperty}
+     */
+    protected abstract void promptForEnsureRoles(LoginRequest request);
+
+    /**
      * Prompt the user to select a role, subject to the editability and preset
      * value of the role {@link LoginProperty} of the given request.
      *
@@ -909,6 +918,16 @@
 
 	    // Get valid roles for this host/user
 	    List<String> roles = auth.getroles();
+	    if (request.getEnsureRoles() && roles.isEmpty()) {
+		String message = Finder.getString("login.err.role.none",
+		    hostVal, userVal);
+
+		messages.add(new DialogMessage(message,
+		    JOptionPane.ERROR_MESSAGE));
+
+		promptForEnsureRoles(request);
+		throw new ActionFailedException(message);
+	    }
 
 	    String roleVal = role.getValue();
 
--- a/usr/src/java/vpanels/client/org/opensolaris/os/vp/client/common/resources/Resources.properties	Mon Dec 13 20:11:57 2010 -0500
+++ b/usr/src/java/vpanels/client/org/opensolaris/os/vp/client/common/resources/Resources.properties	Tue Dec 14 14:54:59 2010 -0500
@@ -33,6 +33,8 @@
 login.err.user.auth = User "{1}" could not be authenticated.
 login.err.role.invalid = Role "{2}" is not available to user "{1}" on host "{0}".
 login.err.role.auth = Role "{2}" could not be authenticated.
+login.err.role.none = Roles are not available for user "{0}" on host "{1}".
+
 login.err.url.invalid = The information entered resulted in an invalid URL.
 login.err.io = An error occurred when contacting {0}.
 login.err.nocerts = An error occurred when contacting {0}.
--- a/usr/src/java/vpanels/client/org/opensolaris/os/vp/client/swing/AppLoginManager.java	Mon Dec 13 20:11:57 2010 -0500
+++ b/usr/src/java/vpanels/client/org/opensolaris/os/vp/client/swing/AppLoginManager.java	Tue Dec 14 14:54:59 2010 -0500
@@ -133,6 +133,11 @@
     }
 
     @Override
+    protected void promptForEnsureRoles(LoginRequest request) {
+	dialog.getLoginPane().promptForEnsureRoles(request);
+    }
+
+    @Override
     protected void promptForRole(LoginRequest request, List<String> roles)
 	throws ActionAbortedException, ActionRegressedException {
 
--- a/usr/src/java/vpanels/client/org/opensolaris/os/vp/client/swing/LoginPane.java	Mon Dec 13 20:11:57 2010 -0500
+++ b/usr/src/java/vpanels/client/org/opensolaris/os/vp/client/swing/LoginPane.java	Tue Dec 14 14:54:59 2010 -0500
@@ -300,13 +300,13 @@
 		    messages.add(help);
 		    getMessagePanel().setMessages(messages);
 
-		    setHostInUI(host, true);
-		    setUserInUI(user, true);
+		    setHostInUI(host, false);
+		    setUserInUI(user, false);
 
 		    if (role.getValue() == null) {
 			hideRole();
 		    } else {
-			setRoleInUI(role, true);
+			setRoleInUI(role, false);
 		    }
 
 		    clearAuthFields();
@@ -340,9 +340,9 @@
 		    messages.add(help);
 		    getMessagePanel().setMessages(messages);
 
-		    setHostInUI(host, true);
-		    setUserInUI(user, true);
-		    setRoleInUI(role, true);
+		    setHostInUI(host, false);
+		    setUserInUI(user, false);
+		    setRoleInUI(role, false);
 
 		    clearAuthFields();
 		}
@@ -396,6 +396,30 @@
 	setInProperty(user, userField);
     }
 
+    public void promptForEnsureRoles(final LoginRequest request) {
+	assert !EventQueue.isDispatchThread();
+
+	final StringLoginProperty host = request.getHost();
+	final StringLoginProperty user = request.getUser();
+
+	GUIUtil.invokeAndWait(
+	    new Runnable() {
+		@Override
+		public void run() {
+		    List<DialogMessage> messages = request.getMessages();
+		    getMessagePanel().setMessages(messages);
+
+		    setHostInUI(host, false);
+		    setUserInUI(user, false);
+		    hideRole();
+
+		    clearAuthFields();
+		}
+	});
+
+	awaitClose();
+    }
+
     public void promptForRole(final LoginRequest request,
         final List<String> roles) throws ActionAbortedException,
         ActionRegressedException {
--- a/usr/src/java/vpanels/panel/org/opensolaris/os/vp/panel/common/LoginRequest.java	Mon Dec 13 20:11:57 2010 -0500
+++ b/usr/src/java/vpanels/panel/org/opensolaris/os/vp/panel/common/LoginRequest.java	Tue Dec 14 14:54:59 2010 -0500
@@ -37,6 +37,7 @@
     private StringLoginProperty host;
     private StringLoginProperty user;
     private StringLoginProperty role;
+    private boolean ensureRoles;
 
     //
     // Constructors
@@ -71,6 +72,34 @@
 	}
     }
 
+    /**
+     * Constructs a {@code LoginRequest}.  Each editable
+     * {@code StringLoginProperty} may be changed by the user during the login
+     * process.
+     *
+     * @param	    host
+     *		    the host property
+     *
+     * @param	    user
+     *		    the user property
+     *
+     * @param	    role
+     *		    the role property
+     *
+     * @param	    ensureRoles
+     *		    Ensure there are valid roles for this host/user
+     *
+     * @param	    messages
+     *		    optional messages to instruct the user
+     */
+    public LoginRequest(StringLoginProperty host, StringLoginProperty user,
+	StringLoginProperty role, boolean ensureRoles,
+            DialogMessage... messages) {
+
+        this(host, user, role, messages);
+        this.ensureRoles = ensureRoles;
+    }
+
     //
     // LoginRequest methods
     //
@@ -90,4 +119,8 @@
     public StringLoginProperty getRole() {
 	return role;
     }
+
+    public boolean getEnsureRoles() {
+	return ensureRoles;
+    }
 }
--- a/usr/src/java/vpanels/panel/org/opensolaris/os/vp/panel/swing/control/PanelFrameControl.java	Mon Dec 13 20:11:57 2010 -0500
+++ b/usr/src/java/vpanels/panel/org/opensolaris/os/vp/panel/swing/control/PanelFrameControl.java	Tue Dec 14 14:54:59 2010 -0500
@@ -512,7 +512,7 @@
 	    new StringLoginProperty(info.getUser(), false);
 	StringLoginProperty role =
 	    new StringLoginProperty(info.getRole(), true);
-	return new LoginRequest(host, user, role);
+	return new LoginRequest(host, user, role, true);
     }
 
     // Used when no properties are editable.