    001    /*
    002     * Licensed to the Apache Software Foundation (ASF) under one or more
    003     * contributor license agreements.  See the NOTICE file distributed with
    004     * this work for additional information regarding copyright ownership.
    005     * The ASF licenses this file to You under the Apache License, Version 2.0
    006     * (the "License"); you may not use this file except in compliance with
    007     * the License.  You may obtain a copy of the License at
    008     *
    009     *      http://www.apache.org/licenses/LICENSE-2.0
    010     *
    011     * Unless required by applicable law or agreed to in writing, software
    012     * distributed under the License is distributed on an "AS IS" BASIS,
    013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    014     * See the License for the specific language governing permissions and
    015     * limitations under the License.
    016     */
    017
    018    package org.apache.commons.net;
    019    import java.util.EventObject;
    020
    021    /***
    022     * There exists a large class of IETF protocols that work by sending an
    023     * ASCII text command and arguments to a server, and then receiving an
    024     * ASCII text reply.  For debugging and other purposes, it is extremely
    025     * useful to log or keep track of the contents of the protocol messages.
    026     * The ProtocolCommandEvent class coupled with the
    027     * {@link org.apache.commons.net.ProtocolCommandListener}
    028     *  interface facilitate this process.
    029     * <p>
    030     * <p>
    031     * @see ProtocolCommandListener
    032     * @see ProtocolCommandSupport
    033     ***/
    034
    035    public class ProtocolCommandEvent extends EventObject
    036    {
    037        private static final long serialVersionUID = 403743538418947240L;
    038
    039        private final int __replyCode;
    040        private final boolean __isCommand;
    041        private final String __message, __command;
    042
    043        /***
    044         * Creates a ProtocolCommandEvent signalling a command was sent to
    045         * the server.  ProtocolCommandEvents created with this constructor
    046         * should only be sent after a command has been sent, but before the
    047         * reply has been received.
    048         * <p>
    049         * @param source  The source of the event.
    050         * @param command The string representation of the command type sent, not
    051         *      including the arguments (e.g., "STAT" or "GET").
    052         * @param message The entire command string verbatim as sent to the server,
    053         *        including all arguments.
    054         ***/
    055        public ProtocolCommandEvent(Object source, String command, String message)
    056        {
    057            super(source);
    058            __replyCode = 0;
    059            __message = message;
    060            __isCommand = true;
    061            __command = command;
    062        }
    063
    064
    065        /***
    066         * Creates a ProtocolCommandEvent signalling a reply to a command was
    067         * received.  ProtocolCommandEvents created with this constructor
    068         * should only be sent after a complete command reply has been received
    069         * fromt a server.
    070         * <p>
    071         * @param source  The source of the event.
    072         * @param replyCode The integer code indicating the natureof the reply.
    073         *   This will be the protocol integer value for protocols
    074         *   that use integer reply codes, or the reply class constant
    075         *   corresponding to the reply for protocols like POP3 that use
    076         *   strings like OK rather than integer codes (i.e., POP3Repy.OK).
    077         * @param message The entire reply as received from the server.
    078         ***/
    079        public ProtocolCommandEvent(Object source, int replyCode, String message)
    080        {
    081            super(source);
    082            __replyCode = replyCode;
    083            __message = message;
    084            __isCommand = false;
    085            __command = null;
    086        }
    087
    088        /***
    089         * Returns the string representation of the command type sent (e.g., "STAT"
    090         * or "GET").  If the ProtocolCommandEvent is a reply event, then null
    091         * is returned.
    092         * <p>
    093         * @return The string representation of the command type sent, or null
    094         *         if this is a reply event.
    095         ***/
    096        public String getCommand()
    097        {
    098            return __command;
    099        }
    100
    101
    102        /***
    103         * Returns the reply code of the received server reply.  Undefined if
    104         * this is not a reply event.
    105         * <p>
    106         * @return The reply code of the received server reply.  Undefined if
    107         *         not a reply event.
    108         ***/
    109        public int getReplyCode()
    110        {
    111            return __replyCode;
    112        }
    113
    114        /***
    115         * Returns true if the ProtocolCommandEvent was generated as a result
    116         * of sending a command.
    117         * <p>
    118         * @return true If the ProtocolCommandEvent was generated as a result
    119         * of sending a command.  False otherwise.
    120         ***/
    121        public boolean isCommand()
    122        {
    123            return __isCommand;
    124        }
    125
    126        /***
    127         * Returns true if the ProtocolCommandEvent was generated as a result
    128         * of receiving a reply.
    129         * <p>
    130         * @return true If the ProtocolCommandEvent was generated as a result
    131         * of receiving a reply.  False otherwise.
    132         ***/
    133        public boolean isReply()
    134        {
    135            return !isCommand();
    136        }
    137
    138        /***
    139         * Returns the entire message sent to or received from the server.
    140         * Includes the line terminator.
    141         * <p>
    142         * @return The entire message sent to or received from the server.
    143         ***/
    144        public String getMessage()
    145        {
    146            return __message;
    147        }
    148    }