Complete multiuser settings panel additions for message service

This commit is contained in:
Richard Cordovano 2015-04-15 12:08:25 -04:00
parent 7688a0791e
commit d6d74a53de
5 changed files with 49 additions and 116 deletions

View File

@ -142,24 +142,20 @@ public final class UserPreferences {
public static void setMessageServiceConnectionInfo(MessageServiceConnectionInfo info) {
preferences.put(MESSAGE_SERVICE_USER, info.getUserName());
preferences.put(MESSAGE_SERVICE_PASSWORD, info.getPassword());
preferences.put(MESSAGE_SERVICE_HOST, info.getURI().getHost());
preferences.put(MESSAGE_SERVICE_PORT, Integer.toString(info.getURI().getPort()));
preferences.put(MESSAGE_SERVICE_HOST, info.getHost());
preferences.put(MESSAGE_SERVICE_PORT, info.getPort());
}
/**
* Reads persisted message service connection info.
*
* @return An object encapsulating the message service info.
* @throws NumberFormatException if the persisted port is not a valid
* integer.
* @throws URISyntaxException if the persisted connection info is not for a
* valid TCP URI.
*/
public static MessageServiceConnectionInfo getMessageServiceConnectionInfo() throws NumberFormatException, URISyntaxException {
public static MessageServiceConnectionInfo getMessageServiceConnectionInfo() {
return new MessageServiceConnectionInfo(preferences.get(MESSAGE_SERVICE_USER, ""),
preferences.get(MESSAGE_SERVICE_PASSWORD, ""),
preferences.get(MESSAGE_SERVICE_HOST, ""),
Integer.parseInt(preferences.get(MESSAGE_SERVICE_PORT, "")));
preferences.get(MESSAGE_SERVICE_PORT, ""));
}
}

View File

