package com.blazemeter.jmeter.xmpp.actions; import com.blazemeter.jmeter.xmpp.JMeterXMPPSampler; import org.apache.jmeter.samplers.SampleResult; import org.jivesoftware.smack.packet.IQ; import org.jivesoftware.smackx.disco.ServiceDiscoveryManager; import javax.swing.*; import java.awt.*; public class ServiceDiscovery extends AbstractXMPPAction { private static final java.lang.String ENTITY_ID = "entity_id"; private static final java.lang.String TYPE = "discovery_type"; private JTextField entityID; private JComboBox<String> discoType; @Override public String getLabel() { return "Service Discovery (XEP-0030)"; } @Override public SampleResult perform(JMeterXMPPSampler sampler, SampleResult res) throws Exception { String entID = sampler.getPropertyAsString(ENTITY_ID); res.setSamplerData("Entity ID: " + entID); ServiceDiscoveryManager discoMgr = ServiceDiscoveryManager.getInstanceFor(sampler.getXMPPConnection()); IQ info; if (Type.valueOf(sampler.getPropertyAsString(TYPE)) == Type.info) { info = discoMgr.discoverInfo(entID); } else { info = discoMgr.discoverItems(entID); } res.setResponseData(info.toXML().toString().getBytes()); return res; } @Override public void addUI(JComponent panel, GridBagConstraints labelConstraints, GridBagConstraints editConstraints) { addToPanel(panel, labelConstraints, 0, 0, new JLabel("Entity ID: ", JLabel.RIGHT)); addToPanel(panel, editConstraints, 1, 0, entityID = new JTextField(20)); addToPanel(panel, labelConstraints, 0, 1, new JLabel("Type: ", JLabel.RIGHT)); addToPanel(panel, editConstraints, 1, 1, discoType = new JComboBox<>()); discoType.addItem(Type.items.toString()); discoType.addItem(Type.info.toString()); } @Override public void clearGui() { entityID.setText(""); discoType.setSelectedIndex(0); } @Override public void setSamplerProperties(JMeterXMPPSampler sampler) { sampler.setProperty(ENTITY_ID, entityID.getText()); sampler.setProperty(TYPE, discoType.getSelectedItem().toString()); } @Override public void setGuiFieldsFromSampler(JMeterXMPPSampler sampler) { entityID.setText(sampler.getPropertyAsString(ENTITY_ID)); discoType.setSelectedItem(Type.valueOf(sampler.getPropertyAsString(TYPE, Type.items.toString()))); } public enum Type {info, items} }