You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ng...@apache.org on 2008/08/07 15:28:27 UTC
svn commit: r683614 - in /mina/ftpserver/trunk/core/src:
main/java/org/apache/ftpserver/ main/java/org/apache/ftpserver/message/
main/java/org/apache/ftpserver/usermanager/
main/java/org/apache/ftpserver/util/
test/java/org/apache/ftpserver/clienttests/
Author: ngn
Date: Thu Aug 7 06:28:26 2008
New Revision: 683614
URL: http://svn.apache.org/viewvc?rev=683614&view=rev
Log:
Make sure PropertiesUserManager does not start writing to disc unless asked to (FTPSERVER-144)
Make DefaultFtpServerContext init less messy
Modified:
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpServer.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/MessageResourceImpl.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/PropertiesUserManager.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/util/BaseProperties.java
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ClientTestTemplate.java
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java?rev=683614&r1=683613&r2=683614&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java Thu Aug 7 06:28:26 2008
@@ -53,12 +53,12 @@
private final Logger LOG = LoggerFactory
.getLogger(DefaultFtpServerContext.class);
- private MessageResource messageResource;
- private UserManager userManager;
- private FileSystemManager fileSystemManager;
- private FtpletContainer ftpletContainer;
- private FtpStatistics statistics;
- private CommandFactory commandFactory;
+ private MessageResource messageResource = new MessageResourceImpl();
+ private UserManager userManager = new PropertiesUserManager();
+ private FileSystemManager fileSystemManager = new NativeFileSystemManager();
+ private FtpletContainer ftpletContainer = new DefaultFtpletContainer();
+ private FtpStatistics statistics = new FtpStatisticsImpl();
+ private CommandFactory commandFactory = new DefaultCommandFactory();
private ConnectionConfig connectionConfig = new DefaultConnectionConfig();
private Map<String, Listener> listeners = new HashMap<String, Listener>();
@@ -69,53 +69,15 @@
new ConcurrentLoginPermission(20, 2),
new TransferRatePermission(4800, 4800) };
- /**
- * Constructor - set the root configuration.
- */
public DefaultFtpServerContext() throws Exception {
- this(true);
- }
-
- public DefaultFtpServerContext(boolean createDefaultUsers) throws Exception {
-
- try {
- createListeners();
-
- // create all the components
- messageResource = new MessageResourceImpl();
- ((MessageResourceImpl) messageResource)
- .configure();
-
- userManager = new PropertiesUserManager();
- ((PropertiesUserManager) userManager).configure();
-
- fileSystemManager = new NativeFileSystemManager();
-
- statistics = new FtpStatisticsImpl();
-
- commandFactory = new DefaultCommandFactory();
-
- // create user if necessary
- // TODO turn into a setter
- if (createDefaultUsers) {
- createDefaultUsers();
- }
-
- ftpletContainer = new DefaultFtpletContainer();
- } catch (Exception ex) {
- dispose();
- throw ex;
- }
- }
-
- private void createListeners() throws Exception {
- listeners.put("default", new NioListener());
+ // create the default listener
+ listeners.put("default", new NioListener());
}
/**
* Create default users.
*/
- private void createDefaultUsers() throws Exception {
+ public void createDefaultUsers() throws Exception {
UserManager userManager = getUserManager();
// create admin user
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpServer.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpServer.java?rev=683614&r1=683613&r2=683614&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpServer.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpServer.java Thu Aug 7 06:28:26 2008
@@ -44,9 +44,10 @@
private FtpServerContext serverContext;
- private boolean suspended;
+ private boolean suspended = false;
private boolean started = false;
+
/**
* Creates a server with the default configuration
@@ -59,7 +60,6 @@
/**
* Constructor. Set a custom the server context.
* @throws Exception
- * TODO consider removing
*/
public FtpServer(final FtpServerContext serverContext) throws Exception {
this.serverContext = serverContext;
@@ -69,6 +69,7 @@
* Start the server. Open a new listener thread.
*/
public void start() throws Exception {
+
Map<String, Listener> listeners = serverContext.getListeners();
for (Listener listener : listeners.values()) {
listener.start(serverContext);
@@ -115,6 +116,10 @@
* Suspend further requests
*/
public void suspend() {
+ if(!started) {
+ return;
+ }
+
// stop all listeners
Map<String, Listener> listeners = serverContext.getListeners();
for (Listener listener : listeners.values()) {
@@ -128,6 +133,10 @@
* Resume the server handler
*/
public void resume() {
+ if(!suspended) {
+ return;
+ }
+
Map<String, Listener> listeners = serverContext.getListeners();
for (Listener listener : listeners.values()) {
listener.resume();
@@ -150,14 +159,6 @@
public FtpServerContext getServerContext() {
return serverContext;
}
-
- /**
- * Set a custom server context to be used for this server
- * @param serverContext The custom server context
- */
- public void setServerContext(final FtpServerContext serverContext) {
- this.serverContext = serverContext;
- }
private DefaultFtpServerContext checkAndGetContext() {
if(getServerContext() instanceof DefaultFtpServerContext) {
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/MessageResourceImpl.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/MessageResourceImpl.java?rev=683614&r1=683613&r2=683614&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/MessageResourceImpl.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/MessageResourceImpl.java Thu Aug 7 06:28:26 2008
@@ -27,8 +27,10 @@
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.Map;
import java.util.Properties;
+import org.apache.ftpserver.FtpServerConfigurationException;
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.interfaces.MessageResource;
import org.apache.ftpserver.util.IoUtils;
@@ -51,9 +53,11 @@
private final static String RESOURCE_PATH = "org/apache/ftpserver/message/";
private String[] languages;
- private HashMap<String, PropertiesPair> messages;
+ private Map<String, PropertiesPair> messages;
private File customMessageDirectory;
+ private boolean isConfigured = false;
+
private static class PropertiesPair {
public Properties defaultProperties = new Properties();
public Properties customProperties = new Properties();
@@ -86,7 +90,7 @@
/**
* Configure - load properties file.
*/
- public void configure() throws FtpException {
+ public void configure() {
// populate different properties
messages = new HashMap<String, PropertiesPair>();
if(languages != null) {
@@ -100,10 +104,19 @@
}
/**
+ * Lazy init the user manager
+ */
+ private void lazyInit() {
+ if(!isConfigured ) {
+ configure();
+ }
+ }
+
+ /**
* Create Properties pair object. It stores the default
* and the custom messages.
*/
- private PropertiesPair createPropertiesPair(String lang) throws FtpException {
+ private PropertiesPair createPropertiesPair(String lang) {
PropertiesPair pair = new PropertiesPair();
// load default resource
@@ -123,7 +136,7 @@
}
catch(Exception ex) {
LOG.warn("MessageResourceImpl.createPropertiesPair()", ex);
- throw new FtpException("MessageResourceImpl.createPropertiesPair()", ex);
+ throw new FtpServerConfigurationException("MessageResourceImpl.createPropertiesPair()", ex);
}
finally {
IoUtils.close(in);
@@ -146,7 +159,7 @@
}
catch(Exception ex) {
LOG.warn("MessageResourceImpl.createPropertiesPair()", ex);
- throw new FtpException("MessageResourceImpl.createPropertiesPair()", ex);
+ throw new FtpServerConfigurationException("MessageResourceImpl.createPropertiesPair()", ex);
}
finally {
IoUtils.close(in);
@@ -170,6 +183,7 @@
* Get the message. If the message not found, it will return null.
*/
public String getMessage(int code, String subId, String language) {
+ lazyInit();
// find the message key
String key = String.valueOf(code);
@@ -209,6 +223,8 @@
* Get all messages.
*/
public Properties getMessages(String language) {
+ lazyInit();
+
Properties messages = new Properties();
// load properties sequentially
@@ -233,6 +249,7 @@
* Save properties in file.
*/
public void save(Properties prop, String language) throws FtpException {
+ lazyInit();
// null properties - nothing to save
if(prop == null) {
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/PropertiesUserManager.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/PropertiesUserManager.java?rev=683614&r1=683613&r2=683614&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/PropertiesUserManager.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/PropertiesUserManager.java Thu Aug 7 06:28:26 2008
@@ -20,6 +20,7 @@
package org.apache.ftpserver.usermanager;
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
@@ -119,21 +120,18 @@
*/
public void configure() {
isConfigured = true;
- File dir = userDataFile.getParentFile();
- if( (!dir.exists()) && (!dir.mkdirs()) ) {
- String dirName = dir.getAbsolutePath();
- throw new FtpServerConfigurationException("Cannot create directory for user data file : " + dirName);
- }
-
- if(!userDataFile.exists()) {
- try {
- userDataFile.createNewFile();
- } catch (IOException e) {
- throw new FtpServerConfigurationException("Cannot user data file : " + userDataFile.getAbsolutePath(), e);
- }
- }
try {
- userDataProp = new BaseProperties(userDataFile);
+ userDataProp = new BaseProperties();
+
+ if(userDataFile != null && userDataFile.exists()) {
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(userDataFile);
+ userDataProp.load(fis);
+ } finally {
+ IoUtils.close(fis);
+ }
+ }
} catch (IOException e) {
throw new FtpServerConfigurationException("Error loading user data file : " + userDataFile.getAbsolutePath(), e);
}
@@ -226,19 +224,23 @@
* @throws FtpException
*/
private void saveUserData() throws FtpException {
+ File dir = userDataFile.getParentFile();
+ if(dir != null && !dir.exists() && !dir.mkdirs() ) {
+ String dirName = dir.getAbsolutePath();
+ throw new FtpServerConfigurationException("Cannot create directory for user data file : " + dirName);
+ }
+
// save user data
- FileOutputStream fos = null;
- try {
- fos = new FileOutputStream(userDataFile);
- userDataProp.store(fos, "Generated file - don't edit (please)");
- }
- catch(IOException ex) {
- LOG.error("Failed saving user data", ex);
- throw new FtpException("Failed saving user data", ex);
- }
- finally {
- IoUtils.close(fos);
- }
+ FileOutputStream fos = null;
+ try {
+ fos = new FileOutputStream(userDataFile);
+ userDataProp.store(fos, "Generated file - don't edit (please)");
+ } catch (IOException ex) {
+ LOG.error("Failed saving user data", ex);
+ throw new FtpException("Failed saving user data", ex);
+ } finally {
+ IoUtils.close(fos);
+ }
}
/**
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/util/BaseProperties.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/util/BaseProperties.java?rev=683614&r1=683613&r2=683614&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/util/BaseProperties.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/util/BaseProperties.java Thu Aug 7 06:28:26 2008
@@ -20,9 +20,6 @@
package org.apache.ftpserver.util;
import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.DateFormat;
@@ -56,27 +53,6 @@
super(prop);
}
- /**
- * Load properties from file
- */
- public BaseProperties(final File fl) throws IOException {
- FileInputStream fis = null;
- try {
- fis = new FileInputStream(fl);
- load(fis);
- } finally {
- IoUtils.close(fis);
- }
- }
-
- /**
- * Load properties from <code>InputStream</code>
- */
- public BaseProperties(final InputStream is) throws IOException {
- load(is);
- }
-
-
//////////////////////////////////////////
//////// Properties Get Methods ////////
//////////////////////////////////////////
Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ClientTestTemplate.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ClientTestTemplate.java?rev=683614&r1=683613&r2=683614&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ClientTestTemplate.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ClientTestTemplate.java Thu Aug 7 06:28:26 2008
@@ -63,7 +63,7 @@
protected FtpServer createServer() throws Exception {
assertTrue(USERS_FILE.getAbsolutePath() + " must exist", USERS_FILE.exists());
- DefaultFtpServerContext context = new DefaultFtpServerContext(false);
+ DefaultFtpServerContext context = new DefaultFtpServerContext();
NioListener listener = new NioListener();
listener.setPort(port);