10da0f84ad9831bea470896e79b5ec207c83f258echrismair/*
20da0f84ad9831bea470896e79b5ec207c83f258echrismair * Copyright 2007 the original author or authors.
30da0f84ad9831bea470896e79b5ec207c83f258echrismair *
40da0f84ad9831bea470896e79b5ec207c83f258echrismair * Licensed under the Apache License, Version 2.0 (the "License");
50da0f84ad9831bea470896e79b5ec207c83f258echrismair * you may not use this file except in compliance with the License.
60da0f84ad9831bea470896e79b5ec207c83f258echrismair * You may obtain a copy of the License at
70da0f84ad9831bea470896e79b5ec207c83f258echrismair *
80da0f84ad9831bea470896e79b5ec207c83f258echrismair *      http://www.apache.org/licenses/LICENSE-2.0
90da0f84ad9831bea470896e79b5ec207c83f258echrismair *
100da0f84ad9831bea470896e79b5ec207c83f258echrismair * Unless required by applicable law or agreed to in writing, software
110da0f84ad9831bea470896e79b5ec207c83f258echrismair * distributed under the License is distributed on an "AS IS" BASIS,
120da0f84ad9831bea470896e79b5ec207c83f258echrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130da0f84ad9831bea470896e79b5ec207c83f258echrismair * See the License for the specific language governing permissions and
140da0f84ad9831bea470896e79b5ec207c83f258echrismair * limitations under the License.
150da0f84ad9831bea470896e79b5ec207c83f258echrismair */
160da0f84ad9831bea470896e79b5ec207c83f258echrismairpackage org.mockftpserver.core.command;
170da0f84ad9831bea470896e79b5ec207c83f258echrismair
18dfa40a06dff44f29d8d5e1d3186055ad325fc7b9chrismairimport org.slf4j.Logger;
19dfa40a06dff44f29d8d5e1d3186055ad325fc7b9chrismairimport org.slf4j.LoggerFactory;
200da0f84ad9831bea470896e79b5ec207c83f258echrismairimport org.mockftpserver.core.util.Assert;
210da0f84ad9831bea470896e79b5ec207c83f258echrismair
220da0f84ad9831bea470896e79b5ec207c83f258echrismairimport java.util.ResourceBundle;
230da0f84ad9831bea470896e79b5ec207c83f258echrismair
240da0f84ad9831bea470896e79b5ec207c83f258echrismair/**
250da0f84ad9831bea470896e79b5ec207c83f258echrismair * The abstract superclass for CommandHandler classes.
260da0f84ad9831bea470896e79b5ec207c83f258echrismair *
270da0f84ad9831bea470896e79b5ec207c83f258echrismair * @author Chris Mair
280da0f84ad9831bea470896e79b5ec207c83f258echrismair * @version $Revision$ - $Date$
290da0f84ad9831bea470896e79b5ec207c83f258echrismair */
300da0f84ad9831bea470896e79b5ec207c83f258echrismairpublic abstract class AbstractCommandHandler implements CommandHandler, ReplyTextBundleAware {
310da0f84ad9831bea470896e79b5ec207c83f258echrismair
32dfa40a06dff44f29d8d5e1d3186055ad325fc7b9chrismair    protected final Logger LOG = LoggerFactory.getLogger(getClass());
330da0f84ad9831bea470896e79b5ec207c83f258echrismair
340da0f84ad9831bea470896e79b5ec207c83f258echrismair    private ResourceBundle replyTextBundle;
350da0f84ad9831bea470896e79b5ec207c83f258echrismair
360da0f84ad9831bea470896e79b5ec207c83f258echrismair    //-------------------------------------------------------------------------
370da0f84ad9831bea470896e79b5ec207c83f258echrismair    // Support for reply text ResourceBundle
380da0f84ad9831bea470896e79b5ec207c83f258echrismair    //-------------------------------------------------------------------------
390da0f84ad9831bea470896e79b5ec207c83f258echrismair
400da0f84ad9831bea470896e79b5ec207c83f258echrismair    /**
410da0f84ad9831bea470896e79b5ec207c83f258echrismair     * Return the ResourceBundle containing the reply text messages
420da0f84ad9831bea470896e79b5ec207c83f258echrismair     *
430da0f84ad9831bea470896e79b5ec207c83f258echrismair     * @return the replyTextBundle
440da0f84ad9831bea470896e79b5ec207c83f258echrismair     * @see ReplyTextBundleAware#getReplyTextBundle()
450da0f84ad9831bea470896e79b5ec207c83f258echrismair     */
460da0f84ad9831bea470896e79b5ec207c83f258echrismair    public ResourceBundle getReplyTextBundle() {
470da0f84ad9831bea470896e79b5ec207c83f258echrismair        return replyTextBundle;
480da0f84ad9831bea470896e79b5ec207c83f258echrismair    }
490da0f84ad9831bea470896e79b5ec207c83f258echrismair
500da0f84ad9831bea470896e79b5ec207c83f258echrismair    /**
510da0f84ad9831bea470896e79b5ec207c83f258echrismair     * Set the ResourceBundle containing the reply text messages
520da0f84ad9831bea470896e79b5ec207c83f258echrismair     *
530da0f84ad9831bea470896e79b5ec207c83f258echrismair     * @param replyTextBundle - the replyTextBundle to set
540da0f84ad9831bea470896e79b5ec207c83f258echrismair     * @see ReplyTextBundleAware#setReplyTextBundle(java.util.ResourceBundle)
550da0f84ad9831bea470896e79b5ec207c83f258echrismair     */
560da0f84ad9831bea470896e79b5ec207c83f258echrismair    public void setReplyTextBundle(ResourceBundle replyTextBundle) {
570da0f84ad9831bea470896e79b5ec207c83f258echrismair        this.replyTextBundle = replyTextBundle;
580da0f84ad9831bea470896e79b5ec207c83f258echrismair    }
590da0f84ad9831bea470896e79b5ec207c83f258echrismair
600da0f84ad9831bea470896e79b5ec207c83f258echrismair    // -------------------------------------------------------------------------
610da0f84ad9831bea470896e79b5ec207c83f258echrismair    // Utility methods for subclasses
620da0f84ad9831bea470896e79b5ec207c83f258echrismair    // -------------------------------------------------------------------------
630da0f84ad9831bea470896e79b5ec207c83f258echrismair
640da0f84ad9831bea470896e79b5ec207c83f258echrismair    /**
650da0f84ad9831bea470896e79b5ec207c83f258echrismair     * Return the specified text surrounded with double quotes
660da0f84ad9831bea470896e79b5ec207c83f258echrismair     *
670da0f84ad9831bea470896e79b5ec207c83f258echrismair     * @param text - the text to surround with quotes
680da0f84ad9831bea470896e79b5ec207c83f258echrismair     * @return the text with leading and trailing double quotes
690da0f84ad9831bea470896e79b5ec207c83f258echrismair     * @throws org.mockftpserver.core.util.AssertFailedException
700da0f84ad9831bea470896e79b5ec207c83f258echrismair     *          - if text is null
710da0f84ad9831bea470896e79b5ec207c83f258echrismair     */
720da0f84ad9831bea470896e79b5ec207c83f258echrismair    protected static String quotes(String text) {
730da0f84ad9831bea470896e79b5ec207c83f258echrismair        Assert.notNull(text, "text");
740da0f84ad9831bea470896e79b5ec207c83f258echrismair        final String QUOTES = "\"";
750da0f84ad9831bea470896e79b5ec207c83f258echrismair        return QUOTES + text + QUOTES;
760da0f84ad9831bea470896e79b5ec207c83f258echrismair    }
770da0f84ad9831bea470896e79b5ec207c83f258echrismair
780da0f84ad9831bea470896e79b5ec207c83f258echrismair    /**
790da0f84ad9831bea470896e79b5ec207c83f258echrismair     * Assert that the specified number is a valid reply code
800da0f84ad9831bea470896e79b5ec207c83f258echrismair     *
810da0f84ad9831bea470896e79b5ec207c83f258echrismair     * @param replyCode - the reply code to check
820da0f84ad9831bea470896e79b5ec207c83f258echrismair     * @throws org.mockftpserver.core.util.AssertFailedException
830da0f84ad9831bea470896e79b5ec207c83f258echrismair     *          - if the replyCode is invalid
840da0f84ad9831bea470896e79b5ec207c83f258echrismair     */
850da0f84ad9831bea470896e79b5ec207c83f258echrismair    protected void assertValidReplyCode(int replyCode) {
860da0f84ad9831bea470896e79b5ec207c83f258echrismair        Assert.isTrue(replyCode > 0, "The number [" + replyCode + "] is not a valid reply code");
870da0f84ad9831bea470896e79b5ec207c83f258echrismair    }
880da0f84ad9831bea470896e79b5ec207c83f258echrismair
89dfa40a06dff44f29d8d5e1d3186055ad325fc7b9chrismair}
90