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 }