    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     * @author Daniel F. Savarese
    034     ***/
    035
    036    public class ProtocolCommandEvent extends EventObject
    037    {
    038        private final int __replyCode;
    039        private final boolean __isCommand;
    040        private final String __message, __command;
    041
    042        /***
    043         * Creates a ProtocolCommandEvent signalling a command was sent to
    044         * the server.  ProtocolCommandEvents created with this constructor
    045         * should only be sent after a command has been sent, but before the
    046         * reply has been received.
    047         * <p>
    048         * @param source  The source of the event.
    049         * @param command The string representation of the command type sent, not
    050         *      including the arguments (e.g., "STAT" or "GET").
    051         * @param message The entire command string verbatim as sent to the server,
    052         *        including all arguments.
    053         ***/
    054        public ProtocolCommandEvent(Object source, String command, String message)
    055        {
    056            super(source);
    057            __replyCode = 0;
    058            __message = message;
    059            __isCommand = true;
    060            __command = command;
    061        }
    062
    063
    064        /***
    065         * Creates a ProtocolCommandEvent signalling a reply to a command was
    066         * received.  ProtocolCommandEvents created with this constructor
    067         * should only be sent after a complete command reply has been received
    068         * fromt a server.
    069         * <p>
    070         * @param source  The source of the event.
    071         * @param replyCode The integer code indicating the natureof the reply.
    072         *   This will be the protocol integer value for protocols
    073         *   that use integer reply codes, or the reply class constant
    074         *   corresponding to the reply for protocols like POP3 that use
    075         *   strings like OK rather than integer codes (i.e., POP3Repy.OK).
    076         * @param message The entire reply as received from the server.
    077         ***/
    078        public ProtocolCommandEvent(Object source, int replyCode, String message)
    079        {
    080            super(source);
    081            __replyCode = replyCode;
    082            __message = message;
    083            __isCommand = false;
    084            __command = null;
    085        }
    086
    087        /***
    088         * Returns the string representation of the command type sent (e.g., "STAT"
    089         * or "GET").  If the ProtocolCommandEvent is a reply event, then null
    090         * is returned.
    091         * <p>
    092         * @return The string representation of the command type sent, or null
    093         *         if this is a reply event.
    094         ***/
    095        public String getCommand()
    096        {
    097            return __command;
    098        }
    099
    100
    101        /***
    102         * Returns the reply code of the received server reply.  Undefined if
    103         * this is not a reply event.
    104         * <p>
    105         * @return The reply code of the received server reply.  Undefined if
    106         *         not a reply event.
    107         ***/
    108        public int getReplyCode()
    109        {
    110            return __replyCode;
    111        }
    112
    113        /***
    114         * Returns true if the ProtocolCommandEvent was generated as a result
    115         * of sending a command.
    116         * <p>
    117         * @return true If the ProtocolCommandEvent was generated as a result
    118         * of sending a command.  False otherwise.
    119         ***/
    120        public boolean isCommand()
    121        {
    122            return __isCommand;
    123        }
    124
    125        /***
    126         * Returns true if the ProtocolCommandEvent was generated as a result
    127         * of receiving a reply.
    128         * <p>
    129         * @return true If the ProtocolCommandEvent was generated as a result
    130         * of receiving a reply.  False otherwise.
    131         ***/
    132        public boolean isReply()
    133        {
    134            return !isCommand();
    135        }
    136
    137        /***
    138         * Returns the entire message sent to or received from the server.
    139         * <p>
    140         * @return The entire message sent to or received from the server.
    141         ***/
    142        public String getMessage()
    143        {
    144            return __message;
    145        }
    146    }