blob: ae3120bca900d64c49261d46bc1a4b6abcb5af41 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.ftpserver;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.ftpserver.command.CommandFactory;
import org.apache.ftpserver.ftplet.FileSystemFactory;
import org.apache.ftpserver.ftplet.Ftplet;
import org.apache.ftpserver.ftplet.UserManager;
import org.apache.ftpserver.ftpletcontainer.impl.DefaultFtpletContainer;
import org.apache.ftpserver.impl.DefaultFtpServer;
import org.apache.ftpserver.impl.DefaultFtpServerContext;
import org.apache.ftpserver.listener.Listener;
import org.apache.ftpserver.message.MessageResource;
/**
* This is the starting point of all the servers. Creates server instances based on
* the provided configuration.
*
* @author <a href="http://mina.apache.org">Apache MINA Project</a>
*/
public class FtpServerFactory {
private DefaultFtpServerContext serverContext;
/**
* Creates a server with the default configuration
*
* @throws Exception
*/
public FtpServerFactory() {
serverContext = new DefaultFtpServerContext();
}
/**
* Create a {@link DefaultFtpServer} instance based
* on the provided configuration
* @return The {@link DefaultFtpServer} instance
*/
public FtpServer createServer() {
return new DefaultFtpServer(serverContext);
}
/**
* Get all listeners available on servers created by this factory
*
* @return The current listeners
*/
public Map<String, Listener> getListeners() {
return serverContext.getListeners();
}
/**
* Get a specific {@link Listener} identified by its name
*
* @param name
* The name of the listener
* @return The {@link Listener} matching the provided name
*/
public Listener getListener(final String name) {
return serverContext.getListener(name);
}
/**
* Add a {@link Listener} to this factory
* @param name The name of the listener
* @param listener The {@link Listener}
*/
public void addListener(final String name, final Listener listener) {
serverContext.addListener(name, listener);
}
/**
* Set the listeners for servers created by this factory, replaces existing listeners
*
* @param listeners
* The listeners to use for this server with the name as the key
* and the listener as the value
* @throws IllegalStateException
* If a custom server context has been set
*/
public void setListeners(final Map<String, Listener> listeners) {
serverContext.setListeners(listeners);
}
/**
* Get all {@link Ftplet}s registered by servers created by this factory
*
* @return All {@link Ftplet}s
*/
public Map<String, Ftplet> getFtplets() {
return serverContext.getFtpletContainer().getFtplets();
}
/**
* Set the {@link Ftplet}s to be active by servers created by this factory. Replaces existing
* {@link Ftplet}s
*
* @param ftplets
* Ftplets as a map with the name as the key and the Ftplet as
* the value. The Ftplet container will iterate over the map in the
* order provided by the Map. If invocation order of Ftplets is of importance,
* make sure to provide a ordered Map, for example {@link LinkedHashMap}.
* @throws IllegalStateException
* If a custom server context has been set
*/
public void setFtplets(final Map<String, Ftplet> ftplets) {
serverContext.setFtpletContainer(new DefaultFtpletContainer(ftplets));
}
/**
* Retrieve the user manager used by servers created by this factory
*
* @return The user manager
*/
public UserManager getUserManager() {
return serverContext.getUserManager();
}
/**
* Set the user manager to be used by servers created by this factory
*
* @param userManager
* The {@link UserManager}
* @throws IllegalStateException
* If a custom server context has been set
*/
public void setUserManager(final UserManager userManager) {
serverContext.setUserManager(userManager);
}
/**
* Retrieve the file system used by servers created by this factory
*
* @return The {@link FileSystemFactory}
*/
public FileSystemFactory getFileSystem() {
return serverContext.getFileSystemManager();
}
/**
* Set the file system to be used by servers created by this factory
*
* @param fileSystem
* The {@link FileSystemFactory}
* @throws IllegalStateException
* If a custom server context has been set
*/
public void setFileSystem(final FileSystemFactory fileSystem) {
serverContext.setFileSystemManager(fileSystem);
}
/**
* Retrieve the command factory used by servers created by this factory
*
* @return The {@link CommandFactory}
*/
public CommandFactory getCommandFactory() {
return serverContext.getCommandFactory();
}
/**
* Set the command factory to be used by servers created by this factory
*
* @param commandFactory
* The {@link CommandFactory}
* @throws IllegalStateException
* If a custom server context has been set
*/
public void setCommandFactory(final CommandFactory commandFactory) {
serverContext.setCommandFactory(commandFactory);
}
/**
* Retrieve the message resource used by servers created by this factory
*
* @return The {@link MessageResource}
*/
public MessageResource getMessageResource() {
return serverContext.getMessageResource();
}
/**
* Set the message resource to be used with by servers created by this factory
*
* @param messageResource
* The {@link MessageResource}
* @throws IllegalStateException
* If a custom server context has been set
*/
public void setMessageResource(final MessageResource messageResource) {
serverContext.setMessageResource(messageResource);
}
/**
* Retrieve the connection configuration this server
*
* @return The {@link MessageResource}
*/
public ConnectionConfig getConnectionConfig() {
return serverContext.getConnectionConfig();
}
/**
* Set the message resource to be used with this server
* @param connectionConfig The {@link ConnectionConfig} to be used
* by servers created by this factory
*
* @param messageResource
* The {@link MessageResource}
* @throws IllegalStateException
* If a custom server context has been set
*/
public void setConnectionConfig(final ConnectionConfig connectionConfig) {
serverContext.setConnectionConfig(connectionConfig);
}
}