/* * 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.jms.control.gui; import java.awt.BorderLayout; import javax.naming.Context; import javax.swing.BoxLayout; import javax.swing.JCheckBox; import javax.swing.JPanel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.apache.jmeter.gui.util.HorizontalPanel; import org.apache.jmeter.gui.util.JLabeledRadioI18N; import org.apache.jmeter.gui.util.VerticalPanel; import org.apache.jmeter.protocol.jms.sampler.SubscriberSampler; import org.apache.jmeter.samplers.gui.AbstractSamplerGui; import org.apache.jmeter.testelement.TestElement; import org.apache.jmeter.util.JMeterUtils; import org.apache.jorphan.gui.JLabeledPasswordField; import org.apache.jorphan.gui.JLabeledTextField; /** * This is the GUI for JMS Subscriber <br> * */ public class JMSSubscriberGui extends AbstractSamplerGui implements ChangeListener { private static final long serialVersionUID = 240L; private final JCheckBox useProperties = new JCheckBox(JMeterUtils.getResString("jms_use_properties_file"), false); // $NON-NLS-1$ private final JLabeledTextField jndiICF = new JLabeledTextField(JMeterUtils.getResString("jms_initial_context_factory")); // $NON-NLS-1$ private final JLabeledTextField urlField = new JLabeledTextField(JMeterUtils.getResString("jms_provider_url")); // $NON-NLS-1$ private final JLabeledTextField jndiConnFac = new JLabeledTextField(JMeterUtils.getResString("jms_connection_factory")); // $NON-NLS-1$ private final JLabeledTextField jmsDestination = new JLabeledTextField(JMeterUtils.getResString("jms_topic")); // $NON-NLS-1$ private final JLabeledTextField jmsDurableSubscriptionId = new JLabeledTextField(JMeterUtils.getResString("jms_durable_subscription_id")); // $NON-NLS-1$ private final JLabeledTextField jmsClientId = new JLabeledTextField(JMeterUtils.getResString("jms_client_id")); // $NON-NLS-1$ private final JLabeledTextField jmsSelector = new JLabeledTextField(JMeterUtils.getResString("jms_selector")); // $NON-NLS-1$ private final JLabeledTextField jmsUser = new JLabeledTextField(JMeterUtils.getResString("jms_user")); // $NON-NLS-1$ private final JLabeledTextField jmsPwd = new JLabeledPasswordField(JMeterUtils.getResString("jms_pwd")); // $NON-NLS-1$ private final JLabeledTextField samplesToAggregate = new JLabeledTextField(JMeterUtils.getResString("jms_itertions")); // $NON-NLS-1$ private final JCheckBox useAuth = new JCheckBox(JMeterUtils.getResString("jms_use_auth"), false); //$NON-NLS-1$ private final JCheckBox storeResponse = new JCheckBox(JMeterUtils.getResString("jms_store_response"), true); // $NON-NLS-1$ private final JLabeledTextField timeout = new JLabeledTextField(JMeterUtils.getResString("jms_timeout")); //$NON-NLS-1$ private final JLabeledTextField jmsErrorPauseBetween = new JLabeledTextField(JMeterUtils.getResString("jms_error_pause_between")); // $NON-NLS-1$ private final JLabeledTextField jmsErrorReconnectOnCodes = new JLabeledTextField(JMeterUtils.getResString("jms_error_reconnect_on_codes")); // $NON-NLS-1$ private final JLabeledTextField separator = new JLabeledTextField(JMeterUtils.getResString("jms_separator")); //$NON-NLS-1$ //++ Do not change these strings; they are used in JMX files to record the button settings public static final String RECEIVE_RSC = "jms_subscriber_receive"; // $NON-NLS-1$ public static final String ON_MESSAGE_RSC = "jms_subscriber_on_message"; // $NON-NLS-1$ //-- // Button group resources private static final String[] CLIENT_ITEMS = { RECEIVE_RSC, ON_MESSAGE_RSC }; private final JLabeledRadioI18N clientChoice = new JLabeledRadioI18N("jms_client_type", CLIENT_ITEMS, RECEIVE_RSC); // $NON-NLS-1$ private final JCheckBox stopBetweenSamples = new JCheckBox(JMeterUtils.getResString("jms_stop_between_samples"), true); // $NON-NLS-1$ // These are the names of properties used to define the labels private static final String DEST_SETUP_STATIC = "jms_dest_setup_static"; // $NON-NLS-1$ private static final String DEST_SETUP_DYNAMIC = "jms_dest_setup_dynamic"; // $NON-NLS-1$ // Button group resources private static final String[] DEST_SETUP_ITEMS = { DEST_SETUP_STATIC, DEST_SETUP_DYNAMIC }; private final JLabeledRadioI18N destSetup = new JLabeledRadioI18N("jms_dest_setup", DEST_SETUP_ITEMS, DEST_SETUP_STATIC); // $NON-NLS-1$ public JMSSubscriberGui() { init(); } @Override public String getLabelResource() { return "jms_subscriber_title"; // $NON-NLS-1$ } /** * @see org.apache.jmeter.gui.JMeterGUIComponent#createTestElement() */ @Override public TestElement createTestElement() { SubscriberSampler sampler = new SubscriberSampler(); modifyTestElement(sampler); return sampler; } /** * 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 s) { SubscriberSampler sampler = (SubscriberSampler) s; super.configureTestElement(sampler); sampler.setUseJNDIProperties(String.valueOf(useProperties.isSelected())); sampler.setJNDIIntialContextFactory(jndiICF.getText()); sampler.setProviderUrl(urlField.getText()); sampler.setConnectionFactory(jndiConnFac.getText()); sampler.setDestination(jmsDestination.getText()); sampler.setDurableSubscriptionId(jmsDurableSubscriptionId.getText()); sampler.setClientID(jmsClientId.getText()); sampler.setJmsSelector(jmsSelector.getText()); sampler.setUsername(jmsUser.getText()); sampler.setPassword(jmsPwd.getText()); sampler.setUseAuth(useAuth.isSelected()); sampler.setIterations(samplesToAggregate.getText()); sampler.setReadResponse(String.valueOf(storeResponse.isSelected())); sampler.setClientChoice(clientChoice.getText()); sampler.setStopBetweenSamples(stopBetweenSamples.isSelected()); sampler.setTimeout(timeout.getText()); sampler.setReconnectionErrorCodes(jmsErrorReconnectOnCodes.getText()); sampler.setPauseBetweenErrors(jmsErrorPauseBetween.getText()); sampler.setDestinationStatic(destSetup.getText().equals(DEST_SETUP_STATIC)); sampler.setSeparator(separator.getText()); } /** * init() adds jndiICF to the mainPanel. The class reuses logic from * SOAPSampler, since it is common. */ private void init() { // WARNING: called from ctor so must not be overridden (i.e. must be private or final) setLayout(new BorderLayout()); setBorder(makeBorder()); add(makeTitlePanel(), BorderLayout.NORTH); JPanel mainPanel = new VerticalPanel(); add(mainPanel, BorderLayout.CENTER); jndiICF.setToolTipText(Context.INITIAL_CONTEXT_FACTORY); urlField.setToolTipText(Context.PROVIDER_URL); jmsUser.setToolTipText(Context.SECURITY_PRINCIPAL); jmsPwd.setToolTipText(Context.SECURITY_CREDENTIALS); mainPanel.add(useProperties); mainPanel.add(jndiICF); mainPanel.add(urlField); mainPanel.add(jndiConnFac); mainPanel.add(createDestinationPane()); mainPanel.add(jmsDurableSubscriptionId); mainPanel.add(jmsClientId); mainPanel.add(jmsSelector); mainPanel.add(useAuth); mainPanel.add(jmsUser); mainPanel.add(jmsPwd); mainPanel.add(samplesToAggregate); mainPanel.add(storeResponse); mainPanel.add(timeout); JPanel choice = new HorizontalPanel(); choice.add(clientChoice); choice.add(stopBetweenSamples); mainPanel.add(choice); mainPanel.add(separator); mainPanel.add(jmsErrorReconnectOnCodes); mainPanel.add(jmsErrorPauseBetween); useProperties.addChangeListener(this); useAuth.addChangeListener(this); } /** * the implementation loads the URL and the soap action for the request. */ @Override public void configure(TestElement el) { super.configure(el); SubscriberSampler sampler = (SubscriberSampler) el; useProperties.setSelected(sampler.getUseJNDIPropertiesAsBoolean()); jndiICF.setText(sampler.getJNDIInitialContextFactory()); urlField.setText(sampler.getProviderUrl()); jndiConnFac.setText(sampler.getConnectionFactory()); jmsDestination.setText(sampler.getDestination()); jmsDurableSubscriptionId.setText(sampler.getDurableSubscriptionId()); jmsClientId.setText(sampler.getClientId()); jmsSelector.setText(sampler.getJmsSelector()); jmsUser.setText(sampler.getUsername()); jmsPwd.setText(sampler.getPassword()); samplesToAggregate.setText(sampler.getIterations()); useAuth.setSelected(sampler.isUseAuth()); jmsUser.setEnabled(useAuth.isSelected()); jmsPwd.setEnabled(useAuth.isSelected()); storeResponse.setSelected(sampler.getReadResponseAsBoolean()); clientChoice.setText(sampler.getClientChoice()); stopBetweenSamples.setSelected(sampler.isStopBetweenSamples()); timeout.setText(sampler.getTimeout()); separator.setText(sampler.getSeparator()); destSetup.setText(sampler.isDestinationStatic() ? DEST_SETUP_STATIC : DEST_SETUP_DYNAMIC); jmsErrorReconnectOnCodes.setText(sampler.getReconnectionErrorCodes()); jmsErrorPauseBetween.setText(sampler.getPauseBetweenErrors()); } @Override public void clearGui(){ super.clearGui(); useProperties.setSelected(false); // $NON-NLS-1$ jndiICF.setText(""); // $NON-NLS-1$ urlField.setText(""); // $NON-NLS-1$ jndiConnFac.setText(""); // $NON-NLS-1$ jmsDestination.setText(""); // $NON-NLS-1$ jmsDurableSubscriptionId.setText(""); // $NON-NLS-1$ jmsClientId.setText(""); // $NON-NLS-1$ jmsSelector.setText(""); // $NON-NLS-1$ jmsUser.setText(""); // $NON-NLS-1$ jmsPwd.setText(""); // $NON-NLS-1$ samplesToAggregate.setText("1"); // $NON-NLS-1$ timeout.setText(""); // $NON-NLS-1$ separator.setText(""); // $NON-NLS-1$ useAuth.setSelected(false); jmsUser.setEnabled(false); jmsPwd.setEnabled(false); storeResponse.setSelected(true); clientChoice.setText(RECEIVE_RSC); stopBetweenSamples.setSelected(false); destSetup.setText(DEST_SETUP_STATIC); jmsErrorReconnectOnCodes.setText(""); jmsErrorPauseBetween.setText(""); } /** * When the state of a widget changes, it will notify the gui. the method * then enables or disables certain parameters. */ @Override public void stateChanged(ChangeEvent event) { if (event.getSource() == useProperties) { final boolean isUseProperties = useProperties.isSelected(); jndiICF.setEnabled(!isUseProperties); urlField.setEnabled(!isUseProperties); useAuth.setEnabled(!isUseProperties); } else if (event.getSource() == useAuth) { jmsUser.setEnabled(useAuth.isSelected() && useAuth.isEnabled()); jmsPwd.setEnabled(useAuth.isSelected() && useAuth.isEnabled()); } } private JPanel createDestinationPane() { JPanel pane = new JPanel(new BorderLayout(3, 0)); pane.add(jmsDestination, BorderLayout.CENTER); destSetup.setLayout(new BoxLayout(destSetup, BoxLayout.X_AXIS)); pane.add(destSetup, BorderLayout.EAST); return pane; } }