package org.asteriskjava.manager.event; /** * AgiExecEvents are triggered when an AGI command is executed. For each command two events are triggered: * one before excution ("Start") and one after execution ("End"). * <p/> * The following sub events are reported: * <ul> * <li>Start: Execution of an AGI command has started.</li> * <li>End: Execution of an AGI command has finished.</li> * </ul> * It is implemented in <code>res/res_agi.c</code>. * <p/> * Available since Asterisk 1.6 * * @author srt * @version $Id: AgiExecEvent.java 959 2008-02-02 23:56:59Z srt $ * @since 1.0.0 */ public class AgiExecEvent extends ManagerEvent { /** * Serializable version identifier. */ static final long serialVersionUID = 0L; /** * Execution of an AGI command has started. */ public static final String SUB_EVENT_START = "Start"; /** * Execution of an AGI command has finished. */ public static final String SUB_EVENT_END = "End"; private String channel; private String subEvent; private String commandId; private String command; private Integer resultCode; private String result; /** * Creates a new AgiExecEvent. * * @param source */ public AgiExecEvent(Object source) { super(source); } /** * Returns the name of the channel this event occurred on. * * @return the name of the channel this event occurred on. */ public String getChannel() { return channel; } /** * Sets the name of the channel this event occurred on. * * @param channel the name of the channel this event occurred on. */ public void setChannel(String channel) { this.channel = channel; } /** * Returns the sub event type. This is either "Start" or "End". * * @return the sub event type. * @see #SUB_EVENT_START * @see #SUB_EVENT_END */ public String getSubEvent() { return subEvent; } /** * Sets the sub event type. * * @param subEvent the sub event type. */ public void setSubEvent(String subEvent) { this.subEvent = subEvent; } /** * Returns the command id. The command is a random number generated by Asterisk that allows * matching the "End" sub event with the corresponding "Start" sub event. * * @return the command id. */ public String getCommandId() { return commandId; } /** * Sets the command id. * * @param commandId the command id. */ public void setCommandId(String commandId) { this.commandId = commandId; } /** * Returns the AGI command. * * @return the AGI command. */ public String getCommand() { return command; } /** * Sets the AGI command. * * @param command the AGI command. */ public void setCommand(String command) { this.command = command; } /** * Returns the result code. * * @return the result code. */ public Integer getResultCode() { return resultCode; } /** * Sets the result code. * * @param resultCode the result code. */ public void setResultCode(Integer resultCode) { this.resultCode = resultCode; } /** * Returns the result as a string.<p> * They correspond to the numeric values returned by {@link #getResultCode()}. Usually you will want to * stick with the numeric values.<p> * Possible values are: * <ul> * <li>Failure (corresponds to result code -1)</li> * <li>Success (corresponds to result code 200)</li> * <li>KeepAlive (corresponds to result code 210)</li> * <li>Command not permitted on a dead channel (corresponds to result code 511)</li> * <li>Usage (corresponds to result code 520)</li> * </ul> * * @return a string respresentation of the result. */ public String getResult() { return result; } /** * Sets the string respresentation of the result. * * @param result a string respresentation of the result. */ public void setResult(String result) { this.result = result; } /** * Checks is this a start sub event. * * @return <code>true</code> if this is a "Start" sub event, <code>false</code> otherwise. */ public boolean isStart() { return isSubEvent(SUB_EVENT_START); } /** * Checks is this an end sub event. * * @return <code>true</code> if this is an "End" sub event, <code>false</code> otherwise. */ public boolean isEnd() { return isSubEvent(SUB_EVENT_END); } private boolean isSubEvent(String subEvent) { return this.subEvent != null && this.subEvent.equalsIgnoreCase(subEvent); } }