/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.jmeter.protocol.smtp.sampler.gui;
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import org.apache.jmeter.config.Argument;
import org.apache.jmeter.gui.util.HorizontalPanel;
import org.apache.jmeter.gui.util.VerticalPanel;
import org.apache.jmeter.protocol.smtp.sampler.SmtpSampler;
import org.apache.jmeter.testelement.property.CollectionProperty;
import org.apache.jmeter.util.JMeterUtils;
/**
* Class to build gui-components for SMTP-sampler. Getter-methods serve the
* input-data to the sampler-object, which provides them to the
* SendMailCommand-object.
*/
public class SmtpPanel extends JPanel {
private static final long serialVersionUID = 1L;
// local vars
private JTextField tfMailFrom;
private JTextField tfMailReplyTo;
private JButton browseButton;
private JButton emlBrowseButton;
private JCheckBox cbUseAuth;
private JTextField tfMailServer;
private JTextField tfMailServerPort;
private JTextField tfMailServerTimeout;
private JTextField tfMailServerConnectionTimeout;
private JTextField tfMailTo;
private JTextField tfMailToCC;
private JTextField tfMailToBCC;
private JTextField tfAttachment;
private JTextField tfEmlMessage;
private JTextArea taMessage;
private JCheckBox cbPlainBody;
private JLabel jlAddressFrom;
private JLabel jlAddressReplyTo;
private JLabel jlAddressTo;
private JLabel jlAddressToCC;
private JLabel jlAddressToBCC;
private JLabel jlMailServerPort;
private JLabel jlMailServerTimeout;
private JLabel jlMailServerConnectionTimeout;
private JLabel jlMailServer;
private JLabel jlAttachFile;
private JLabel jlDutPortStandard;
private JLabel jlPassword;
private JLabel jlSubject;
private JLabel jlUsername;
private JLabel jlMessage;
private JFileChooser attachmentFileChooser;
private JFileChooser emlFileChooser;
private JTextField tfAuthPassword;
private JTextField tfAuthUsername;
private JTextField tfSubject;
private JCheckBox cbSuppressSubject;
private JCheckBox cbIncludeTimestamp;
private JCheckBox cbMessageSizeStats;
private JCheckBox cbEnableDebug;
private JCheckBox cbUseEmlMessage;
private JPanel headerFieldsPanel;
private JButton addHeaderFieldButton;
private JLabel headerFieldName;
private JLabel headerFieldValue;
private Map<JTextField, JTextField> headerFields = new HashMap<>();
private Map<JButton,JTextField> removeButtons = new HashMap<>();
private int headerGridY = 0;
private SecuritySettingsPanel securitySettingsPanel;
/**
* Creates new form SmtpPanel, standard constructer. Calls
* initComponents();.
*/
public SmtpPanel() {
initComponents();
}
/**
* Returns sender-address for e-mail from textfield
*
* @return Sender
*/
public String getMailFrom() {
return tfMailFrom.getText();
}
/**
* Returns receiver in field "to" from textfield
*
* @return Receiver "to"
*/
public String getReceiverTo() {
return tfMailTo.getText();
}
/**
* Returns receiver in field "cc" from textfield
*
* @return Receiver "cc"
*/
public String getReceiverCC() {
return tfMailToCC.getText();
}
/**
* Returns receiver in field "bcc" from textfield
*
* @return Receiver "bcc"
*/
public String getReceiverBCC() {
return tfMailToBCC.getText();
}
/**
* Returns message body, i.e. main-mime-part of message (from textfield)
*
* @return Message body
*/
public String getBody() {
return taMessage.getText();
}
/**
* Sets message body, i.e. main-mime-part of message in textfield
*
* @param messageBodyText
* Message body
*/
public void setBody(String messageBodyText) {
taMessage.setText(messageBodyText);
}
/**
* Sets sender-address of e-mail in textfield
*
* @param mailFrom
* Sender
*/
public void setMailFrom(String mailFrom) {
tfMailFrom.setText(mailFrom);
}
/**
* Sets receiver in textfield "to"
*
* @param mailTo
* Receiver "to"
*/
public void setReceiverTo(String mailTo) {
tfMailTo.setText(mailTo);
}
/**
* Sets receiver in textfield "cc"
*
* @param mailToCC
* Receiver "cc"
*/
public void setReceiverCC(String mailToCC) {
tfMailToCC.setText(mailToCC);
}
/**
* Sets receiver in textfield "bcc"
*
* @param mailToBCC
* Receiver "bcc"
*/
public void setReceiverBCC(String mailToBCC) {
tfMailToBCC.setText(mailToBCC);
}
/**
* Returns path of file(s) to be attached in e-mail from textfield
*
* @return File to attach
*/
public String getAttachments() {
return tfAttachment.getText();
}
/**
* Sets path of file to be attached in e-mail in textfield
*
* @param attachments
* File to attach
*/
public void setAttachments(String attachments) {
tfAttachment.setText(attachments);
}
/**
* Returns port of mail-server (standard 25 for SMTP/SMTP with StartTLS, 465
* for SSL) from textfield
*
* @return Mail-server port
*/
public String getPort() {
return tfMailServerPort.getText();
}
/**
* Sets port of mail-server
*
* @param port
* Mail-server port
*/
public void setPort(String port) {
tfMailServerPort.setText(port);
}
/**
* Returns mail-server to be used to send message (from textfield)
*
* @return FQDN or IP of mail-server
*/
public String getServer() {
return tfMailServer.getText();
}
/**
* Sets mail-server to be used to send message in textfield
*
* @param server
* FQDN or IP of mail-server
*/
public void setServer(String server) {
tfMailServer.setText(server);
}
/**
* Returns timeout for SMTP connection from textfield
*
* @return Smtp timeout
*/
public String getTimeout() {
return tfMailServerTimeout.getText();
}
/**
* Sets timeout (ms) for SMTP connection
*
* @param timeout
* SMTP Timeout (ms)
*/
public void setTimeout(String timeout) {
tfMailServerTimeout.setText(timeout);
}
/**
* Returns connection timeout for SMTP connection from textfield
*
* @return SMTP connection timeout
*/
public String getConnectionTimeout() {
return tfMailServerConnectionTimeout.getText();
}
/**
* Sets connection timeout (ms) for SMTP connection
*
* @param connectionTimeout
* SMTP Connection Timeout (ms)
*/
public void setConnectionTimeout(String connectionTimeout) {
tfMailServerConnectionTimeout.setText(connectionTimeout);
}
/**
* Returns subject of the e-mail from textfield
*
* @return Subject of e-mail
*/
public String getSubject() {
return tfSubject.getText();
}
/**
* Sets subject of the e-mail in textfield
*
* @param subject
* Subject of e-mail
*/
public void setSubject(String subject) {
tfSubject.setText(subject);
}
/**
* Returns true if subject header should be suppressed
*
* @return true if subject header should be suppressed
*/
public boolean isSuppressSubject() {
return cbSuppressSubject.isSelected();
}
/**
* Sets the property that defines if the subject header should be suppressed
*
* @param emptySubject flag whether subject header should be suppressed
*
*/
public void setSuppressSubject(boolean emptySubject) {
cbSuppressSubject.setSelected(emptySubject);
}
/**
* Returns true if message body should be plain (i.e. not multipart/mixed)
*
* @return true if using plain message body (i.e. not multipart/mixed)
*/
public boolean isPlainBody() {
return cbPlainBody.isSelected();
}
/**
* Sets the property that defines if the body should be plain (i.e. not multipart/mixed)
*
* @param plainBody whether to use a plain body (i.e. not multipart/mixed)
*/
public void setPlainBody(boolean plainBody) {
cbPlainBody.setSelected(plainBody);
}
/**
* Returns if mail-server needs authentication (checkbox)
*
* @return true if authentication is used
*/
public boolean isUseAuth() {
return cbUseAuth.isSelected();
}
/**
* Set whether mail server needs auth.
*
* @param selected flag whether mail server needs auth
*/
public void setUseAuth(boolean selected){
cbUseAuth.setSelected(selected);
tfAuthPassword.setEditable(selected); // ensure correctly set on initial display
tfAuthUsername.setEditable(selected); // ensure correctly set on initial display
}
public boolean isEnableDebug() {
return cbEnableDebug.isSelected();
}
public void setEnableDebug(boolean selected){
cbEnableDebug.setSelected(selected);
}
/**
* Returns if an .eml-message is sent instead of the content of message-text
* area
*
* @return true if .eml is sent, false if text area content is sent in
* e-mail
*/
public boolean isUseEmlMessage() {
return cbUseEmlMessage.isSelected();
}
/**
* Set the use of an .eml-message instead of the content of message-text
* area
*
* @param useEmlMessage
* Use eml message
*/
public void setUseEmlMessage(boolean useEmlMessage) {
cbUseEmlMessage.setSelected(useEmlMessage);
}
/**
* Returns path to eml message to be sent
*
* @return path to eml message to be sent
*/
public String getEmlMessage() {
return tfEmlMessage.getText();
}
/**
* Set path to eml message to be sent
*
* @param emlMessage
* path to eml message to be sent
*/
public void setEmlMessage(String emlMessage) {
tfEmlMessage.setText(emlMessage);
}
/**
* Returns if current timestamp is included in the subject (checkbox)
*
* @return true if current timestamp is included in subject
*/
public boolean isIncludeTimestamp() {
return cbIncludeTimestamp.isSelected();
}
/**
* Set timestamp to be included in the message-subject (checkbox)
*
* @param includeTimestamp
* Should timestamp be included in subject?
*/
public void setIncludeTimestamp(boolean includeTimestamp) {
cbIncludeTimestamp.setSelected(includeTimestamp);
}
/**
* Returns if message size statistics are processed. Output of processing
* will be included in sample result. (checkbox)
*
* @return True if message size will be calculated
*/
public boolean isMessageSizeStatistics() {
return cbMessageSizeStats.isSelected();
}
/**
* Set message size to be calculated and included in sample result
* (checkbox)
*
* @param val
* Schould message size be calculated?
*/
public void setMessageSizeStatistic(boolean val) {
cbMessageSizeStats.setSelected(val);
}
public String getPassword() {
return tfAuthPassword.getText();
}
public void setPassword(String authPassword) {
tfAuthPassword.setText(authPassword);
}
public String getUsername() {
return tfAuthUsername.getText();
}
public void setUsername(String username) {
tfAuthUsername.setText(username);
}
public CollectionProperty getHeaderFields() {
CollectionProperty result = new CollectionProperty();
result.setName(SmtpSampler.HEADER_FIELDS);
for (JTextField headerName : headerFields.keySet()) {
String name = headerName.getText();
String value = headerFields.get(headerName).getText();
Argument argument = new Argument(name, value);
result.addItem(argument);
}
return result;
}
public void setHeaderFields(CollectionProperty fields) {
clearHeaderFields();
for (int i = 0; i < fields.size(); i++) {
Argument argument = (Argument) fields.get(i).getObjectValue();
String name = argument.getName();
JButton removeButton = addHeaderActionPerformed(null);
JTextField nameTF = removeButtons.get(removeButton);
nameTF.setText(name);
JTextField valueTF = headerFields.get(nameTF);
valueTF.setText(argument.getValue());
}
validate();
}
public String getMailReplyTo() {
return tfMailReplyTo.getText();
}
public void setMailReplyTo(String replyTo) {
tfMailReplyTo.setText(replyTo);
}
/**
* Main method of class, builds all gui-components for SMTP-sampler.
*/
private void initComponents() {
jlAddressReplyTo = new JLabel(JMeterUtils.getResString("smtp_replyto")); // $NON-NLS-1$
jlAddressFrom = new JLabel(JMeterUtils.getResString("smtp_from")); // $NON-NLS-1$
jlAddressTo = new JLabel(JMeterUtils.getResString("smtp_to")); // $NON-NLS-1$
jlAddressToCC = new JLabel(JMeterUtils.getResString("smtp_cc")); // $NON-NLS-1$
jlAddressToBCC = new JLabel(JMeterUtils.getResString("smtp_bcc")); // $NON-NLS-1$
jlMailServerPort = new JLabel(JMeterUtils.getResString("smtp_server_port")); // $NON-NLS-1$
jlMailServer = new JLabel(JMeterUtils.getResString("smtp_server")); // $NON-NLS-1$
jlMailServerTimeout = new JLabel(JMeterUtils.getResString("smtp_server_timeout")); // $NON-NLS-1$
jlMailServerConnectionTimeout = new JLabel(JMeterUtils.getResString("smtp_server_connection_timeout")); // $NON-NLS-1$
jlAttachFile = new JLabel(JMeterUtils.getResString("smtp_attach_file")); // $NON-NLS-1$
jlDutPortStandard = new JLabel(JMeterUtils.getResString("smtp_default_port")); // $NON-NLS-1$
jlUsername = new JLabel(JMeterUtils.getResString("smtp_username")); // $NON-NLS-1$
jlPassword = new JLabel(JMeterUtils.getResString("smtp_password")); // $NON-NLS-1$
jlSubject = new JLabel(JMeterUtils.getResString("smtp_subject")); // $NON-NLS-1$
jlMessage = new JLabel(JMeterUtils.getResString("smtp_message")); // $NON-NLS-1$
tfMailServer = new JTextField(30);
tfMailServerPort = new JTextField(6);
tfMailServerTimeout = new JTextField(6);
tfMailServerConnectionTimeout = new JTextField(6);
tfMailFrom = new JTextField(25);
tfMailReplyTo = new JTextField(25);
tfMailTo = new JTextField(25);
tfMailToCC = new JTextField(25);
tfMailToBCC = new JTextField(25);
tfAuthUsername = new JTextField(20);
tfAuthPassword = new JPasswordField(20);
tfSubject = new JTextField(20);
tfAttachment = new JTextField(30);
tfEmlMessage = new JTextField(30);
taMessage = new JTextArea(5, 20);
cbPlainBody = new JCheckBox(JMeterUtils.getResString("smtp_plainbody")); // $NON-NLS-1$
cbSuppressSubject = new JCheckBox(JMeterUtils.getResString("smtp_suppresssubj")); // $NON-NLS-1$
cbSuppressSubject.addChangeListener(this::emptySubjectActionPerformed);
cbUseAuth = new JCheckBox(JMeterUtils.getResString("smtp_useauth")); // $NON-NLS-1$
cbIncludeTimestamp = new JCheckBox(JMeterUtils.getResString("smtp_timestamp")); // $NON-NLS-1$
cbMessageSizeStats = new JCheckBox(JMeterUtils.getResString("smtp_messagesize")); // $NON-NLS-1$
cbEnableDebug = new JCheckBox(JMeterUtils.getResString("smtp_enabledebug")); // $NON-NLS-1$
cbUseEmlMessage = new JCheckBox(JMeterUtils.getResString("smtp_eml")); // $NON-NLS-1$
attachmentFileChooser = new JFileChooser();
emlFileChooser = new JFileChooser();
browseButton = new JButton(JMeterUtils.getResString("browse")); // $NON-NLS-1$
emlBrowseButton = new JButton(JMeterUtils.getResString("browse")); // $NON-NLS-1$
attachmentFileChooser
.addActionListener(this::attachmentFolderFileChooserActionPerformed);
emlFileChooser.addActionListener(this::emlFileChooserActionPerformed);
setLayout(new GridBagLayout());
GridBagConstraints gridBagConstraintsMain = new GridBagConstraints();
gridBagConstraintsMain.fill = GridBagConstraints.HORIZONTAL;
gridBagConstraintsMain.anchor = GridBagConstraints.WEST;
gridBagConstraintsMain.weightx = 0.5;
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
gridBagConstraints.fill = GridBagConstraints.NONE;
gridBagConstraints.anchor = GridBagConstraints.WEST;
gridBagConstraints.weightx = 0.5;
/*
* Server Settings
*/
JPanel panelServerSettings = new VerticalPanel();
panelServerSettings.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),
JMeterUtils.getResString("smtp_server_settings"))); // $NON-NLS-1$
JPanel panelMailServer = new JPanel(new BorderLayout(5, 0));
panelMailServer.add(jlMailServer, BorderLayout.WEST);
panelMailServer.add(tfMailServer, BorderLayout.CENTER);
JPanel panelMailServerPort = new JPanel(new BorderLayout(5, 0));
panelMailServerPort.add(jlMailServerPort, BorderLayout.WEST);
panelMailServerPort.add(tfMailServerPort, BorderLayout.CENTER);
panelMailServerPort.add(jlDutPortStandard, BorderLayout.EAST);
panelServerSettings.add(panelMailServer, BorderLayout.CENTER);
panelServerSettings.add(panelMailServerPort, BorderLayout.SOUTH);
JPanel panelServerTimeoutsSettings = new VerticalPanel();
panelServerTimeoutsSettings.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),
JMeterUtils.getResString("smtp_server_timeouts_settings"))); // $NON-NLS-1$
JPanel panelMailServerConnectionTimeout = new JPanel(new BorderLayout(5, 0));
panelMailServerConnectionTimeout.add(jlMailServerConnectionTimeout, BorderLayout.WEST);
panelMailServerConnectionTimeout.add(tfMailServerConnectionTimeout, BorderLayout.CENTER);
JPanel panelMailServerTimeout = new JPanel(new BorderLayout(5, 0));
panelMailServerTimeout.add(jlMailServerTimeout, BorderLayout.WEST);
panelMailServerTimeout.add(tfMailServerTimeout, BorderLayout.CENTER);
panelServerTimeoutsSettings.add(panelMailServerConnectionTimeout, BorderLayout.CENTER);
panelServerTimeoutsSettings.add(panelMailServerTimeout, BorderLayout.SOUTH);
JPanel panelServerConfig = new HorizontalPanel();
panelServerConfig.add(panelServerSettings, BorderLayout.CENTER);
panelServerConfig.add(panelServerTimeoutsSettings, BorderLayout.EAST);
gridBagConstraintsMain.gridx = 0;
gridBagConstraintsMain.gridy = 0;
add(panelServerConfig, gridBagConstraintsMain);
/*
* E-Mail Settings
*/
JPanel panelMailSettings = new JPanel(new GridBagLayout());
panelMailSettings.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(),
JMeterUtils.getResString("smtp_mail_settings"))); // $NON-NLS-1$
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
panelMailSettings.add(jlAddressFrom, gridBagConstraints);
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
panelMailSettings.add(tfMailFrom, gridBagConstraints);
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
panelMailSettings.add(jlAddressTo, gridBagConstraints);
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
panelMailSettings.add(tfMailTo, gridBagConstraints);
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
panelMailSettings.add(jlAddressToCC, gridBagConstraints);
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
panelMailSettings.add(tfMailToCC, gridBagConstraints);
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
panelMailSettings.add(jlAddressToBCC, gridBagConstraints);
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 3;
panelMailSettings.add(tfMailToBCC, gridBagConstraints);
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
panelMailSettings.add(jlAddressReplyTo, gridBagConstraints);
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 4;
panelMailSettings.add(tfMailReplyTo, gridBagConstraints);
gridBagConstraintsMain.gridx = 0;
gridBagConstraintsMain.gridy = 1;
add(panelMailSettings, gridBagConstraintsMain);
/*
* Auth Settings
*/
JPanel panelAuthSettings = new JPanel(new GridBagLayout());
panelAuthSettings.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(),
JMeterUtils.getResString("smtp_auth_settings"))); // $NON-NLS-1$
cbUseAuth.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
cbUseAuth.setMargin(new java.awt.Insets(0, 0, 0, 0));
cbUseAuth.addActionListener(this::cbUseAuthActionPerformed);
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
panelAuthSettings.add(cbUseAuth, gridBagConstraints);
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weightx = 0;
panelAuthSettings.add(jlUsername, gridBagConstraints);
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.weightx = 0.5;
panelAuthSettings.add(tfAuthUsername, gridBagConstraints);
tfAuthUsername.setEditable(false);
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weightx = 0;
panelAuthSettings.add(jlPassword, gridBagConstraints);
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 1;
gridBagConstraints.weightx = 0.5;
panelAuthSettings.add(tfAuthPassword, gridBagConstraints);
tfAuthPassword.setEditable(false);
gridBagConstraintsMain.gridx = 0;
gridBagConstraintsMain.gridy = 2;
add(panelAuthSettings, gridBagConstraintsMain);
/*
* Security Settings
*/
securitySettingsPanel = new SecuritySettingsPanel();
gridBagConstraintsMain.gridx = 0;
gridBagConstraintsMain.gridy = 3;
add(securitySettingsPanel, gridBagConstraintsMain);
/*
* (non-Javadoc) Message Settings
*/
JPanel panelMessageSettings = new JPanel(new GridBagLayout());
panelMessageSettings.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(),
JMeterUtils.getResString("smtp_message_settings"))); // $NON-NLS-1$
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
panelMessageSettings.add(jlSubject, gridBagConstraints);
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
panelMessageSettings.add(tfSubject, gridBagConstraints);
cbSuppressSubject.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
cbSuppressSubject.setMargin(new java.awt.Insets(0, 0, 0, 0));
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = GridBagConstraints.NONE;
panelMessageSettings.add(cbSuppressSubject, gridBagConstraints);
cbIncludeTimestamp.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
cbIncludeTimestamp.setMargin(new java.awt.Insets(0, 0, 0, 0));
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = GridBagConstraints.NONE;
panelMessageSettings.add(cbIncludeTimestamp, gridBagConstraints);
/*
* Add the header panel
*/
addHeaderFieldButton = new JButton(JMeterUtils.getResString("smtp_header_add")); // $NON-NLS-1$
addHeaderFieldButton.addActionListener(this::addHeaderActionPerformed);
headerFieldName = new JLabel(JMeterUtils.getResString("smtp_header_name")); // $NON-NLS-1$
headerFieldValue = new JLabel(JMeterUtils.getResString("smtp_header_value")); // $NON-NLS-1$
headerFieldsPanel = new JPanel(new GridBagLayout());
headerFieldName.setVisible(false);
headerFieldValue.setVisible(false);
headerGridY=0;
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = headerGridY++;
headerFieldsPanel.add(addHeaderFieldButton, gridBagConstraints);
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = headerGridY;
headerFieldsPanel.add(headerFieldName, gridBagConstraints);
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = headerGridY++;
headerFieldsPanel.add(headerFieldValue, gridBagConstraints);
gridBagConstraintsMain.gridx = 1;
gridBagConstraintsMain.gridy = 2;
panelMessageSettings.add(headerFieldsPanel, gridBagConstraintsMain);
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
panelMessageSettings.add(jlMessage, gridBagConstraints);
taMessage.setBorder(BorderFactory.createBevelBorder(1));
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 3;
gridBagConstraints.fill = GridBagConstraints.BOTH;
panelMessageSettings.add(taMessage, gridBagConstraints);
cbPlainBody.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
cbPlainBody.setMargin(new java.awt.Insets(0, 0, 0, 0));
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 3;
gridBagConstraints.fill = GridBagConstraints.NONE;
panelMessageSettings.add(cbPlainBody, gridBagConstraints);
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.fill = GridBagConstraints.NONE;
panelMessageSettings.add(jlAttachFile, gridBagConstraints);
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 4;
gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
panelMessageSettings.add(tfAttachment, gridBagConstraints);
tfAttachment.setToolTipText(JMeterUtils.getResString("smtp_attach_file_tooltip")); // $NON-NLS-1$
browseButton.addActionListener(this::browseButtonActionPerformed);
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 4;
gridBagConstraints.fill = GridBagConstraints.NONE;
panelMessageSettings.add(browseButton, gridBagConstraints);
cbUseEmlMessage.setSelected(false);
cbUseEmlMessage.addActionListener(this::cbUseEmlMessageActionPerformed);
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
gridBagConstraints.fill = GridBagConstraints.NONE;
panelMessageSettings.add(cbUseEmlMessage, gridBagConstraints);
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 5;
gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
tfEmlMessage.setEnabled(false);
panelMessageSettings.add(tfEmlMessage, gridBagConstraints);
emlBrowseButton.addActionListener(this::emlBrowseButtonActionPerformed);
emlBrowseButton.setEnabled(false);
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 5;
gridBagConstraints.fill = GridBagConstraints.NONE;
panelMessageSettings.add(emlBrowseButton, gridBagConstraints);
gridBagConstraintsMain.gridx = 0;
gridBagConstraintsMain.gridy = 6;
add(panelMessageSettings, gridBagConstraintsMain);
/*
* Additional Settings
*/
JPanel panelAdditionalSettings = new JPanel(new GridBagLayout());
panelAdditionalSettings.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(),
JMeterUtils.getResString("smtp_additional_settings"))); // $NON-NLS-1$
cbMessageSizeStats.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
cbMessageSizeStats.setMargin(new java.awt.Insets(0, 0, 0, 0));
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
panelAdditionalSettings.add(cbMessageSizeStats, gridBagConstraints);
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
panelAdditionalSettings.add(cbEnableDebug, gridBagConstraints);
gridBagConstraintsMain.gridx = 0;
gridBagConstraintsMain.gridy = 7;
add(panelAdditionalSettings, gridBagConstraintsMain);
}
/**
* ActionPerformed-method for checkbox "useAuth"
*
* @param evt
* ActionEvent to be handled
*/
private void cbUseAuthActionPerformed(ActionEvent evt) { // NOSONAR This method is used through lambda
tfAuthUsername.setEditable(cbUseAuth.isSelected());
tfAuthPassword.setEditable(cbUseAuth.isSelected());
}
/**
* ActionPerformed-method for filechoser "attachmentFileChoser", creates
* FileChoser-Object
*
* @param evt
* ActionEvent to be handled
*/
private void attachmentFolderFileChooserActionPerformed(ActionEvent evt) { // NOSONAR This method is used through lambda
File chosen = attachmentFileChooser.getSelectedFile();
if (chosen == null) {
return;
}
final String attachments = tfAttachment.getText().trim();
if (attachments.length() > 0) {
tfAttachment.setText(attachments
+ SmtpSampler.FILENAME_SEPARATOR
+ chosen.getAbsolutePath());
} else {
tfAttachment.setText(chosen.getAbsolutePath());
}
}
/**
* ActionPerformed-method for button "browseButton", opens FileDialog-Object
*
* @param evt
* ActionEvent to be handled
*/
private void browseButtonActionPerformed(ActionEvent evt) { // NOSONAR This method is used through lambda
attachmentFileChooser.showOpenDialog(this);
}
private void cbUseEmlMessageActionPerformed(ActionEvent evt) { // NOSONAR This method is used through lambda
if (cbUseEmlMessage.isSelected()) {
tfEmlMessage.setEnabled(true);
emlBrowseButton.setEnabled(true);
taMessage.setEnabled(false);
tfAttachment.setEnabled(false);
browseButton.setEnabled(false);
} else {
tfEmlMessage.setEnabled(false);
emlBrowseButton.setEnabled(false);
taMessage.setEnabled(true);
tfAttachment.setEnabled(true);
browseButton.setEnabled(true);
}
}
/**
* ActionPerformed-method for filechoser "emlFileChoser", creates
* FileChoser-Object
*
* @param evt
* ActionEvent to be handled
*/
private void emlFileChooserActionPerformed(ActionEvent evt) { // NOSONAR This method is used through lambda
tfEmlMessage.setText(emlFileChooser.getSelectedFile().getAbsolutePath());
}
/**
* ActionPerformed-method for button "emlButton", opens FileDialog-Object
*
* @param evt
* ActionEvent to be handled
*/
private void emlBrowseButtonActionPerformed(ActionEvent evt) { // NOSONAR This method is used through lambda
emlFileChooser.showOpenDialog(this);
}
/**
* Reset all the Gui fields.
*/
public void clear() {
cbIncludeTimestamp.setSelected(false);
cbMessageSizeStats.setSelected(false);
cbEnableDebug.setSelected(false);
cbUseEmlMessage.setSelected(false);
cbUseAuth.setSelected(false);
taMessage.setText("");
tfAttachment.setText("");
tfAuthPassword.setText("");
tfAuthUsername.setText("");
tfEmlMessage.setText("");
tfMailFrom.setText("");
tfMailReplyTo.setText("");
tfMailServer.setText("");
tfMailServerPort.setText("");
tfMailServerConnectionTimeout.setText("");
tfMailServerTimeout.setText("");
tfMailTo.setText("");
tfMailToBCC.setText("");
tfMailToCC.setText("");
tfSubject.setText("");
cbPlainBody.setSelected(false);
cbSuppressSubject.setSelected(false);
securitySettingsPanel.clear();
clearHeaderFields();
validate();
}
private void clearHeaderFields() {
headerFieldName.setVisible(false);
headerFieldValue.setVisible(false);
for (Iterator<JButton> iterator = removeButtons.keySet().iterator(); iterator.hasNext();) {
JButton removeButton = iterator.next();
JTextField headerName = removeButtons.get(removeButton);
JTextField headerValue = headerFields.get(headerName);
headerFieldsPanel.remove(headerName);
if (headerValue != null){ // Can be null (not sure why)
headerFieldsPanel.remove(headerValue);
}
headerFieldsPanel.remove(removeButton);
headerFields.remove(headerName);
iterator.remove();
}
}
private JButton addHeaderActionPerformed(ActionEvent evt){
if(headerFields.size() == 0){
headerFieldName.setVisible(true);
headerFieldValue.setVisible(true);
}
JTextField nameTF = new JTextField();
JTextField valueTF = new JTextField();
JButton removeButton = new JButton(JMeterUtils.getResString("smtp_header_remove")); // $NON-NLS-1$
headerFields.put(nameTF, valueTF);
removeButtons.put(removeButton, nameTF);
removeButton.addActionListener(this::removeHeaderActionPerformed);
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
gridBagConstraints.weightx = 0.5;
gridBagConstraints.anchor = GridBagConstraints.WEST;
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = headerGridY;
gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
headerFieldsPanel.add(nameTF, gridBagConstraints);
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = headerGridY;
gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
headerFieldsPanel.add(valueTF, gridBagConstraints);
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = headerGridY++;
gridBagConstraints.fill = GridBagConstraints.NONE;
headerFieldsPanel.add(removeButton, gridBagConstraints);
validate();
return removeButton;
}
public SecuritySettingsPanel getSecuritySettingsPanel() {
return securitySettingsPanel;
}
public void setSecuritySettingsPanel(SecuritySettingsPanel securitySettingsPanel) {
this.securitySettingsPanel = securitySettingsPanel;
}
private void removeHeaderActionPerformed(ActionEvent evt){ // NOSONAR This method is used through lambda
final Object source = evt.getSource();
if(source instanceof JButton){
if(headerFields.size() == 1){
headerFieldName.setVisible(false);
headerFieldValue.setVisible(false);
}
JTextField nameTF = removeButtons.get(source);
JTextField valueTF = headerFields.get(nameTF);
headerFields.remove(nameTF);
headerFieldsPanel.remove(nameTF);
headerFieldsPanel.remove(valueTF);
headerFieldsPanel.remove((JButton)source);
validate();
}
}
private void emptySubjectActionPerformed(ChangeEvent evt) { // NOSONAR This method is used through lambda
final Object source = evt.getSource();
if(source instanceof JCheckBox){
if(cbSuppressSubject.isSelected()){
tfSubject.setEnabled(false);
cbIncludeTimestamp.setEnabled(false);
}else{
tfSubject.setEnabled(true);
cbIncludeTimestamp.setEnabled(true);
}
}
}
}