1b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair/* 2b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Copyright 2007 the original author or authors. 3b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 4b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 5b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * you may not use this file except in compliance with the License. 6b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * You may obtain a copy of the License at 7b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 8b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * http://www.apache.org/licenses/LICENSE-2.0 9b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 10b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Unless required by applicable law or agreed to in writing, software 11b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * distributed under the License is distributed on an "AS IS" BASIS, 12b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * See the License for the specific language governing permissions and 14b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * limitations under the License. 15b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */ 16b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairpackage org.mockftpserver.core.command; 17b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 18b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport org.mockftpserver.core.session.Session; 19b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 20b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair/** 21b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * The abstract superclass for CommandHandler classes that default to sending 22b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * back a configured reply code and text. You can customize the returned reply 23b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * code by setting the required <code>replyCode</code> property. If only the 24b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * <code>replyCode</code> property is set, then the default reply text corresponding to that 25b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * reply code is used in the response. You can optionally configure the reply text by setting 26b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * the <code>replyMessageKey</code> or <code>replyText</code> property. 27b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * <p> 28b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Subclasses can optionally override the reply code and/or text for the reply by calling 29b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * {@link #setReplyCode(int)}, {@link #setReplyMessageKey(String)} and {@link #setReplyText(String)}. 30b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 31b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @version $Revision$ - $Date$ 32b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 33b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @author Chris Mair 34b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */ 35b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairpublic abstract class AbstractStaticReplyCommandHandler extends AbstractTrackingCommandHandler { 36b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 37b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair // Defaults to zero; must be set to non-zero 38b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair protected int replyCode = 0; 39b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 40b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair // Defaults to null; if set to non-null, this value will override the default reply text associated with 41b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair // the replyCode. 42b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair protected String replyText = null; 43b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 44b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair // The message key for the reply text. Defaults to null. If null, use the default message associated 45b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair // with the reply code 46b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair protected String replyMessageKey = null; 47b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 48b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair /** 49b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Set the reply code. 50b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 51b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @param replyCode - the replyCode 52b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 53b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @throws org.mockftpserver.core.util.AssertFailedException - if the replyCode is not valid 54b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */ 55b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair public void setReplyCode(int replyCode) { 56b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assertValidReplyCode(replyCode); 57b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair this.replyCode = replyCode; 58b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 59b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 60b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair /** 61b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Set the reply text. If null, then use the (default) message key for the replyCode. 62b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 63b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @param replyText - the replyText 64b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */ 65b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair public void setReplyText(String replyText) { 66b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair this.replyText = replyText; 67b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 68b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 69b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair /** 70b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Set the message key for the reply text. If null, then use the default message key. 71b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 72b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @param replyMessageKey - the replyMessageKey to set 73b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */ 74b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair public void setReplyMessageKey(String replyMessageKey) { 75b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair this.replyMessageKey = replyMessageKey; 76b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 77b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 78b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair // ------------------------------------------------------------------------- 79b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair // Utility methods for subclasses 80b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair // ------------------------------------------------------------------------- 81b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 82b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair /** 83b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Send the reply using the replyCode and message key/text configured for this command handler. 84b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @param session - the Session 85b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 86b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @throws org.mockftpserver.core.util.AssertFailedException if the replyCode is not valid 87b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */ 88b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair protected void sendReply(Session session) { 89b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair sendReply(session, null); 90b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 91b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 92b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair /** 93b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Send the reply using the replyCode and message key/text configured for this command handler. 94b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @param session - the Session 95b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @param messageParameter - message parameter; may be null 96b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 97b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @throws org.mockftpserver.core.util.AssertFailedException if the replyCode is not valid 98b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */ 99b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair protected void sendReply(Session session, Object messageParameter) { 100b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair Object[] parameters = (messageParameter == null) ? null : new Object[] { messageParameter }; 101b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair sendReply(session, replyCode, replyMessageKey, replyText, parameters); 102b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 103b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 104b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair}