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}