package com.blazemeter.jmeter.xmpp.actions; import com.blazemeter.jmeter.xmpp.JMeterXMPPSampler; import org.apache.jmeter.samplers.SampleResult; import org.jivesoftware.smack.filter.AndFilter; import org.jivesoftware.smack.filter.PacketFilter; import javax.swing.*; import java.awt.*; import java.io.Serializable; /** * All subclasses of this class will be displayed as actions in XMPP Sampler. * You can just create JAR with such subclasses and put it into lib/ext of JMeter and they will become available. * If class will implement PacketListener, it will be added as listener to XMPPConnection. * Every JMeterXMPPConnection has its own set of available actions */ public abstract class AbstractXMPPAction implements Cloneable, Serializable { /** * @return label that will be shown in action block title, near radio button */ public abstract String getLabel(); /** * Perfrom action, fill necessary SampleResult fields * * @param sampler sampler instance * @param res sample to fill fields. Note: do not call sampleEnd, it will be called automatically * @return if SampleResult present, it will be used. If null returned, sampler will not generate sample * @throws Exception */ public abstract SampleResult perform(JMeterXMPPSampler sampler, SampleResult res) throws Exception; /** * GUI initialization method. Create and add to panel UI elements for action * * @param panel container panel, has GridBagLayout * @param labelConstraints Constraints for labels in GridBagLayout * @param editConstraints Constraints for edit controls in GridBagLayout */ public abstract void addUI(JComponent panel, GridBagConstraints labelConstraints, GridBagConstraints editConstraints); /** * Helper method to add Component to panel with GridBagLayout * * @param panel container panel * @param constraints constraints to use when adding * @param col column number * @param row row number * @param component component to add */ protected void addToPanel(JComponent panel, GridBagConstraints constraints, int col, int row, JComponent component) { constraints.gridx = col; constraints.gridy = row; panel.add(component, constraints); } /** * Resets controls to default state (empty fields) */ public abstract void clearGui(); /** * Record data from UI controls into Sampler. You must use Sampler.setPropery* methods to record it. * * @param sampler Sampler instance */ public abstract void setSamplerProperties(JMeterXMPPSampler sampler); /** * Fill UI controls from Sampler properties * * @param sampler Sampler instance */ public abstract void setGuiFieldsFromSampler(JMeterXMPPSampler sampler); public PacketFilter getPacketFilter() { return new AndFilter(); } }