12ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair/*
22ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Copyright 2007 the original author or authors.
32ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair *
42ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Licensed under the Apache License, Version 2.0 (the "License");
52ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * you may not use this file except in compliance with the License.
62ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * You may obtain a copy of the License at
72ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair *
82ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair *      http://www.apache.org/licenses/LICENSE-2.0
92ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair *
102ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Unless required by applicable law or agreed to in writing, software
112ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * distributed under the License is distributed on an "AS IS" BASIS,
122ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * See the License for the specific language governing permissions and
142ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * limitations under the License.
152ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair */
162ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairpackage org.mockftpserver.core.command;
172ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
182ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.core.session.Session;
192ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
202ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair/**
212ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * The abstract superclass for CommandHandler classes that default to sending
222ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * back a configured reply code and text. You can customize the returned reply
232ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * code by setting the required <code>replyCode</code> property. If only the
242ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * <code>replyCode</code> property is set, then the default reply text corresponding to that
252ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * reply code is used in the response. You can optionally configure the reply text by setting
262ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * the <code>replyMessageKey</code> or <code>replyText</code> property.
272ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * <p>
282ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Subclasses can optionally override the reply code and/or text for the reply by calling
292ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * {@link #setReplyCode(int)}, {@link #setReplyMessageKey(String)} and {@link #setReplyText(String)}.
302ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair *
312ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * @version $Revision$ - $Date$
322ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair *
332ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * @author Chris Mair
342ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair */
352ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairpublic abstract class AbstractStaticReplyCommandHandler extends AbstractTrackingCommandHandler {
362ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
372ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    // Defaults to zero; must be set to non-zero
382ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    protected int replyCode = 0;
392ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
402ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    // Defaults to null; if set to non-null, this value will override the default reply text associated with
412ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    // the replyCode.
422ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    protected String replyText = null;
432ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
442ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    // The message key for the reply text. Defaults to null. If null, use the default message associated
452ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    // with the reply code
462ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    protected String replyMessageKey = null;
472ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
482ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    /**
492ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * Set the reply code.
502ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     *
512ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * @param replyCode - the replyCode
522ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     *
532ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * @throws org.mockftpserver.core.util.AssertFailedException - if the replyCode is not valid
542ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     */
552ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    public void setReplyCode(int replyCode) {
562ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        assertValidReplyCode(replyCode);
572ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        this.replyCode = replyCode;
582ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    }
592ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
602ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    /**
612ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * Set the reply text. If null, then use the (default) message key for the replyCode.
622ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     *
632ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * @param replyText - the replyText
642ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     */
652ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    public void setReplyText(String replyText) {
662ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        this.replyText = replyText;
672ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    }
682ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
692ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    /**
702ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * Set the message key for the reply text. If null, then use the default message key.
712ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     *
722ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * @param replyMessageKey - the replyMessageKey to set
732ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     */
742ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    public void setReplyMessageKey(String replyMessageKey) {
752ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        this.replyMessageKey = replyMessageKey;
762ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    }
772ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
782ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    // -------------------------------------------------------------------------
792ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    // Utility methods for subclasses
802ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    // -------------------------------------------------------------------------
812ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
822ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    /**
832ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * Send the reply using the replyCode and message key/text configured for this command handler.
842ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * @param session - the Session
852ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     *
862ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * @throws org.mockftpserver.core.util.AssertFailedException if the replyCode is not valid
872ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     */
882ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    protected void sendReply(Session session) {
892ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        sendReply(session, null);
902ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    }
912ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
922ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    /**
932ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * Send the reply using the replyCode and message key/text configured for this command handler.
942ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * @param session - the Session
952ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * @param messageParameter - message parameter; may be null
962ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     *
972ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * @throws org.mockftpserver.core.util.AssertFailedException if the replyCode is not valid
982ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     */
992ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    protected void sendReply(Session session, Object messageParameter) {
1002ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        Object[] parameters = (messageParameter == null) ? null : new Object[] { messageParameter };
1012ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        sendReply(session, replyCode, replyMessageKey, replyText, parameters);
1022ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    }
1032ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
1042ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair}