package com.googlecode.jmeter.plugins.webdriver.config.gui; import java.awt.Color; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.ItemListener; import java.net.MalformedURLException; import java.net.URL; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import kg.apc.jmeter.JMeterPluginsUtils; import org.apache.commons.lang.StringUtils; import org.apache.jmeter.gui.util.VerticalPanel; import org.apache.jmeter.testelement.TestElement; import com.googlecode.jmeter.plugins.webdriver.config.RemoteCapability; import com.googlecode.jmeter.plugins.webdriver.config.RemoteDriverConfig; public class RemoteDriverConfigGui extends WebDriverConfigGui implements ItemListener, FocusListener { private static final long serialVersionUID = 100L; JTextField remoteSeleniumGridText; JComboBox capabilitiesComboBox; JLabel errorMsg; @Override public String getStaticLabel() { return JMeterPluginsUtils.prefixLabel("Remote Driver Config"); } @Override public String getLabelResource() { return getClass().getCanonicalName(); } @Override protected JPanel createBrowserPanel() { return createProfilePanel(); } @Override protected String browserName() { return "Remote"; } @Override protected String getWikiPage() { return "RemoteDriverConfig"; } @Override public TestElement createTestElement() { RemoteDriverConfig element = new RemoteDriverConfig(); modifyTestElement(element); return element; } @Override public void configure(TestElement element) { super.configure(element); if (element instanceof RemoteDriverConfig) { RemoteDriverConfig config = (RemoteDriverConfig) element; remoteSeleniumGridText.setText(config.getSeleniumGridUrl()); capabilitiesComboBox.setSelectedItem(config.getCapability()); } } @Override public void modifyTestElement(TestElement element) { super.modifyTestElement(element); if (element instanceof RemoteDriverConfig) { RemoteDriverConfig config = (RemoteDriverConfig) element; config.setSeleniumGridUrl(remoteSeleniumGridText.getText()); config.setCapability((RemoteCapability)capabilitiesComboBox.getSelectedItem()); } } private JPanel createProfilePanel() { final JPanel browserPanel = new VerticalPanel(); final JPanel remotePanel = new VerticalPanel(); final JLabel remoteUrlLabel = new JLabel(); final JLabel capabilitiesLabel = new JLabel(); remoteUrlLabel.setText("Selenium Grid URL"); remoteSeleniumGridText = new JTextField(); remoteSeleniumGridText.setEnabled(true); remoteSeleniumGridText.addFocusListener(this); capabilitiesLabel.setText("Capability"); capabilitiesComboBox = new JComboBox(RemoteCapability.values()); remotePanel.add(remoteUrlLabel); remotePanel.add(remoteSeleniumGridText); remotePanel.add(errorMsg=new JLabel()); remotePanel.add(capabilitiesLabel); remotePanel.add(capabilitiesComboBox); errorMsg.setForeground(Color.red); browserPanel.add(remotePanel); return browserPanel; } @Override public void clearGui() { super.clearGui(); remoteSeleniumGridText.setText(StringUtils.EMPTY); capabilitiesComboBox.setSelectedIndex(2); } @Override public void focusGained(FocusEvent e) { // Nothing to do } @Override public void focusLost(FocusEvent e) { if(remoteSeleniumGridText.equals(e.getComponent()) && !isValidUrl(remoteSeleniumGridText.getText())){ errorMsg.setText("The selenium grid URL is malformed"); } else { errorMsg.setText(""); } } private boolean isValidUrl(String urlStr) { try { new URL(urlStr); return true; } catch (MalformedURLException e) { return false; } } @Override protected boolean isProxyEnabled() { return false; } @Override protected boolean isExperimentalEnabled() { return false; } }