@ -26,10 +26,11 @@ import java.net.URISyntaxException;
*/
public final class MessageServiceConnectionInfo {
private static final String MESSAGE_SERVICE_URI = "tcp://%s:%d";
private static final String MESSAGE_SERVICE_URI = "tcp://%s:%s";
private final String userName;
private final String password;
private final URI uri;
private final String host;
private final String port;
/**
* Constructs an object containing the connection info for a Java Message
@ -40,12 +41,12 @@ public final class MessageServiceConnectionInfo {
* @param host The host to use for a message service connection. May be a
* host name or an IP address.
* @param port The port number to use for a message service connection.
* @throws URISyntaxException if the host and port are not a valid TCP URI.
*/
public MessageServiceConnectionInfo(String userName, String password, String host, int port) throws URISyntaxException {
public MessageServiceConnectionInfo(String userName, String password, String host, String port) {
this.userName = userName;
this.password = password;
this.uri = new URI(String.format(MESSAGE_SERVICE_URI, host, port));
this.host = host;
this.port = port;
}
/**
@ -66,13 +67,34 @@ public final class MessageServiceConnectionInfo {
return password;
}
/**
* Gets the host to use for a message service connection. May be a host name
* or an IP address.
*
* @return The host as a string.
*/
public String getHost() {
return host;
}
/**
* Gets the port number to use for a message service connection.
*
* @return The port as a string.
*/
public String getPort() {
return port;
}
/**
* Gets the TCP URI to use for a message service connection.
*
* @return The URI.
* @throws URISyntaxException if the connection info is not for a valid TCP
* URI.
*/
public URI getURI() {
return uri;
URI getURI() throws URISyntaxException {
return new URI(String.format(MESSAGE_SERVICE_URI, host, port));
}
}

View File

@ -166,14 +166,11 @@ MultiUserSettingsPanel.validationErrMsg.incomplete=Fill in all values
MultiUserSettingsPanel.validationErrMsg.invalidDatabasePort=Invalid database port number
MultiUserSettingsPanel.validationErrMsg.invalidMessageServicePort=Invalid message service port number
MultiUserSettingsPanel.validationErrMsg.invalidMessgeServiceURI=Message service host and/or port not valid
MultiUserSettingsPanel.validationErrMsg.invalidMessgeServicePassword=Message service password entries do not match
MultiUserSettingsPanel.msgHostTextField.text=
MultiUserSettingsPanel.msgHostTextField.toolTipText=Hostname or IP Address
MultiUserSettingsPanel.msgUserNameTextField.toolTipText=Hostname or IP Address
MultiUserSettingsPanel.msgUserNameTextField.text=
MultiUserSettingsPanel.msgPasswordField.toolTipText=Password
MultiUserSettingsPanel.msgPasswordField.text=
MultiUserSettingsPanel.msgRetypePasswordField.toolTipText=Retype Password
MultiUserSettingsPanel.msgRetypePasswordField.text=
MultiUserSettingsPanel.msgPortTextField.toolTipText=Hostname or IP Address
MultiUserSettingsPanel.msgPortTextField.text=

View File

@ -258,7 +258,6 @@
<Component id="msgUserNameTextField" alignment="1" max="32767" attributes="0"/>
<Component id="msgPortTextField" alignment="1" max="32767" attributes="0"/>
<Component id="msgPasswordField" alignment="0" max="32767" attributes="0"/>
<Component id="msgRetypePasswordField" alignment="0" max="32767" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
@ -278,8 +277,6 @@
<EmptySpace max="-2" attributes="0"/>
<Component id="msgPasswordField" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="msgRetypePasswordField" min="-2" max="-2" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
@ -347,19 +344,6 @@
</Property>
</Properties>
</Component>
<Component class="javax.swing.JPasswordField" name="msgRetypePasswordField">
<Properties>
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
<Font name="Tahoma" size="12" style="0"/>
</Property>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="MultiUserSettingsPanel.msgRetypePasswordField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
<Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="MultiUserSettingsPanel.msgRetypePasswordField.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
</Component>
</SubComponents>
</Container>
<Component class="javax.swing.JCheckBox" name="cbEnableMultiUser">

View File

@ -26,12 +26,10 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel {
private static final String PORT_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbPortNumber.toolTipText");
private static final String USER_NAME_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbUsername.toolTipText");
private static final String PASSWORD_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbPassword.toolTipText");
private static final String RETYPE_PASSWORD_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.msgRetypePasswordField.toolTipText");
private static final String INCOMPLETE_SETTINGS_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.incomplete");
private static final String INVALID_DB_PORT_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.invalidDatabasePort");
private static final String INVALID_MESSAGE_SERVICE_PORT_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.invalidMessageServicePort");
private static final String INVALID_MESSAGE_SERVICE_URI_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.invalidMessgeServiceURI");
private static final String INVALID_MESSAGE_PASSWORD_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.invalidMessgeServicePassword");
private final MultiUserSettingsPanelController controller;
private final Collection<JTextField> textBoxes = new ArrayList<>();
private final TextBoxChangedListener textBoxChangedListener;
@ -56,7 +54,6 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel {
textPrompts.add(new TextPrompt(PORT_PROMPT, msgPortTextField));
textPrompts.add(new TextPrompt(USER_NAME_PROMPT, msgUserNameTextField));
textPrompts.add(new TextPrompt(PASSWORD_PROMPT, msgPasswordField));
textPrompts.add(new TextPrompt(RETYPE_PASSWORD_PROMPT, msgRetypePasswordField));
configureTextPrompts(textPrompts);
/// Register for notifications when the text boxes get updated.
@ -69,7 +66,6 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel {
textBoxes.add(msgPortTextField);
textBoxes.add(msgUserNameTextField);
textBoxes.add(msgPasswordField);
textBoxes.add(msgRetypePasswordField);
addDocumentListeners(textBoxes, textBoxChangedListener);
enableMultiUserComponents(textBoxes, cbEnableMultiUser.isSelected());
@ -126,7 +122,6 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel {
msgUserNameTextField = new javax.swing.JTextField();
msgPortTextField = new javax.swing.JTextField();
msgPasswordField = new javax.swing.JPasswordField();
msgRetypePasswordField = new javax.swing.JPasswordField();
cbEnableMultiUser = new javax.swing.JCheckBox();
pnDatabaseSettings.setBorder(javax.swing.BorderFactory.createEtchedBorder());
@ -231,10 +226,6 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel {
msgPasswordField.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.msgPasswordField.text")); // NOI18N
msgPasswordField.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.msgPasswordField.toolTipText")); // NOI18N
msgRetypePasswordField.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
msgRetypePasswordField.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.msgRetypePasswordField.text")); // NOI18N
msgRetypePasswordField.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.msgRetypePasswordField.toolTipText")); // NOI18N
javax.swing.GroupLayout pnMessagingSettingsLayout = new javax.swing.GroupLayout(pnMessagingSettings);
pnMessagingSettings.setLayout(pnMessagingSettingsLayout);
pnMessagingSettingsLayout.setHorizontalGroup(
@ -248,8 +239,7 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel {
.addComponent(msgHostTextField, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(msgUserNameTextField, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(msgPortTextField, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(msgPasswordField)
.addComponent(msgRetypePasswordField))
.addComponent(msgPasswordField))
.addContainerGap())
);
pnMessagingSettingsLayout.setVerticalGroup(
@ -265,9 +255,7 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel {
.addComponent(msgUserNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(msgPasswordField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(msgRetypePasswordField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
org.openide.awt.Mnemonics.setLocalizedText(cbEnableMultiUser, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.cbEnableMultiUser.text")); // NOI18N
@ -347,18 +335,11 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel {
tbUsername.setText(dbInfo.getUserName());
tbPassword.setText(dbInfo.getPassword());
MessageServiceConnectionInfo msgServiceInfo = null;
try {
msgServiceInfo = UserPreferences.getMessageServiceConnectionInfo();
msgHostTextField.setText(msgServiceInfo.getURI().getHost());
msgPortTextField.setText(Integer.toString(msgServiceInfo.getURI().getPort()));
msgUserNameTextField.setText(msgServiceInfo.getUserName());
msgPasswordField.setText(msgServiceInfo.getPassword());
msgRetypePasswordField.setText(msgServiceInfo.getPassword());
} catch (NumberFormatException | URISyntaxException ex) {
resetMessageServiceTextFields();
logger.log(Level.SEVERE, "Invalid message service settings read from user preferences, clearing settings components", ex);
}
MessageServiceConnectionInfo msgServiceInfo = UserPreferences.getMessageServiceConnectionInfo();
msgHostTextField.setText(msgServiceInfo.getHost());
msgPortTextField.setText(msgServiceInfo.getPort());
msgUserNameTextField.setText(msgServiceInfo.getUserName());
msgPasswordField.setText(msgServiceInfo.getPassword());
if (dbInfo.getDbType() == DbType.UNKNOWN) {
cbEnableMultiUser.setSelected(false);
@ -367,18 +348,6 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel {
}
}
/**
* Sets the text of the message service settings text fields to the empty
* string.
*/
private void resetMessageServiceTextFields() {
msgHostTextField.setText("");
msgPortTextField.setText("");
msgUserNameTextField.setText("");
msgPasswordField.setText("");
msgRetypePasswordField.setText("");
}
/**
* Tests whether or not values have been entered in all of the message
* service settings text fields.
@ -389,8 +358,7 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel {
return !msgHostTextField.getText().isEmpty()
&& !msgPortTextField.getText().isEmpty()
&& !msgUserNameTextField.getText().isEmpty()
&& msgPasswordField.getPassword().length != 0
&& msgRetypePasswordField.getPassword().length != 0;
&& msgPasswordField.getPassword().length != 0;
}
void store() {
@ -410,22 +378,12 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel {
UserPreferences.setDatabaseConnectionInfo(info);
/**
* Add the message service settings to the persisted user preferences.
* It is expected that this code is only executed after validation; if
* the settings are not valid the exception is caught and the invalid
* settings are discarded.
*/
try {
MessageServiceConnectionInfo msgServiceInfo = new MessageServiceConnectionInfo(
msgUserNameTextField.getText(),
new String(msgPasswordField.getPassword()),
msgHostTextField.getText(),
Integer.parseInt(msgPortTextField.getText()));
UserPreferences.setMessageServiceConnectionInfo(msgServiceInfo);
} catch (NumberFormatException | URISyntaxException ex) {
logger.log(Level.SEVERE, "Attempt to store invalid message service settings", ex);
}
MessageServiceConnectionInfo msgServiceInfo = new MessageServiceConnectionInfo(
msgUserNameTextField.getText(),
new String(msgPasswordField.getPassword()),
msgHostTextField.getText(),
msgPortTextField.getText());
UserPreferences.setMessageServiceConnectionInfo(msgServiceInfo);
}
/**
@ -481,34 +439,11 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel {
* @return True or false.
*/
boolean messageServiceSettingsAreValid() {
if (!messageServiceFieldsArePopulated()) {
return false;
}
if (!portNumberIsValid(msgPortTextField.getText())) {
lbOops.setText(INVALID_MESSAGE_SERVICE_PORT_MSG);
return false;
}
String password = new String(msgPasswordField.getPassword());
String retypedPassword = new String(msgRetypePasswordField.getPassword());
if (!password.contentEquals(retypedPassword)) {
lbOops.setText(INVALID_MESSAGE_PASSWORD_MSG);
return false;
}
MessageServiceConnectionInfo msgServiceInfo;
try {
msgServiceInfo = new MessageServiceConnectionInfo(
msgUserNameTextField.getText(),
new String(msgPasswordField.getPassword()),
msgHostTextField.getText(),
Integer.parseInt(msgPortTextField.getText()));
} catch (URISyntaxException detailsNotImportant) {
lbOops.setText(INVALID_MESSAGE_SERVICE_URI_MSG);
return false;
}
return true;
}
@ -540,7 +475,6 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel {
private javax.swing.JTextField msgHostTextField;
private javax.swing.JPasswordField msgPasswordField;
private javax.swing.JTextField msgPortTextField;
private javax.swing.JPasswordField msgRetypePasswordField;
private javax.swing.JTextField msgUserNameTextField;
private javax.swing.JPanel pnDatabaseSettings;
private javax.swing.JPanel pnMessagingSettings;