/** * Aptana Studio * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions). * Please see the license.html included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package com.aptana.filesystem.ftp.internal; import org.eclipse.core.runtime.Platform; import com.aptana.core.util.KeepAliveObjectPool; import com.aptana.filesystem.ftp.FTPPlugin; import com.aptana.filesystem.ftp.preferences.FTPPreferenceInitializer; import com.aptana.filesystem.ftp.preferences.IFTPPreferenceConstants; import com.enterprisedt.net.ftp.FTPClient; import com.enterprisedt.net.ftp.FTPClientInterface; import com.enterprisedt.net.ftp.FTPTransferType; public final class FTPClientPool extends KeepAliveObjectPool<FTPClientInterface> { private IPoolConnectionManager manager; public FTPClientPool(IPoolConnectionManager manager) { super(Platform.getPreferencesService().getInt(FTPPlugin.PLUGIN_ID, IFTPPreferenceConstants.KEEP_ALIVE_TIME, FTPPreferenceInitializer.DEFAULT_KEEP_ALIVE_MINUTES, null) * 60 * 1000); this.manager = manager; start(); } public FTPClientInterface create() { return manager.newClient(); } public void expire(FTPClientInterface ftpClient) { if (ftpClient == null) { return; } try { ftpClient.quit(); } catch (Exception e) { try { ftpClient.quitImmediately(); } catch (Exception ignore) { ignore.getCause(); } } } public boolean validate(FTPClientInterface o) { if (!o.connected()) { return false; } if (o instanceof FTPClient) { try { ((FTPClient) o).noOperation(); ((FTPClient) o).setType(FTPTransferType.BINARY); } catch (Exception e) { // ignore return false; } } return true; } }