Java tutorial
/* * 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 com.unionpay.upmp.jmeterplugin.gui; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.BorderFactory; import javax.swing.JCheckBox; import javax.swing.JPanel; import javax.swing.JTextField; import org.apache.commons.lang3.StringUtils; import org.apache.jmeter.config.ConfigTestElement; import org.apache.jmeter.config.gui.AbstractConfigGui; import org.apache.jmeter.gui.util.HorizontalPanel; import org.apache.jmeter.gui.util.VerticalPanel; import org.apache.jmeter.testelement.AbstractTestElement; import org.apache.jmeter.testelement.TestElement; import org.apache.jmeter.testelement.property.BooleanProperty; import org.apache.jmeter.testelement.property.StringProperty; import org.apache.jmeter.util.JMeterUtils; import org.apache.jorphan.gui.JLabeledTextField; import com.unionpay.upmp.jmeterplugin.UPMPSamplerBase; import com.unionpay.upmp.util.UPMPConstant; public class UPMPDefaultsGui extends AbstractConfigGui { private static final long serialVersionUID = 1L; private JCheckBox imageParser; private JCheckBox concurrentDwn; private JTextField concurrentPool; private UPMPUrlConfigGui urlConfig; private JLabeledTextField embeddedRE; // regular expression used to match against embedded resource URLs public UPMPDefaultsGui() { super(); init(); } @Override public String getLabelResource() { return "url_config_title"; // $NON-NLS-1$ } /** * @see org.apache.jmeter.gui.JMeterGUIComponent#createTestElement() */ @Override public TestElement createTestElement() { ConfigTestElement config = new ConfigTestElement(); modifyTestElement(config); return config; } /** * 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 config) { ConfigTestElement cfg = (ConfigTestElement) config; ConfigTestElement el = (ConfigTestElement) urlConfig.createTestElement(); cfg.clear(); // need to clear because the cfg.addConfigElement(el); super.configureTestElement(config); if (imageParser.isSelected()) { config.setProperty(new BooleanProperty(UPMPSamplerBase.IMAGE_PARSER, true)); enableConcurrentDwn(true); } else { config.removeProperty(UPMPSamplerBase.IMAGE_PARSER); enableConcurrentDwn(false); } if (concurrentDwn.isSelected()) { config.setProperty(new BooleanProperty(UPMPSamplerBase.CONCURRENT_DWN, true)); } else { // The default is false, so we can remove the property to simplify JMX files // This also allows HTTPDefaults to work for this checkbox config.removeProperty(UPMPSamplerBase.CONCURRENT_DWN); } if (!StringUtils.isEmpty(concurrentPool.getText())) { config.setProperty(new StringProperty(UPMPSamplerBase.CONCURRENT_POOL, concurrentPool.getText())); } else { config.setProperty(new StringProperty(UPMPSamplerBase.CONCURRENT_POOL, String.valueOf(UPMPSamplerBase.CONCURRENT_POOL_SIZE))); } if (!StringUtils.isEmpty(embeddedRE.getText())) { config.setProperty(new StringProperty(UPMPSamplerBase.EMBEDDED_URL_RE, embeddedRE.getText())); } else { config.removeProperty(UPMPSamplerBase.EMBEDDED_URL_RE); } } /** * Implements JMeterGUIComponent.clearGui */ @Override public void clearGui() { super.clearGui(); urlConfig.clear(); imageParser.setSelected(false); concurrentDwn.setSelected(false); concurrentPool.setText(String.valueOf(UPMPSamplerBase.CONCURRENT_POOL_SIZE)); embeddedRE.setText(""); // $NON-NLS-1$ } @Override public void configure(TestElement el) { super.configure(el); urlConfig.configure(el); imageParser.setSelected(((AbstractTestElement) el).getPropertyAsBoolean(UPMPSamplerBase.IMAGE_PARSER)); concurrentDwn.setSelected(((AbstractTestElement) el).getPropertyAsBoolean(UPMPSamplerBase.CONCURRENT_DWN)); concurrentPool.setText(((AbstractTestElement) el).getPropertyAsString(UPMPSamplerBase.CONCURRENT_POOL)); embeddedRE.setText(((AbstractTestElement) el).getPropertyAsString(UPMPSamplerBase.EMBEDDED_URL_RE, "")); } private void init() { setLayout(new BorderLayout(0, 5)); setBorder(makeBorder()); add(makeTitlePanel(), BorderLayout.NORTH); urlConfig = new UPMPUrlConfigGui(false, true, false); add(urlConfig, BorderLayout.CENTER); // OPTIONAL TASKS final JPanel optionalTasksPanel = new VerticalPanel(); optionalTasksPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), JMeterUtils.getResString("optional_tasks"))); // $NON-NLS-1$ final JPanel checkBoxPanel = new HorizontalPanel(); imageParser = new JCheckBox(JMeterUtils.getResString("web_testing_retrieve_images")); // $NON-NLS-1$ checkBoxPanel.add(imageParser); imageParser.addItemListener(new ItemListener() { @Override public void itemStateChanged(final ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { enableConcurrentDwn(true); } else { enableConcurrentDwn(false); } } }); // Concurrent resources download concurrentDwn = new JCheckBox(JMeterUtils.getResString("web_testing_concurrent_download")); // $NON-NLS-1$ concurrentDwn.addItemListener(new ItemListener() { @Override public void itemStateChanged(final ItemEvent e) { if (imageParser.isSelected() && e.getStateChange() == ItemEvent.SELECTED) { concurrentPool.setEnabled(true); } else { concurrentPool.setEnabled(false); } } }); concurrentPool = new JTextField(2); // 2 columns size concurrentPool.setMaximumSize(new Dimension(30, 20)); checkBoxPanel.add(concurrentDwn); checkBoxPanel.add(concurrentPool); optionalTasksPanel.add(checkBoxPanel); // Embedded URL match regex embeddedRE = new JLabeledTextField(JMeterUtils.getResString("web_testing_embedded_url_pattern"), 30); // $NON-NLS-1$ optionalTasksPanel.add(embeddedRE); add(optionalTasksPanel, BorderLayout.SOUTH); } @Override public Dimension getPreferredSize() { return getMinimumSize(); } private void enableConcurrentDwn(final boolean enable) { if (enable) { concurrentDwn.setEnabled(true); embeddedRE.setEnabled(true); if (concurrentDwn.isSelected()) { concurrentPool.setEnabled(true); } } else { concurrentDwn.setEnabled(false); concurrentPool.setEnabled(false); embeddedRE.setEnabled(false); } } public void itemStateChanged(final ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { enableConcurrentDwn(true); } else { enableConcurrentDwn(false); } } @Override public String getStaticLabel() { return UPMPConstant.url_config_title; } }