--- 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.