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 int __replyCode;
039 private boolean __isCommand;
040 private 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 }