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/18 16:12:15 UTC
svn commit: r686767 - in /mina/ftpserver/trunk/core/src:
main/java/org/apache/ftpserver/ main/java/org/apache/ftpserver/ftplet/
test/java/org/apache/ftpserver/ftplet/
Author: ngn
Date: Mon Aug 18 07:12:14 2008
New Revision: 686767
URL: http://svn.apache.org/viewvc?rev=686767&view=rev
Log:
Fixed bug where Ftplet.init() would not be called correctly. Added test to make sure both init and destroy are sent to the Ftplets (FTPSERVER-163)
Modified:
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpServer.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ftplet/DefaultFtpletContainer.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ftplet/FtpletContainer.java
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetContainerTestTemplate.java
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/MockFtplet.java
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=686767&r1=686766&r2=686767&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 Mon Aug 18 07:12:14 2008
@@ -77,6 +77,9 @@
listener.start(serverContext);
}
+ // init the Ftplet container
+ serverContext.getFtpletContainer().init(serverContext);
+
started = true;
LOG.info("FTP server started");
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ftplet/DefaultFtpletContainer.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ftplet/DefaultFtpletContainer.java?rev=686767&r1=686766&r2=686767&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ftplet/DefaultFtpletContainer.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ftplet/DefaultFtpletContainer.java Mon Aug 18 07:12:14 2008
@@ -38,9 +38,11 @@
private final Logger LOG = LoggerFactory
.getLogger(DefaultFtpletContainer.class);
+ private FtpletContext ftpletContext;
+
private Map<String, Ftplet> ftplets = new ConcurrentHashMap<String, Ftplet>();
- public void dispose() {
+ public synchronized void dispose() {
for (Entry<String, Ftplet> entry : ftplets.entrySet()) {
try {
@@ -52,16 +54,20 @@
ftplets.clear();
}
- public void addFtplet(String name, Ftplet ftplet) {
+ public synchronized void addFtplet(String name, Ftplet ftplet) throws FtpException {
if (getFtplet(name) != null) {
throw new IllegalArgumentException("Ftplet with name \"" + name
+ "\" already registred with container");
}
ftplets.put(name, ftplet);
+
+ if(ftpletContext != null) {
+ ftplet.init(ftpletContext);
+ }
}
- public Ftplet removeFtplet(String name) {
+ public synchronized Ftplet removeFtplet(String name) {
Ftplet ftplet = ftplets.get(name);
if (ftplet != null) {
@@ -75,7 +81,7 @@
/**
* Get Ftplet for the given name.
*/
- public Ftplet getFtplet(String name) {
+ public synchronized Ftplet getFtplet(String name) {
if (name == null) {
return null;
}
@@ -83,21 +89,27 @@
return ftplets.get(name);
}
- public void init(FtpletContext ftpletContext) throws FtpException {
- // dummy, forced by Ftplet API
+ public synchronized void init(FtpletContext ftpletContext) throws FtpException {
+ this.ftpletContext = ftpletContext;
+
+ // initialize Ftplets already added
+
+ for (Entry<String, Ftplet> entry : ftplets.entrySet()) {
+ entry.getValue().init(ftpletContext);
+ }
}
/**
* @see FtpletContainer#getFtplets()
*/
- public Map<String, Ftplet> getFtplets() {
+ public synchronized Map<String, Ftplet> getFtplets() {
return ftplets;
}
/**
* @see FtpletContainer#setFtplets(Map)
*/
- public void setFtplets(Map<String, Ftplet> ftplets) {
+ public synchronized void setFtplets(Map<String, Ftplet> ftplets) {
this.ftplets = ftplets;
}
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ftplet/FtpletContainer.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ftplet/FtpletContainer.java?rev=686767&r1=686766&r2=686767&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ftplet/FtpletContainer.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ftplet/FtpletContainer.java Mon Aug 18 07:12:14 2008
@@ -38,11 +38,12 @@
* The name of the Ftplet to be added
* @param ftplet
* The Ftplet
+ * @throws FtpException
* @throws IllegalArgumentException
* If an Ftplet with the same name already exist within the
* container
*/
- void addFtplet(String name, Ftplet ftplet);
+ void addFtplet(String name, Ftplet ftplet) throws FtpException;
/**
* Remove the {@link Ftplet} identified by the name (as provided in the
Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetContainerTestTemplate.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetContainerTestTemplate.java?rev=686767&r1=686766&r2=686767&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetContainerTestTemplate.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetContainerTestTemplate.java Mon Aug 18 07:12:14 2008
@@ -41,7 +41,25 @@
protected abstract FtpletContainer createFtpletContainer();
- public void testAddAndGetFtplet() {
+ private static class MockFtpletContext implements FtpletContext {
+ public FileSystemManager getFileSystemManager() {
+ return null;
+ }
+
+ public FtpStatistics getFtpStatistics() {
+ return null;
+ }
+
+ public Ftplet getFtplet(String name) {
+ return null;
+ }
+
+ public UserManager getUserManager() {
+ return null;
+ }
+ }
+
+ public void testAddAndGetFtplet() throws FtpException {
MockFtplet ftplet1 = new MockFtplet();
MockFtplet ftplet2 = new MockFtplet();
@@ -50,12 +68,51 @@
container.addFtplet("ftplet1", ftplet1);
container.addFtplet("ftplet2", ftplet2);
-
+
assertSame(ftplet1, container.getFtplet("ftplet1"));
assertSame(ftplet2, container.getFtplet("ftplet2"));
}
+
+ public void testFtpletLifecyclePreContainerInit() throws FtpException {
+ MockFtplet ftplet = new MockFtplet();
+
+ container.addFtplet("ftplet1", ftplet);
+
+ // ftplet should be initialized before the container is
+ assertNull(ftplet.context);
+ container.init(new MockFtpletContext());
+ assertNotNull(ftplet.context);
+
+ // make sure ftplets get's destroyed
+ assertFalse(ftplet.destroyed);
+
+ container.destroy();
+
+ assertTrue(ftplet.destroyed);
+
+ }
+
+ public void testFtpletLifecyclePostContainerInit() throws FtpException {
+ MockFtplet ftplet = new MockFtplet();
+
+ assertNull(ftplet.context);
+ container.init(new MockFtpletContext());
+
+ container.addFtplet("ftplet1", ftplet);
+
+ assertNotNull(ftplet.context);
+
+ // make sure ftplets get's destroyed
+ assertFalse(ftplet.destroyed);
+
+ container.destroy();
+
+ assertTrue(ftplet.destroyed);
+
+ }
- public void testAddFtpletWithDuplicateName() {
+
+ public void testAddFtpletWithDuplicateName() throws FtpException {
MockFtplet ftplet1 = new MockFtplet();
MockFtplet ftplet2 = new MockFtplet();
@@ -73,7 +130,7 @@
assertSame(ftplet1, container.getFtplet("ftplet1"));
}
- public void testRemoveFtplet() {
+ public void testRemoveFtplet() throws FtpException {
MockFtplet ftplet1 = new MockFtplet();
MockFtplet ftplet2 = new MockFtplet();
Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/MockFtplet.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/MockFtplet.java?rev=686767&r1=686766&r2=686767&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/MockFtplet.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/MockFtplet.java Mon Aug 18 07:12:14 2008
@@ -31,11 +31,18 @@
protected static MockFtpletCallback callback = new MockFtpletCallback();
+ public FtpletContext context;
+ public boolean destroyed = false;
+
public void destroy() {
+ destroyed = true;
+
callback.destroy();
}
public void init(FtpletContext ftpletContext) throws FtpException {
+ this.context = ftpletContext;
+
callback.init(ftpletContext);
}