/* * 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 javax.swing.JPasswordField; 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.LDAPExtSampler; import org.apache.jmeter.protocol.ldap.config.gui.LDAPArgumentsPanel; import org.apache.jmeter.testelement.TestElement; import org.apache.jmeter.testelement.property.StringProperty; import org.apache.jmeter.testelement.property.TestElementProperty; import org.apache.jmeter.util.JMeterUtils; import org.apache.jorphan.gui.JLabeledChoice; /******************************************************************************* * This class LdapConfigGui is user interface gui for getting all the * configuration value from the user * * author Dolf Smits(Dolf.Smits@Siemens.com) created Aug 09 2003 11:00 AM * company Siemens Netherlands N.V.. * * Based on the work of: author T.Elanjchezhiyan(chezhiyan@siptech.co.in) * created Apr 29 2003 11:00 AM company Sip Technologies and Exports Ltd. ******************************************************************************/ public class LdapExtConfigGui extends AbstractConfigGui implements ItemListener { private static final long serialVersionUID = 240L; 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); /* * N.B. These entry indexes MUST agree with the SearchControls SCOPE_LEVELS, i.e. * * javax.naming.directory.SearchControls.OBJECT_SCOPE, ONELEVEL_SCOPE, SUBTREE_SCOPE * * These have the values 0,1,2 so can be used as indexes in the array * as well as the value for the search itself. * * N.B. Although the strings are used to set and get the options, language change * does not currently cause a problem, because that always saves the current settings first, * and then recreates all the GUI classes. */ private final String[] SCOPE_STRINGS = new String[]{ JMeterUtils.getResString("ldap_search_baseobject"),// $NON-NLS-1$ JMeterUtils.getResString("ldap_search_onelevel"),// $NON-NLS-1$ JMeterUtils.getResString("ldap_search_subtree"),// $NON-NLS-1$ }; // Names for the cards private static final String CARDS_DEFAULT = ""; // $NON-NLS-1$ private static final String CARDS_ADD = "Add"; // $NON-NLS-1$ private static final String CARDS_DELETE = "Delete"; // $NON-NLS-1$ private static final String CARDS_BIND = "Bind"; // $NON-NLS-1$ private static final String CARDS_RENAME = "Rename"; // $NON-NLS-1$ private static final String CARDS_COMPARE = "Compare"; // $NON-NLS-1$ private static final String CARDS_SEARCH = "Search"; // $NON-NLS-1$ private static final String CARDS_MODIFY = "Modify"; // $NON-NLS-1$ private JLabeledChoice scope = new JLabeledChoice(JMeterUtils.getResString("scope"), // $NON-NLS-1$ SCOPE_STRINGS); private JTextField countlim = new JTextField(20); private JTextField timelim = new JTextField(20); private JTextField attribs = new JTextField(20); private JCheckBox retobj = new JCheckBox(JMeterUtils.getResString("retobj")); // $NON-NLS-1$ private JCheckBox deref = new JCheckBox(JMeterUtils.getResString("deref")); // $NON-NLS-1$ private JTextField userdn = new JTextField(20); private JTextField userpw = new JPasswordField(20); private JTextField comparedn = new JTextField(20); private JTextField comparefilt = new JTextField(20); private JTextField modddn = new JTextField(20); private JTextField newdn = new JTextField(20); private JTextField connto = new JTextField(20); private JCheckBox parseflag = new JCheckBox(JMeterUtils.getResString("ldap_parse_results")); // $NON-NLS-1$ private JCheckBox secure = new JCheckBox(JMeterUtils.getResString("ldap_secure")); // $NON-NLS-1$ private JRadioButton addTest = new JRadioButton(JMeterUtils.getResString("addtest")); // $NON-NLS-1$ private JRadioButton modifyTest = new JRadioButton(JMeterUtils.getResString("modtest")); // $NON-NLS-1$ private JRadioButton deleteTest = new JRadioButton(JMeterUtils.getResString("deltest")); // $NON-NLS-1$ private JRadioButton searchTest = new JRadioButton(JMeterUtils.getResString("searchtest")); // $NON-NLS-1$ private JRadioButton bind = new JRadioButton(JMeterUtils.getResString("bind")); // $NON-NLS-1$ private JRadioButton rename = new JRadioButton(JMeterUtils.getResString("rename")); // $NON-NLS-1$ private JRadioButton unbind = new JRadioButton(JMeterUtils.getResString("unbind")); // $NON-NLS-1$ private JRadioButton sbind = new JRadioButton(JMeterUtils.getResString("sbind")); // $NON-NLS-1$ private JRadioButton compare = new JRadioButton(JMeterUtils.getResString("compare")); // $NON-NLS-1$ private ButtonGroup bGroup = new ButtonGroup(); private boolean displayName = true; private ArgumentsPanel tableAddPanel = new ArgumentsPanel(JMeterUtils.getResString("addtest")); // $NON-NLS-1$ private LDAPArgumentsPanel tableModifyPanel = new LDAPArgumentsPanel(JMeterUtils.getResString("modtest")); // $NON-NLS-1$ private JPanel cards; /*************************************************************************** * Default constructor for LdapConfigGui **************************************************************************/ public LdapExtConfigGui() { this(true); } /*************************************************************************** * Constructor for LdapExtConfigGui * * @param displayName * flag, whether to show the display name of the component. **************************************************************************/ public LdapExtConfigGui(boolean displayName) { this.displayName = displayName; init(); } @Override public String getLabelResource() { return "ldapext_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(LDAPExtSampler.SERVERNAME)); port.setText(element.getPropertyAsString(LDAPExtSampler.PORT)); rootdn.setText(element.getPropertyAsString(LDAPExtSampler.ROOTDN)); scope.setSelectedIndex(element.getPropertyAsInt(LDAPExtSampler.SCOPE)); countlim.setText(element.getPropertyAsString(LDAPExtSampler.COUNTLIM)); timelim.setText(element.getPropertyAsString(LDAPExtSampler.TIMELIM)); attribs.setText(element.getPropertyAsString(LDAPExtSampler.ATTRIBS)); retobj.setSelected(element.getPropertyAsBoolean(LDAPExtSampler.RETOBJ)); deref.setSelected(element.getPropertyAsBoolean(LDAPExtSampler.DEREF)); connto.setText(element.getPropertyAsString(LDAPExtSampler.CONNTO)); parseflag.setSelected(element.getPropertyAsBoolean(LDAPExtSampler.PARSEFLAG)); secure.setSelected(element.getPropertyAsBoolean(LDAPExtSampler.SECURE)); userpw.setText(element.getPropertyAsString(LDAPExtSampler.USERPW)); userdn.setText(element.getPropertyAsString(LDAPExtSampler.USERDN)); comparedn.setText(element.getPropertyAsString(LDAPExtSampler.COMPAREDN)); comparefilt.setText(element.getPropertyAsString(LDAPExtSampler.COMPAREFILT)); modddn.setText(element.getPropertyAsString(LDAPExtSampler.MODDDN)); newdn.setText(element.getPropertyAsString(LDAPExtSampler.NEWDN)); CardLayout cl = (CardLayout) (cards.getLayout()); final String testType = element.getPropertyAsString(LDAPExtSampler.TEST); if (testType.equals(LDAPExtSampler.UNBIND)) { unbind.setSelected(true); cl.show(cards, CARDS_DEFAULT); } else if (testType.equals(LDAPExtSampler.BIND)) { bind.setSelected(true); cl.show(cards, CARDS_BIND); } else if (testType.equals(LDAPExtSampler.SBIND)) { sbind.setSelected(true); cl.show(cards, CARDS_BIND); } else if (testType.equals(LDAPExtSampler.COMPARE)) { compare.setSelected(true); cl.show(cards, CARDS_COMPARE); } else if (testType.equals(LDAPExtSampler.ADD)) { addTest.setSelected(true); add.setText(element.getPropertyAsString(LDAPExtSampler.BASE_ENTRY_DN)); tableAddPanel.configure((TestElement) element.getProperty(LDAPExtSampler.ARGUMENTS).getObjectValue()); cl.show(cards, CARDS_ADD); } else if (testType.equals(LDAPExtSampler.MODIFY)) { modifyTest.setSelected(true); modify.setText(element.getPropertyAsString(LDAPExtSampler.BASE_ENTRY_DN)); tableModifyPanel .configure((TestElement) element.getProperty(LDAPExtSampler.LDAPARGUMENTS).getObjectValue()); cl.show(cards, CARDS_MODIFY); } else if (testType.equals(LDAPExtSampler.DELETE)) { deleteTest.setSelected(true); delete.setText(element.getPropertyAsString(LDAPExtSampler.DELETE)); cl.show(cards, CARDS_DELETE); } else if (testType.equals(LDAPExtSampler.RENAME)) { rename.setSelected(true); cl.show(cards, CARDS_RENAME); } else if (testType.equals(LDAPExtSampler.SEARCH)) { searchTest.setSelected(true); searchbase.setText(element.getPropertyAsString(LDAPExtSampler.SEARCHBASE)); searchfilter.setText(element.getPropertyAsString(LDAPExtSampler.SEARCHFILTER)); cl.show(cards, CARDS_SEARCH); } } /* 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(LDAPExtSampler.SERVERNAME, servername.getText()); element.setProperty(LDAPExtSampler.PORT, port.getText()); element.setProperty(LDAPExtSampler.ROOTDN, rootdn.getText()); element.setProperty(LDAPExtSampler.SCOPE,String.valueOf(scope.getSelectedIndex())); element.setProperty(LDAPExtSampler.COUNTLIM, countlim.getText()); element.setProperty(LDAPExtSampler.TIMELIM, timelim.getText()); element.setProperty(LDAPExtSampler.ATTRIBS, attribs.getText()); element.setProperty(LDAPExtSampler.RETOBJ,Boolean.toString(retobj.isSelected())); element.setProperty(LDAPExtSampler.DEREF,Boolean.toString(deref.isSelected())); element.setProperty(LDAPExtSampler.CONNTO, connto.getText()); element.setProperty(LDAPExtSampler.PARSEFLAG,Boolean.toString(parseflag.isSelected())); element.setProperty(LDAPExtSampler.SECURE,Boolean.toString(secure.isSelected())); element.setProperty(LDAPExtSampler.USERDN, userdn.getText()); element.setProperty(LDAPExtSampler.USERPW, userpw.getText()); element.setProperty(LDAPExtSampler.COMPAREDN, comparedn.getText()); element.setProperty(LDAPExtSampler.COMPAREFILT, comparefilt.getText()); element.setProperty(LDAPExtSampler.MODDDN, modddn.getText()); element.setProperty(LDAPExtSampler.NEWDN, newdn.getText()); if (addTest.isSelected()) { element.setProperty(new StringProperty(LDAPExtSampler.TEST, LDAPExtSampler.ADD)); element.setProperty(new StringProperty(LDAPExtSampler.BASE_ENTRY_DN, add.getText())); element.setProperty(new TestElementProperty(LDAPExtSampler.ARGUMENTS, tableAddPanel.createTestElement())); } if (modifyTest.isSelected()) { element.setProperty(new StringProperty(LDAPExtSampler.TEST, LDAPExtSampler.MODIFY)); element.setProperty(new StringProperty(LDAPExtSampler.BASE_ENTRY_DN, modify.getText())); element.setProperty(new TestElementProperty(LDAPExtSampler.LDAPARGUMENTS, tableModifyPanel .createTestElement())); } if (deleteTest.isSelected()) { element.setProperty(new StringProperty(LDAPExtSampler.TEST, LDAPExtSampler.DELETE)); element.setProperty(new StringProperty(LDAPExtSampler.DELETE, delete.getText())); } if (searchTest.isSelected()) { element.setProperty(new StringProperty(LDAPExtSampler.TEST, LDAPExtSampler.SEARCH)); element.setProperty(new StringProperty(LDAPExtSampler.SEARCHBASE, searchbase.getText())); element.setProperty(new StringProperty(LDAPExtSampler.SEARCHFILTER, searchfilter.getText())); } if (bind.isSelected()) { element.setProperty(new StringProperty(LDAPExtSampler.TEST, LDAPExtSampler.BIND)); } if (sbind.isSelected()) { element.setProperty(new StringProperty(LDAPExtSampler.TEST, LDAPExtSampler.SBIND)); } if (compare.isSelected()) { element.setProperty(new StringProperty(LDAPExtSampler.TEST, LDAPExtSampler.COMPARE)); } if (rename.isSelected()) { element.setProperty(new StringProperty(LDAPExtSampler.TEST, LDAPExtSampler.RENAME)); } if (unbind.isSelected()) { element.setProperty(new StringProperty(LDAPExtSampler.TEST, LDAPExtSampler.UNBIND)); } } /** * 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$ add.setText(""); //$NON-NLS-1$ scope.setSelectedIndex(SCOPE_STRINGS.length - 1); countlim.setText(""); //$NON-NLS-1$ timelim.setText(""); //$NON-NLS-1$ attribs.setText(""); //$NON-NLS-1$ userdn.setText(""); //$NON-NLS-1$ userpw.setText(""); //$NON-NLS-1$ comparedn.setText(""); //$NON-NLS-1$ comparefilt.setText(""); //$NON-NLS-1$ modddn.setText(""); //$NON-NLS-1$ newdn.setText(""); //$NON-NLS-1$ connto.setText(""); //$NON-NLS-1$ retobj.setSelected(false); deref.setSelected(false); parseflag.setSelected(false); secure.setSelected(false); addTest.setSelected(false); modifyTest.setSelected(false); deleteTest.setSelected(false); searchTest.setSelected(false); bind.setSelected(false); rename.setSelected(false); unbind.setSelected(false); sbind.setSelected(false); compare.setSelected(false); tableAddPanel.clear(); tableModifyPanel.clear(); } /*************************************************************************** * 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 (addTest.isSelected()) { cl.show(cards, CARDS_ADD); } else if (deleteTest.isSelected()) { cl.show(cards, CARDS_DELETE); } else if (bind.isSelected()) { cl.show(cards, CARDS_BIND); } else if (sbind.isSelected()) { cl.show(cards, CARDS_BIND); } else if (rename.isSelected()) { cl.show(cards, CARDS_RENAME); } else if (compare.isSelected()) { cl.show(cards, CARDS_COMPARE); } else if (searchTest.isSelected()) { cl.show(cards, CARDS_SEARCH); } else if (modifyTest.isSelected()) { cl.show(cards, CARDS_MODIFY); } else { // e.g unbind cl.show(cards, CARDS_DEFAULT); } } /*************************************************************************** * This will create the bind/sbind panel in the LdapConfigGui **************************************************************************/ private JPanel createBindPanel() { VerticalPanel bindPanel = new VerticalPanel(); bindPanel.add(createLabelPanel("servername", servername)); bindPanel.add(createLabelPanel("port", port)); bindPanel.add(createLabelPanel("ddn", rootdn)); bindPanel.add(createLabelPanel("userdn", userdn)); bindPanel.add(createLabelPanel("userpw", userpw)); bindPanel.add(createLabelPanel("ldap_connto", connto)); bindPanel.add(secure); return bindPanel; } /*************************************************************************** * This will create the bind panel in the LdapConfigGui **************************************************************************/ private JPanel createComparePanel() { VerticalPanel cbindPanel = new VerticalPanel(); cbindPanel.add(createLabelPanel("entrydn", comparedn)); cbindPanel.add(createLabelPanel("comparefilt", comparefilt)); return cbindPanel; } /*************************************************************************** * This will create the Search controls panel in the LdapConfigGui **************************************************************************/ private JPanel createSCPanel() { VerticalPanel scPanel = new VerticalPanel(); scPanel.add(scope); scPanel.add(createLabelPanel("countlim", countlim)); scPanel.add(createLabelPanel("timelim", timelim)); scPanel.add(createLabelPanel("attrs", attribs)); scPanel.add(retobj); scPanel.add(deref); scPanel.add(parseflag); return scPanel; } /*************************************************************************** * This will create the Search panel in the LdapConfigGui **************************************************************************/ private JPanel createSearchPanel() { VerticalPanel searchPanel = new VerticalPanel(); searchPanel.add(createLabelPanel("searchbase", searchbase)); searchPanel.add(createLabelPanel("searchfilter", searchfilter)); searchPanel.add(createSCPanel()); return searchPanel; } /*************************************************************************** * This will create the Moddn panel in the LdapConfigGui **************************************************************************/ private JPanel createModdnPanel() { VerticalPanel modPanel = new VerticalPanel(); modPanel.add(createLabelPanel("modddn", modddn)); modPanel.add(createLabelPanel("newdn", newdn)); return modPanel; } /** * Create a panel with a label and a text field * * @param key * to look up the label with * {@link JMeterUtils#getResString(String)} * @param field * field to show and attach the label * @return newly constructed panel */ private JPanel createLabelPanel(String key, JTextField field) { JPanel panel = new JPanel(new BorderLayout(5, 0)); JLabel label = new JLabel(JMeterUtils.getResString(key)); // $NON-NLS-1$ label.setLabelFor(field); panel.add(label, BorderLayout.WEST); panel.add(field, BorderLayout.CENTER); return panel; } /*************************************************************************** * 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("entrydn", add), BorderLayout.NORTH); addPanel.add(tableAddPanel, BorderLayout.CENTER); return addPanel; } /*************************************************************************** * This will create the Modify panel in the LdapConfigGui **************************************************************************/ private JPanel createModifyPanel() { JPanel modifyPanel = new JPanel(new BorderLayout(5, 0)); modifyPanel.add(createLabelPanel("entrydn", 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_DEFAULT); cards.add(createAddPanel(), CARDS_ADD); cards.add(createModifyPanel(), CARDS_MODIFY); cards.add(createModdnPanel(), CARDS_RENAME); cards.add(createDeletePanel(), CARDS_DELETE); cards.add(createSearchPanel(), CARDS_SEARCH); cards.add(createBindPanel(), CARDS_BIND); cards.add(createComparePanel(), CARDS_COMPARE); 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("testt"))); // $NON-NLS-1$ JPanel rowPanel = new JPanel(); JPanel row2Panel = new JPanel(); rowPanel.add(bind); bGroup.add(bind); rowPanel.add(unbind); bGroup.add(unbind); rowPanel.add(sbind); bGroup.add(sbind); rowPanel.add(rename); bGroup.add(rename); row2Panel.add(addTest); bGroup.add(addTest); row2Panel.add(deleteTest); bGroup.add(deleteTest); row2Panel.add(searchTest); bGroup.add(searchTest); row2Panel.add(compare); bGroup.add(compare); row2Panel.add(modifyTest); bGroup.add(modifyTest); testPanel.add(rowPanel, BorderLayout.NORTH); testPanel.add(row2Panel, BorderLayout.SOUTH); return testPanel; } /*************************************************************************** * This will initalise all the panels 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(createTestPanel()); mainPanel.add(testPanel()); add(mainPanel, BorderLayout.CENTER); // Take note of when buttons are changed so we can change panel bind.addItemListener(this); sbind.addItemListener(this); unbind.addItemListener(this); compare.addItemListener(this); addTest.addItemListener(this); modifyTest.addItemListener(this); rename.addItemListener(this); deleteTest.addItemListener(this); searchTest.addItemListener(this); } }