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.stub.command;
172ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
182ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.core.command.Command;
192ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.core.command.CommandHandler;
202ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.core.command.InvocationRecord;
212ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.core.command.ReplyCodes;
222ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.core.session.Session;
232ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.core.util.Assert;
242ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
252ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair/**
262ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * CommandHandler for the SYST (System) command. Send back a reply code of 215. By default,
272ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * return "WINDOWS" as the system name. You can customize the returned name by
282ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * setting the <code>systemName</code> property.
292ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * <p/>
302ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * See the available system names listed in the Assigned Numbers document
312ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * (<a href="http://www.ietf.org/rfc/rfc943">RFC 943</a>).
322ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * <p/>
332ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Each invocation record stored by this CommandHandler contains no data elements.
342ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair *
352ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * @author Chris Mair
362ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * @version $Revision$ - $Date$
372ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair */
382ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairpublic class SystCommandHandler extends AbstractStubCommandHandler implements CommandHandler {
392ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
402ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    private String systemName = "WINDOWS";
412ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
422ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    /**
432ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * Constructor. Initialize the replyCode.
442ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     */
452ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    public SystCommandHandler() {
462ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        setReplyCode(ReplyCodes.SYST_OK);
472ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    }
482ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
492ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    public void handleCommand(Command command, Session session, InvocationRecord invocationRecord) {
502ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        sendReply(session, quotes(systemName));
512ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    }
522ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
532ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    /**
542ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * Set the systemName String to be returned by this command
552ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     *
562ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * @param systemName - the systemName
572ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     */
582ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    public void setSystemName(String systemName) {
592ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        Assert.notNull(systemName, "systemName");
602ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        this.systemName = systemName;
612ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    }
622ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
632ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair}
64