117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair/*
217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Copyright 2007 the original author or authors.
317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair *
417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Licensed under the Apache License, Version 2.0 (the "License");
517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * you may not use this file except in compliance with the License.
617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * You may obtain a copy of the License at
717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair *
817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair *      http://www.apache.org/licenses/LICENSE-2.0
917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair *
1017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Unless required by applicable law or agreed to in writing, software
1117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * distributed under the License is distributed on an "AS IS" BASIS,
1217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * See the License for the specific language governing permissions and
1417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * limitations under the License.
1517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair */
1617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairpackage org.mockftpserver.stub.command;
1717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair
1817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport org.mockftpserver.core.command.AbstractCommandHandler;
1917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport org.mockftpserver.core.session.Session;
2017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport org.mockftpserver.core.util.AssertFailedException;
2117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairimport org.mockftpserver.stub.StubFtpServer;
2217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair
2317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair/**
2417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * The abstract superclass for CommandHandler classes for the {@link StubFtpServer}.
2517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * <p>
2617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * Subclasses can optionally override the reply code and/or text for the reply by calling
2717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * {@link #setReplyCode(int)}, {@link #setReplyMessageKey(String)} and {@link #setReplyText(String)}.
2817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair *
2917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * @version $Revision$ - $Date$
3017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair *
3117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair * @author Chris Mair
3217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair */
3317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismairpublic abstract class AbstractStubCommandHandler extends AbstractCommandHandler {
3417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair
3517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    // Defaults to zero; must be set to non-zero
3617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    protected int replyCode = 0;
3717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair
3817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    // Defaults to null; if set to non-null, this value will override the default reply text associated with
3917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    // the replyCode.
4017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    protected String replyText = null;
4117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair
4217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    // The message key for the reply text. Defaults to null. If null, use the default message associated
4317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    // with the reply code
4417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    protected String replyMessageKey = null;
4517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair
4617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    /**
4717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     * Set the reply code.
4817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     *
4917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     * @param replyCode - the replyCode
5017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     *
5117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     * @throws AssertFailedException - if the replyCode is not valid
5217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     */
5317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    public void setReplyCode(int replyCode) {
5417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair        assertValidReplyCode(replyCode);
5517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair        this.replyCode = replyCode;
5617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    }
5717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair
5817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    /**
5917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     * Set the reply text. If null, then use the (default) message key for the replyCode.
6017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     *
6117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     * @param replyText - the replyText
6217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     */
6317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    public void setReplyText(String replyText) {
6417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair        this.replyText = replyText;
6517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    }
6617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair
6717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    /**
6817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     * Set the message key for the reply text. If null, then use the default message key.
6917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     *
7017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     * @param replyMessageKey - the replyMessageKey to set
7117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     */
7217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    public void setReplyMessageKey(String replyMessageKey) {
7317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair        this.replyMessageKey = replyMessageKey;
7417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    }
7517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair
7617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    // -------------------------------------------------------------------------
7717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    // Utility methods for subclasses
7817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    // -------------------------------------------------------------------------
7917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair
8017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    /**
8117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     * Send the reply using the replyCode and message key/text configured for this command handler.
8217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     * @param session - the Session
8317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     *
8417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     * @throws AssertFailedException if the replyCode is not valid
8517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     */
8617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    protected void sendReply(Session session) {
8717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair        sendReply(session, null);
8817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    }
8917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair
9017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    /**
9117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     * Send the reply using the replyCode and message key/text configured for this command handler.
9217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     * @param session - the Session
9317f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     * @param messageParameter - message parameter; may be null
9417f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     *
9517f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     * @throws AssertFailedException if the replyCode is not valid
9617f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair     */
9717f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    protected void sendReply(Session session, Object messageParameter) {
9817f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair        Object[] parameters = (messageParameter == null) ? null : new Object[] { messageParameter };
9917f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair        sendReply(session, replyCode, replyMessageKey, replyText, parameters);
10017f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair    }
10117f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair
10217f899cea435aaf91624af2a93bc24bcfcd5fc2dchrismair}
103