/*
* 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.ldap.config.gui;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import org.apache.jmeter.config.ConfigTestElement;
import org.apache.jmeter.config.gui.AbstractConfigGui;
import org.apache.jmeter.config.gui.ArgumentsPanel;
import org.apache.jmeter.gui.util.VerticalPanel;
import org.apache.jmeter.protocol.ldap.sampler.LDAPSampler;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.testelement.property.BooleanProperty;
import org.apache.jmeter.testelement.property.StringProperty;
import org.apache.jmeter.testelement.property.TestElementProperty;
import org.apache.jmeter.util.JMeterUtils;
/**
* This class LdapConfigGui is user interface gui for getting all the
* configuration values from the user.
*
* Created Apr 29 2003 11:45 AM
*
*/
public class LdapConfigGui extends AbstractConfigGui implements ItemListener {
private static final long serialVersionUID = 241L;
private JTextField rootdn = new JTextField(20);
private JTextField searchbase = new JTextField(20);
private JTextField searchfilter = new JTextField(20);
private JTextField delete = new JTextField(20);
private JTextField add = new JTextField(20);
private JTextField modify = new JTextField(20);
private JTextField servername = new JTextField(20);
private JTextField port = new JTextField(20);
private JCheckBox userDefined = new JCheckBox(JMeterUtils.getResString("user_defined_test")); // $NON-NLS-1$
private JRadioButton addTest = new JRadioButton(JMeterUtils.getResString("add_test")); // $NON-NLS-1$
private JRadioButton modifyTest = new JRadioButton(JMeterUtils.getResString("modify_test")); // $NON-NLS-1$
private JRadioButton deleteTest = new JRadioButton(JMeterUtils.getResString("delete_test")); // $NON-NLS-1$
private JRadioButton searchTest = new JRadioButton(JMeterUtils.getResString("search_test")); // $NON-NLS-1$
private ButtonGroup bGroup = new ButtonGroup();
private boolean displayName = true;
private ArgumentsPanel tableAddPanel = new ArgumentsPanel(JMeterUtils.getResString("add_test")); // $NON-NLS-1$
private ArgumentsPanel tableModifyPanel = new ArgumentsPanel(JMeterUtils.getResString("modify_test")); // $NON-NLS-1$
private JPanel cards;
/**
* Default constructor for LdapConfigGui.
*/
public LdapConfigGui() {
this(true);
}
/**
* Constructor which sets the displayName.
*
* @param displayName flag, whether to display the name of the component
*/
public LdapConfigGui(boolean displayName) {
this.displayName = displayName;
init();
}
@Override
public String getLabelResource() {
return "ldap_sample_title"; // $NON-NLS-1$
}
/**
* A newly created component can be initialized with the contents of a Test
* Element object by calling this method. The component is responsible for
* querying the Test Element object for the relevant information to display
* in its GUI.
*
* @param element
* the TestElement to configure
*/
@Override
public void configure(TestElement element) {
super.configure(element);
servername.setText(element.getPropertyAsString(LDAPSampler.SERVERNAME));
port.setText(element.getPropertyAsString(LDAPSampler.PORT));
rootdn.setText(element.getPropertyAsString(LDAPSampler.ROOTDN));
CardLayout cl = (CardLayout) (cards.getLayout());
final String testType = element.getPropertyAsString(LDAPSampler.TEST);
if (testType.equals(LDAPSampler.ADD)) {
addTest.setSelected(true);
add.setText(element.getPropertyAsString(LDAPSampler.BASE_ENTRY_DN));
tableAddPanel.configure((TestElement) element.getProperty(LDAPSampler.ARGUMENTS).getObjectValue());
cl.show(cards, "Add");
} else if (testType.equals(LDAPSampler.MODIFY)) {
modifyTest.setSelected(true);
modify.setText(element.getPropertyAsString(LDAPSampler.BASE_ENTRY_DN));
tableModifyPanel.configure((TestElement) element.getProperty(LDAPSampler.ARGUMENTS).getObjectValue());
cl.show(cards, "Modify");
} else if (testType.equals(LDAPSampler.DELETE)) {
deleteTest.setSelected(true);
delete.setText(element.getPropertyAsString(LDAPSampler.DELETE));
cl.show(cards, "Delete");
} else if (testType.equals(LDAPSampler.SEARCHBASE)) {
searchTest.setSelected(true);
searchbase.setText(element.getPropertyAsString(LDAPSampler.SEARCHBASE));
searchfilter.setText(element.getPropertyAsString(LDAPSampler.SEARCHFILTER));
cl.show(cards, "Search");
}
if (element.getPropertyAsBoolean(LDAPSampler.USER_DEFINED)) {
userDefined.setSelected(true);
} else {
userDefined.setSelected(false);
cl.show(cards, ""); // $NON-NLS-1$
}
}
/* Implements JMeterGUIComponent.createTestElement() */
@Override
public TestElement createTestElement() {
ConfigTestElement element = new ConfigTestElement();
modifyTestElement(element);
return element;
}
/**
* Modifies a given TestElement to mirror the data in the gui components.
*
* @see org.apache.jmeter.gui.JMeterGUIComponent#modifyTestElement(TestElement)
*/
@Override
public void modifyTestElement(TestElement element) {
element.clear();
configureTestElement(element);
element.setProperty(LDAPSampler.SERVERNAME, servername.getText());
element.setProperty(LDAPSampler.PORT, port.getText());
element.setProperty(LDAPSampler.ROOTDN, rootdn.getText());
element.setProperty(new BooleanProperty(LDAPSampler.USER_DEFINED, userDefined.isSelected()));
if (addTest.isSelected()) {
element.setProperty(new StringProperty(LDAPSampler.TEST, LDAPSampler.ADD));
element.setProperty(new StringProperty(LDAPSampler.BASE_ENTRY_DN, add.getText()));
element.setProperty(new TestElementProperty(LDAPSampler.ARGUMENTS, tableAddPanel.createTestElement()));
}
if (modifyTest.isSelected()) {
element.setProperty(new StringProperty(LDAPSampler.TEST, LDAPSampler.MODIFY));
element.setProperty(new StringProperty(LDAPSampler.BASE_ENTRY_DN, modify.getText()));
element.setProperty(new TestElementProperty(LDAPSampler.ARGUMENTS, tableModifyPanel.createTestElement()));
}
if (deleteTest.isSelected()) {
element.setProperty(new StringProperty(LDAPSampler.TEST, LDAPSampler.DELETE));
element.setProperty(new StringProperty(LDAPSampler.DELETE, delete.getText()));
}
if (searchTest.isSelected()) {
element.setProperty(new StringProperty(LDAPSampler.TEST, LDAPSampler.SEARCHBASE));
element.setProperty(new StringProperty(LDAPSampler.SEARCHBASE, searchbase.getText()));
element.setProperty(new StringProperty(LDAPSampler.SEARCHFILTER, searchfilter.getText()));
}
}
/**
* Implements JMeterGUIComponent.clearGui
*/
@Override
public void clearGui() {
super.clearGui();
rootdn.setText(""); //$NON-NLS-1$
searchbase.setText(""); //$NON-NLS-1$
searchfilter.setText(""); //$NON-NLS-1$
delete.setText(""); //$NON-NLS-1$
add.setText(""); //$NON-NLS-1$
modify.setText(""); //$NON-NLS-1$
servername.setText(""); //$NON-NLS-1$
port.setText(""); //$NON-NLS-1$
userDefined.setSelected(false);
addTest.setSelected(true);
modifyTest.setSelected(false);
deleteTest.setSelected(false);
searchTest.setSelected(false);
}
/**
* This itemStateChanged listener for changing the card layout for based on
* the test selected in the User defined test case.
*/
@Override
public void itemStateChanged(ItemEvent ie) {
CardLayout cl = (CardLayout) (cards.getLayout());
if (userDefined.isSelected()) {
if (addTest.isSelected()) {
cl.show(cards, "Add");
tableModifyPanel.clear();
modify.setText(""); // $NON-NLS-1$
searchbase.setText(""); // $NON-NLS-1$
searchfilter.setText(""); // $NON-NLS-1$
delete.setText("");
} else if (deleteTest.isSelected()) {
cl.show(cards, "Delete");
tableModifyPanel.clear();
modify.setText(""); // $NON-NLS-1$
tableAddPanel.clear();
add.setText(""); // $NON-NLS-1$
searchbase.setText(""); // $NON-NLS-1$
searchfilter.setText(""); // $NON-NLS-1$
} else if (searchTest.isSelected()) {
cl.show(cards, "Search");
delete.setText(""); // $NON-NLS-1$
tableModifyPanel.clear();
modify.setText(""); // $NON-NLS-1$
tableAddPanel.clear();
add.setText(""); // $NON-NLS-1$
} else if (modifyTest.isSelected()) {
cl.show(cards, "Modify");
tableAddPanel.clear();
add.setText(""); // $NON-NLS-1$
searchbase.setText(""); // $NON-NLS-1$
searchfilter.setText(""); // $NON-NLS-1$
delete.setText("");
} else {
resetCardLayout(cl);
}
} else {
resetCardLayout(cl);
}
}
private void resetCardLayout(CardLayout cl) {
cl.show(cards, ""); // $NON-NLS-1$
tableAddPanel.clear();
add.setText(""); // $NON-NLS-1$
tableModifyPanel.clear();
modify.setText(""); // $NON-NLS-1$
searchbase.setText(""); // $NON-NLS-1$
searchfilter.setText(""); // $NON-NLS-1$
delete.setText(""); // $NON-NLS-1$
}
/**
* This will create the servername panel in the LdapConfigGui.
*/
private JPanel createServernamePanel() {
return createLabelPanel("servername", servername);
}
/**
* This will create the port panel in the LdapConfigGui.
*/
private JPanel createPortPanel() {
return createLabelPanel("port", port);
}
/**
* This will create the Root distinguised name panel in the LdapConfigGui.
*/
private JPanel createRootdnPanel() {
return createLabelPanel("dn", rootdn);
}
/**
* This will create the Search panel in the LdapConfigGui.
*/
private JPanel createSearchPanel() {
VerticalPanel searchPanel = new VerticalPanel();
searchPanel.add(createLabelPanel("search_base", searchbase));
searchPanel.add(createLabelPanel("search_filter", searchfilter));
return searchPanel;
}
/**
* This will create the Delete panel in the LdapConfigGui.
*/
private JPanel createDeletePanel() {
VerticalPanel panel = new VerticalPanel();
panel.add(createLabelPanel("delete", delete));
return panel;
}
/**
* This will create the Add test panel in the LdapConfigGui.
*/
private JPanel createAddPanel() {
JPanel addPanel = new JPanel(new BorderLayout(5, 0));
addPanel.add(createLabelPanel("entry_dn", add), BorderLayout.NORTH);
addPanel.add(tableAddPanel, BorderLayout.CENTER);
return addPanel;
}
/**
* Create a panel with the text field and a label
*
* @param key
* to look up the label by using
* {@link JMeterUtils#getResString(String)}
* @param field
* text field to display
* @return newly created panel
*/
private JPanel createLabelPanel(String key, JTextField field) {
JPanel addInnerPanel = new JPanel(new BorderLayout(5, 0));
JLabel label = new JLabel(JMeterUtils.getResString(key)); // $NON-NLS-1$
label.setLabelFor(field);
addInnerPanel.add(label, BorderLayout.WEST);
addInnerPanel.add(field, BorderLayout.CENTER);
return addInnerPanel;
}
/**
* This will create the Modify panel in the LdapConfigGui.
*/
private JPanel createModifyPanel() {
JPanel modifyPanel = new JPanel(new BorderLayout(5, 0));
modifyPanel.add(createLabelPanel("entry_dn", modify), BorderLayout.NORTH);
modifyPanel.add(tableModifyPanel, BorderLayout.CENTER);
return modifyPanel;
}
/**
* This will create the user defined test panel for create or modify or
* delete or search based on the panel selected in the itemevent in the
* LdapConfigGui.
*/
private JPanel testPanel() {
cards = new JPanel(new CardLayout());
cards.add(new JPanel(), "");
cards.add(createAddPanel(), "Add");
cards.add(createModifyPanel(), "Modify");
cards.add(createDeletePanel(), "Delete");
cards.add(createSearchPanel(), "Search");
return cards;
}
/**
* This will create the test panel in the LdapConfigGui.
*/
private JPanel createTestPanel() {
JPanel testPanel = new JPanel(new BorderLayout());
testPanel.setBorder(BorderFactory.createTitledBorder(JMeterUtils.getResString("test_configuration"))); // $NON-NLS-1$
testPanel.add(new JLabel(JMeterUtils.getResString("test"))); // $NON-NLS-1$
JPanel rowPanel = new JPanel();
rowPanel.add(addTest);
bGroup.add(addTest);
rowPanel.add(deleteTest);
bGroup.add(deleteTest);
rowPanel.add(searchTest);
bGroup.add(searchTest);
rowPanel.add(modifyTest);
bGroup.add(modifyTest);
testPanel.add(rowPanel, BorderLayout.NORTH);
testPanel.add(userDefined, BorderLayout.CENTER);
return testPanel;
}
/**
* This will initialise all the panel in the LdapConfigGui.
*/
private void init() { // WARNING: called from ctor so must not be overridden (i.e. must be private or final)
setLayout(new BorderLayout(0, 5));
if (displayName) {
setBorder(makeBorder());
add(makeTitlePanel(), BorderLayout.NORTH);
}
VerticalPanel mainPanel = new VerticalPanel();
mainPanel.add(createServernamePanel());
mainPanel.add(createPortPanel());
mainPanel.add(createRootdnPanel());
mainPanel.add(createTestPanel());
mainPanel.add(testPanel());
add(mainPanel, BorderLayout.CENTER);
userDefined.addItemListener(this);
addTest.addItemListener(this);
modifyTest.addItemListener(this);
deleteTest.addItemListener(this);
searchTest.addItemListener(this);
}
}