--- a/usr/src/java/vpanels/client/org/opensolaris/os/vp/client/swing/LoginPane.java Wed Jan 19 13:14:12 2011 -0500
+++ b/usr/src/java/vpanels/client/org/opensolaris/os/vp/client/swing/LoginPane.java Wed Jan 19 14:32:11 2011 -0500
@@ -44,8 +44,20 @@
// Inner classes
//
- private static abstract class LoginField<C extends Component>
- extends JPanel {
+ private static interface LoginField<T> {
+ T getValue();
+
+ void requestEditFocus();
+
+ void setEditable(boolean editable);
+
+ void setValue(T text);
+
+ void setVisible(boolean visible);
+ }
+
+ private static abstract class DualLoginField<T, C extends Component>
+ extends JPanel implements LoginField<T> {
//
// Instance data
@@ -58,7 +70,7 @@
// Constructors
//
- public LoginField() {
+ public DualLoginField() {
super(new BorderLayout());
setOpaque(false);
@@ -73,6 +85,21 @@
// LoginField methods
//
+ @Override
+ public void requestEditFocus() {
+ field.requestFocusInWindow();
+ }
+
+ @Override
+ public void setEditable(boolean editable) {
+ label.setVisible(!editable);
+ field.setVisible(editable);
+ }
+
+ //
+ // DualLoginField methods
+ //
+
public abstract C createField();
public JLabel getLabel() {
@@ -83,17 +110,8 @@
return field;
}
- public void setEditable(boolean editable) {
- label.setVisible(!editable);
- field.setVisible(editable);
- }
-
- public abstract String getValue();
-
- public abstract void setValue(String text);
-
- public String toDisplayableText(String value) {
- return value;
+ public String toDisplayableText(T value) {
+ return value == null ? null : value.toString();
}
protected void updateLabel() {
@@ -101,12 +119,38 @@
}
}
- private static class LoginTextField extends LoginField<JTextField> {
+ private static class LoginTextField
+ extends DualLoginField<String, JTextField> {
+
//
// LoginField methods
//
@Override
+ public String getValue() {
+ String value = getField().getText();
+ if (value.isEmpty()) {
+ value = null;
+ }
+ return value;
+ }
+
+ @Override
+ public void requestEditFocus() {
+ getField().selectAll();
+ super.requestEditFocus();
+ }
+
+ @Override
+ public void setValue(String text) {
+ getField().setText(text);
+ }
+
+ //
+ // DualLoginField methods
+ //
+
+ @Override
public JTextField createField() {
JTextField field = new JTextField(GUIUtil.getTextFieldWidth());
@@ -120,23 +164,11 @@
return field;
}
-
- @Override
- public String getValue() {
- String value = getField().getText();
- if (value.isEmpty()) {
- value = null;
- }
- return value;
- }
-
- @Override
- public void setValue(String text) {
- getField().setText(text);
- }
}
- private static class LoginComboBox extends LoginField<JComboBox> {
+ private static class LoginComboBox
+ extends DualLoginField<String, JComboBox> {
+
//
// Instance data
//
@@ -157,6 +189,20 @@
//
@Override
+ public String getValue() {
+ return (String)getField().getSelectedItem();
+ }
+
+ @Override
+ public void setValue(String text) {
+ getField().getModel().setSelectedItem(text);
+ }
+
+ //
+ // DualLoginField methods
+ //
+
+ @Override
public JComboBox createField() {
JComboBox field = new JComboBox();
if (!(field.getModel() instanceof DefaultComboBoxModel)) {
@@ -201,16 +247,6 @@
}
@Override
- public String getValue() {
- return (String)getField().getSelectedItem();
- }
-
- @Override
- public void setValue(String text) {
- getField().getModel().setSelectedItem(text);
- }
-
- @Override
public String toDisplayableText(String value) {
return value == null ? nullText : value;
}
@@ -239,10 +275,10 @@
private int nCoreFields;
private JLabel hostLabel;
- private LoginField hostField;
+ private LoginTextField hostField;
private JLabel userLabel;
- private LoginField userField;
+ private LoginTextField userField;
private JLabel roleLabel;
private LoginComboBox roleField;
@@ -289,11 +325,7 @@
final LoginProperty<String> role = request.getRole();
final List<DialogMessage> messages = request.getMessages();
- DialogMessage help = new DialogMessage(Finder.getString(
- "login.message.ack", host.getValue(), user.getValue(),
- role.getValue()));
-
- messages.add(help);
+ addMessage(request, "login.message.ack");
GUIUtil.invokeAndWait(
new Runnable() {
@@ -301,17 +333,14 @@
public void run() {
getMessagePanel().setMessages(messages);
+ clear();
setHostInUI(host, false);
setUserInUI(user, false);
- if (role.getValue() == null) {
- hideRole();
- } else {
+ if (role.getValue() != null) {
setRoleInUI(role, false);
}
- clearAuthFields();
-
getButtonBar().getBackButton().setEnabled(false);
}
});
@@ -335,13 +364,8 @@
final List<DialogMessage> messages = request.getMessages();
if (isFirst) {
- String resource = isUserAuth ? "login.message.auth.user" :
- "login.message.auth.role";
-
- DialogMessage help = new DialogMessage(Finder.getString(
- resource, host.getValue(), user.getValue(), role.getValue()));
-
- messages.add(help);
+ addMessage(request, isUserAuth ? "login.message.auth.user" :
+ "login.message.auth.role");
}
final Map<LoginProperty, JTextComponent> map =
@@ -353,20 +377,17 @@
public void run() {
getMessagePanel().setMessages(messages);
+ clear();
setHostInUI(host, false);
setUserInUI(user, false);
- if (isUserAuth) {
- hideRole();
- } else {
+ if (!isUserAuth) {
setRoleInUI(role, false);
}
getButtonBar().getBackButton().setEnabled(
host.isEditable() || user.isEditable() ||
- role.isEditable());
-
- clearAuthFields();
+ (!isUserAuth && role.isEditable()));
int cols = GUIUtil.getTextFieldWidth();
@@ -439,11 +460,7 @@
final List<DialogMessage> messages = request.getMessages();
if (messages.isEmpty()) {
- DialogMessage help = new DialogMessage(Finder.getString(
- "login.message.fail", host.getValue(), user.getValue(),
- role.getValue()));
-
- messages.add(help);
+ addMessage(request, "login.message.fail");
}
GUIUtil.invokeAndWait(
@@ -452,26 +469,16 @@
public void run() {
getMessagePanel().setMessages(messages);
- if (host.getValue() == null) {
- hideHost();
- hideUser();
- hideRole();
- } else {
+ clear();
+ if (host.getValue() != null) {
setHostInUI(host, false);
- if (user.getValue() == null) {
- hideUser();
- hideRole();
- } else {
+ if (user.getValue() != null) {
setUserInUI(user, false);
- if (role.getValue() == null) {
- hideRole();
- } else {
+ if (role.getValue() != null) {
setRoleInUI(role, false);
}
}
}
-
- clearAuthFields();
}
});
@@ -494,11 +501,7 @@
if (user.isEditable()) {
resource += ".user";
}
-
- DialogMessage help = new DialogMessage(Finder.getString(
- resource, host.getValue(), user.getValue()));
-
- messages.add(help);
+ addMessage(request, resource);
GUIUtil.invokeAndWait(
new Runnable() {
@@ -506,10 +509,9 @@
public void run() {
getMessagePanel().setMessages(messages);
+ clear();
setHostInUI(host, true);
setUserInUI(user, true);
- hideRole();
- clearAuthFields();
getButtonBar().getBackButton().setEnabled(false);
}
@@ -535,11 +537,7 @@
final LoginProperty<String> role = request.getRole();
final List<DialogMessage> messages = request.getMessages();
- DialogMessage help = new DialogMessage(Finder.getString(
- "login.message.role", host.getValue(),
- user.getValue()));
-
- messages.add(help);
+ addMessage(request, "login.message.role");
GUIUtil.invokeAndWait(
new Runnable() {
@@ -556,10 +554,10 @@
model.addElement(r);
}
+ clear();
setHostInUI(host, false);
setUserInUI(user, false);
setRoleInUI(role, true);
- clearAuthFields();
getButtonBar().getBackButton().setEnabled(
host.isEditable() || user.isEditable());
@@ -574,6 +572,13 @@
// Private methods
//
+ private void addMessage(LoginRequest request, String resource) {
+ DialogMessage message = new DialogMessage(Finder.getString(
+ resource, request.getHost().getValue(),
+ request.getUser().getValue(), request.getRole().getValue()));
+ request.getMessages().add(message);
+ }
+
private void awaitClose() {
SettingsButtonBar bar = getButtonBar();
AbstractButton closeButton = bar.getCloseButton();
@@ -612,13 +617,6 @@
}
}
- private void clearAuthFields() {
- // Remove all but the "core" fields (host, user, role)
- while (fieldPanel.getComponentCount() > nCoreFields) {
- fieldPanel.remove(nCoreFields);
- }
- }
-
private void createFieldPanel() {
hostField = new LoginTextField();
hostLabel = new JLabel();
@@ -657,19 +655,22 @@
nCoreFields = fieldPanel.getComponentCount();
}
- private void hideHost() {
+ private void clear() {
+ assert EventQueue.isDispatchThread();
+
hostLabel.setVisible(false);
hostField.setVisible(false);
- }
- private void hideRole() {
roleLabel.setVisible(false);
roleField.setVisible(false);
- }
- private void hideUser() {
userLabel.setVisible(false);
userField.setVisible(false);
+
+ // Remove all but the "core" fields (host, user, role, etc.)
+ while (fieldPanel.getComponentCount() > nCoreFields) {
+ fieldPanel.remove(nCoreFields);
+ }
}
private void setHostInUI(LoginProperty<String> property, boolean allowEdit)
@@ -677,19 +678,25 @@
setInUI(property, hostLabel, hostField, LABEL_HOST, allowEdit);
}
- private void setInProperty(LoginProperty<String> property, LoginField field)
- {
+ private <T> void setInProperty(LoginProperty<T> property,
+ LoginField<T> field) {
+
if (property.isEditable()) {
property.setValue(field.getValue());
}
property.setErrored(false);
}
- private void setInUI(LoginProperty<String> property, JLabel label,
- final LoginField field, String defaultLabel, boolean allowEdit) {
+ private <T> void setInUI(LoginProperty<T> property, JLabel label,
+ final LoginField<T> field, String defaultLabel, boolean allowEdit) {
+
+ assert EventQueue.isDispatchThread();
String labelText = property.getName();
- label.setText(labelText != null ? labelText : defaultLabel);
+ if (labelText == null) {
+ labelText = defaultLabel;
+ }
+ label.setText(labelText);
boolean editable = allowEdit && property.isEditable();
Color foreground = null;
@@ -702,11 +709,7 @@
new Runnable() {
@Override
public void run() {
- Component comp = field.getField();
- if (comp instanceof JTextComponent) {
- ((JTextComponent)comp).selectAll();
- }
- comp.requestFocusInWindow();
+ field.requestEditFocus();
}
});
}