package com.blazemeter.jmeter.xmpp.actions; import com.blazemeter.jmeter.xmpp.JMeterXMPPSampler; import org.apache.jmeter.samplers.SampleResult; import org.jivesoftware.smack.Roster; import org.jivesoftware.smack.RosterEntry; import javax.swing.*; import java.awt.*; public class RosterAction extends AbstractXMPPAction { private static final java.lang.String ENTRY = "roster_entry"; private static final java.lang.String ACTION = "roster_action"; private JComboBox<Action> rosterAction; private JTextField rosterItem; @Override public String getLabel() { return "Roster Actions"; } @Override public void addUI(JComponent mainPanel, GridBagConstraints labelConstraints, GridBagConstraints editConstraints) { addToPanel(mainPanel, labelConstraints, 0, 0, new JLabel("Type: ", JLabel.RIGHT)); addToPanel(mainPanel, editConstraints, 1, 0, rosterAction = new JComboBox<>()); rosterAction.addItem(Action.get_roster); rosterAction.addItem(Action.add_item); rosterAction.addItem(Action.delete_item); addToPanel(mainPanel, labelConstraints, 0, 1, new JLabel("JID: ", JLabel.RIGHT)); addToPanel(mainPanel, editConstraints, 1, 1, rosterItem = new JTextField(20)); } @Override public SampleResult perform(JMeterXMPPSampler sampler, SampleResult res) throws Exception { Action action = Action.valueOf(sampler.getPropertyAsString(ACTION, Action.get_roster.toString())); Roster roster = sampler.getXMPPConnection().getRoster(); String entry = sampler.getPropertyAsString(ENTRY); res.setSamplerData(action.toString() + ": " + entry); if (action == Action.get_roster) { res.setResponseData(rosterToString(roster).getBytes()); } else if (action == Action.add_item) { roster.createEntry(entry, entry, new String[0]); } else if (action == Action.delete_item) { RosterEntry rosterEntry = roster.getEntry(entry); if (rosterEntry != null) { roster.removeEntry(rosterEntry); } } return res; } @Override public void clearGui() { rosterAction.setSelectedIndex(0); rosterItem.setText(""); } @Override public void setSamplerProperties(JMeterXMPPSampler sampler) { sampler.setProperty(ACTION, rosterAction.getSelectedItem().toString()); sampler.setProperty(ENTRY, rosterItem.getText()); } @Override public void setGuiFieldsFromSampler(JMeterXMPPSampler sampler) { rosterItem.setText(sampler.getPropertyAsString(ENTRY)); rosterAction.setSelectedItem(Action.valueOf(sampler.getPropertyAsString(ACTION, Action.get_roster.toString()))); } private String rosterToString(Roster roster) { StringBuilder res = new StringBuilder(); for (RosterEntry entry : roster.getEntries()) { res.append(entry.toString()); res.append(':'); res.append(roster.getPresence(entry.getUser()).toString()); res.append('\n'); } return res.toString(); } public enum Action { get_roster, add_item, delete_item } }