Rev 1008 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
package pt.estgp.estgweb.web;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.log4j.Logger;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
/**
* @author Jorge
* @date 18/Jan/2009
* @time 18:35:11
*/
public class FtpServer
{
private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger =
1.5.0/docs/api/java/util/logging/Logger.html">Logger.
getLogger(FtpServer.
class);
private static HashMap
<String, FtpServer
> servers =
new HashMap
<String, FtpServer
>();
1.5.0/docs/api/java/lang/String.html">String host =
null;
int port =
21;
1.5.0/docs/api/java/lang/String.html">String username =
null;
1.5.0/docs/api/java/lang/String.html">String password =
null;
public FtpServer
(1.5.0/docs/api/java/lang/String.html">String host,
int port
)
{
this.
host = host
;
if (port
> 0
)
this.
port = port
;
}
public FtpServer
(1.5.0/docs/api/java/lang/String.html">String host,
int port,
1.5.0/docs/api/java/lang/String.html">String username,
1.5.0/docs/api/java/lang/String.html">String password
)
{
this.
host = host
;
this.
port = port
;
this.
username = username
;
this.
password = password
;
}
private static final int FTP_TIMEOUT_SECONDS = pt.
estgp.
estgweb.
Globals.
FTP_TIMEOUT_SECONDS;
public FTPClient getClient
() throws 1.5.0/docs/api/java/io/IOException.html">IOException
{
final FTPClient ftp =
new MyFTPClient
();
logger.
info("CONNECTING... waiting " + FTP_TIMEOUT_SECONDS +
" seconds");
1.5.0/docs/api/java/lang/Thread.html">Thread t =
new 1.5.0/docs/api/java/lang/Thread.html">Thread(new 1.5.0/docs/api/java/lang/Runnable.html">Runnable() {
@
1.5.0/docs/api/java/lang/Override.html">Override
public void run
() {
try {
ftp.
connect(host, port
);
} catch (1.5.0/docs/api/java/io/IOException.html">IOException e
) {
logger.
error(e,e
);
}
}
});
t.
start();
try {
for(int i=
0;i
<FTP_TIMEOUT_SECONDS
;i++
)
{
1.5.0/docs/api/java/lang/Thread.html">Thread.
sleep(1000
);
if(!t.
isAlive())
{
if(ftp.
isConnected())
break;
}
}
if(!ftp.
isConnected())
{
logger.
info("Not Connected will interrupt");
t.
interrupt();
return null;
}
} catch (1.5.0/docs/api/java/lang/InterruptedException.html">InterruptedException e
) {
logger.
error(e,e
);
}
if (username
!=
null)
ftp.
user(username
);
if (password
!=
null)
ftp.
pass(password
);
return ftp
;
}
public 1.5.0/docs/api/java/lang/String.html">String getHost
()
{
return host
;
}
public void setHost
(1.5.0/docs/api/java/lang/String.html">String host
)
{
this.
host = host
;
}
public int getPort
()
{
return port
;
}
public void setPort
(int port
)
{
this.
port = port
;
}
public 1.5.0/docs/api/java/lang/String.html">String getUsername
()
{
return username
;
}
public void setUsername
(1.5.0/docs/api/java/lang/String.html">String username
)
{
this.
username = username
;
}
public 1.5.0/docs/api/java/lang/String.html">String getPassword
()
{
return password
;
}
public void setPassword
(1.5.0/docs/api/java/lang/String.html">String password
)
{
this.
password = password
;
}
public static FtpServer getServer
(1.5.0/docs/api/java/lang/String.html">String urlStr,
1.5.0/docs/api/java/lang/String.html">String user,
1.5.0/docs/api/java/lang/String.html">String pass
)
{
FtpServer ftpServer = servers.
get(urlStr
);
if (ftpServer ==
null)
ftpServer = addServer
(urlStr, user, pass
);
return ftpServer
;
}
public static FtpServer getNewServer
(1.5.0/docs/api/java/lang/String.html">String urlStr,
1.5.0/docs/api/java/lang/String.html">String user,
1.5.0/docs/api/java/lang/String.html">String pass
)
{
try
{
1.5.0/docs/api/java/net/URL.html">URL url =
new 1.5.0/docs/api/java/net/URL.html">URL(urlStr
);
1.5.0/docs/api/java/lang/String.html">String host = url.
getHost();
int port = url.
getPort();
if (port
<= 0
)
port =
21;
logger.
info("Connecting to " + host +
"in port:" + port
);
return new FtpServer
(host, port, user, pass
);
}
catch (1.5.0/docs/api/java/net/MalformedURLException.html">MalformedURLException e
)
{
logger.
error(e, e
);
}
catch (1.5.0/docs/api/java/io/IOException.html">IOException e
)
{
logger.
error(e, e
);
}
return null;
}
/**
* Add a ftpServer to Cache
*
* @param urlStr to parse
* @param user username
* @param pass password
* @return ftpServer
*/
private static synchronized FtpServer addServer
(1.5.0/docs/api/java/lang/String.html">String urlStr,
1.5.0/docs/api/java/lang/String.html">String user,
1.5.0/docs/api/java/lang/String.html">String pass
)
{
try
{
1.5.0/docs/api/java/net/URL.html">URL url =
new 1.5.0/docs/api/java/net/URL.html">URL(urlStr
);
1.5.0/docs/api/java/lang/String.html">String host = url.
getHost();
int port = url.
getPort();
if (port
<= 0
)
port =
21;
logger.
info("Connecting to " + host +
" in port:" + port
);
FtpServer ftpServer =
new FtpServer
(host, port, user, pass
);
servers.
put(urlStr, ftpServer
);
return ftpServer
;
}
catch (1.5.0/docs/api/java/net/MalformedURLException.html">MalformedURLException e
)
{
logger.
error(e, e
);
}
catch (1.5.0/docs/api/java/io/IOException.html">IOException e
)
{
logger.
error(e, e
);
}
return null;
}
public static final int FTP_DATA_STORE_TIMEOUT_SECONDS = pt.
estgp.
estgweb.
Globals.
FTP_DATA_STORE_TIMEOUT_SECONDS;
public class MyFTPClient
extends FTPClient
implements 1.5.0/docs/api/java/lang/Runnable.html">Runnable
{
1.5.0/docs/api/java/lang/String.html">String remote =
"";
5+0%2Fdocs%2Fapi+InputStream">InputStream local =
null;
boolean storeResult =
false;
public void run
() {
try {
storeResult =
super.
storeFile(remote, local
);
} catch (1.5.0/docs/api/java/io/IOException.html">IOException e
) {
logger.
error(e,e
);
}
}
@
1.5.0/docs/api/java/lang/Override.html">Override
public boolean storeFile
(1.5.0/docs/api/java/lang/String.html">String remote,
5+0%2Fdocs%2Fapi+InputStream">InputStream local
) throws 1.5.0/docs/api/java/io/IOException.html">IOException
{
logger.
info("FTP store Timeout protection of " + FTP_DATA_STORE_TIMEOUT_SECONDS
);
this.
remote = remote
;
this.
local = local
;
1.5.0/docs/api/java/lang/Thread.html">Thread t =
new 1.5.0/docs/api/java/lang/Thread.html">Thread(this);
t.
start();
try {
for(int i=
0;i
<FTP_DATA_STORE_TIMEOUT_SECONDS
;i++
)
{
1.5.0/docs/api/java/lang/Thread.html">Thread.
sleep(1000
);
if(!t.
isAlive())
{
break;
}
}
if(t.
isAlive())
{
logger.
info("Timeout expired will interrupt");
t.
interrupt();
return false;
}
} catch (1.5.0/docs/api/java/lang/InterruptedException.html">InterruptedException e
) {
logger.
error(e,e
);
}
return storeResult
;
}
}
}