/** * 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. */ // $codepro.audit.disable declareAsInterface // $codepro.audit.disable emptyCatchClause package com.aptana.filesystem.ftp; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import com.aptana.core.epl.IMemento; import com.aptana.core.io.vfs.IConnectionFileManager; import com.aptana.filesystem.ftp.internal.FTPConnectionFileManager; import com.aptana.ide.core.io.ConnectionContext; import com.aptana.ide.core.io.ConnectionPoint; import com.aptana.ide.core.io.CoreIOPlugin; import com.aptana.ide.core.io.IConnectionPoint15Constants; /** * @author Max Stepanov */ public class FTPConnectionPoint extends ConnectionPoint implements IBaseFTPConnectionPoint { public static final String TYPE = TYPE_FTP; private static final String ELEMENT_HOST = "host"; //$NON-NLS-1$ private static final String ELEMENT_PORT = "port"; //$NON-NLS-1$ private static final String ELEMENT_PATH = "path"; //$NON-NLS-1$ private static final String ELEMENT_LOGIN = "login"; //$NON-NLS-1$ private static final String ELEMENT_PASSIVE = "passive"; //$NON-NLS-1$ private static final String ELEMENT_TRANSFER_TYPE = "transferType"; //$NON-NLS-1$ private static final String ELEMENT_ENCODING = "encoding"; //$NON-NLS-1$ private static final String ELEMENT_TIMEZONE = "timezone"; //$NON-NLS-1$ private String host; private int port = IFTPConstants.FTP_PORT_DEFAULT; private IPath path = Path.ROOT; private String login = ""; //$NON-NLS-1$ private char[] password; private boolean passiveMode = true; private String transferType = IFTPConstants.TRANSFER_TYPE_AUTO; private String encoding = IFTPConstants.ENCODING_DEFAULT; private String timezone = null; private IFTPConnectionFileManager connectionFileManager; /** * Default constructor */ public FTPConnectionPoint() { super(TYPE); } /* * (non-Javadoc) * @see com.aptana.ide.core.io.ConnectionPoint#loadState(com.aptana.ide.core.io.epl.IMemento) */ @Override protected void loadState(IMemento memento) { super.loadState(memento); IMemento child = memento.getChild(ELEMENT_HOST); if (child != null) { host = child.getTextData(); } child = memento.getChild(ELEMENT_PORT); if (child != null) { try { port = Integer.parseInt(child.getTextData()); } catch (NumberFormatException e) { } } child = memento.getChild(ELEMENT_PATH); if (child != null) { String text = child.getTextData(); if (text != null) { path = Path.fromPortableString(text); } } child = memento.getChild(ELEMENT_LOGIN); if (child != null) { login = child.getTextData(); } child = memento.getChild(ELEMENT_PASSIVE); if (child != null) { passiveMode = Boolean.parseBoolean(child.getTextData()); } child = memento.getChild(ELEMENT_TRANSFER_TYPE); if (child != null) { transferType = child.getTextData(); } child = memento.getChild(ELEMENT_ENCODING); if (child != null) { encoding = child.getTextData(); } child = memento.getChild(ELEMENT_TIMEZONE); if (child != null) { timezone = child.getTextData(); } } /* * (non-Javadoc) * @see com.aptana.ide.core.io.ConnectionPoint#saveState(com.aptana.ide.core.io.epl.IMemento) */ @Override protected void saveState(IMemento memento) { super.saveState(memento); memento.createChild(ELEMENT_HOST).putTextData(host); if (IFTPConstants.FTP_PORT_DEFAULT != port) { memento.createChild(ELEMENT_PORT).putTextData(Integer.toString(port)); } if (!Path.ROOT.equals(path)) { memento.createChild(ELEMENT_PATH).putTextData(path.toPortableString()); } if (login.length() != 0) { memento.createChild(ELEMENT_LOGIN).putTextData(login); } memento.createChild(ELEMENT_PASSIVE).putTextData(Boolean.toString(passiveMode)); if (!IFTPConstants.TRANSFER_TYPE_AUTO.equals(transferType)) { memento.createChild(ELEMENT_TRANSFER_TYPE).putTextData(transferType); } if (!IFTPConstants.ENCODING_DEFAULT.equals(encoding)) { memento.createChild(ELEMENT_ENCODING).putTextData(encoding); } if (timezone != null && timezone.length() != 0) { memento.createChild(ELEMENT_TIMEZONE).putTextData(timezone); } } /* * (non-Javadoc) * @see com.aptana.ide.core.ftp.IBaseRemoteConnectionPoint#getHost() */ public String getHost() { return host; } /* * (non-Javadoc) * @see com.aptana.ide.core.ftp.IBaseRemoteConnectionPoint#setHost(java.lang.String) */ public void setHost(String host) { this.host = host; notifyChanged(); resetConnectionFileManager(); } /* * (non-Javadoc) * @see com.aptana.ide.core.ftp.IBaseRemoteConnectionPoint#getPort() */ public int getPort() { return port; } /* * (non-Javadoc) * @see com.aptana.ide.core.ftp.IBaseRemoteConnectionPoint#setPort(int) */ public void setPort(int port) { this.port = port; notifyChanged(); resetConnectionFileManager(); } /* * (non-Javadoc) * @see com.aptana.ide.core.ftp.IBaseRemoteConnectionPoint#getPath() */ public IPath getPath() { return path; } /* * (non-Javadoc) * @see com.aptana.ide.core.ftp.IBaseRemoteConnectionPoint#setPath(org.eclipse.core.runtime.IPath) */ public void setPath(IPath path) { this.path = path.isEmpty() ? Path.ROOT : path; notifyChanged(); resetConnectionFileManager(); } /* * (non-Javadoc) * @see com.aptana.ide.core.ftp.IBaseRemoteConnectionPoint#getLogin() */ public String getLogin() { return login; } /* * (non-Javadoc) * @see com.aptana.ide.core.ftp.IBaseRemoteConnectionPoint#setLogin(java.lang.String) */ public void setLogin(String login) { this.login = login; notifyChanged(); resetConnectionFileManager(); } /* * (non-Javadoc) * @see com.aptana.ide.core.ftp.IBaseRemoteConnectionPoint#getPassword() */ public char[] getPassword() { return password; } /* * (non-Javadoc) * @see com.aptana.ide.core.ftp.IBaseRemoteConnectionPoint#setPassword(char[]) */ public void setPassword(char[] password) { this.password = password; notifyChanged(); resetConnectionFileManager(); } /** * @return the passiveMode */ public boolean isPassiveMode() { return passiveMode; } /** * @param passiveMode * the passiveMode to set */ public void setPassiveMode(boolean passiveMode) { this.passiveMode = passiveMode; notifyChanged(); resetConnectionFileManager(); } /** * @return the transferType */ public String getTransferType() { return transferType; } /** * @param transferType * the transferType to set */ public void setTransferType(String transferType) { this.transferType = transferType; notifyChanged(); resetConnectionFileManager(); } /** * @return the encoding */ public String getEncoding() { return encoding; } /** * @param encoding * the encoding to set */ public void setEncoding(String encoding) { this.encoding = encoding; notifyChanged(); resetConnectionFileManager(); } /** * @return the timezone */ public String getTimezone() { return timezone; } /** * @param timezone * the timezone to set */ public void setTimezone(String timezone) { this.timezone = timezone; notifyChanged(); resetConnectionFileManager(); } /* * (non-Javadoc) * @see com.aptana.ide.core.io.ConnectionPoint#connect(boolean, org.eclipse.core.runtime.IProgressMonitor) */ @Override public void connect(boolean force, IProgressMonitor monitor) throws CoreException { if (!force && isConnected()) { return; } ConnectionContext context = CoreIOPlugin.getConnectionContext(this); if (context != null) { CoreIOPlugin.setConnectionContext(connectionFileManager, context); } getConnectionFileManager().connect(monitor); super.connect(force, monitor); } /* * (non-Javadoc) * @see com.aptana.ide.core.io.ConnectionPoint#disconnect(org.eclipse.core.runtime.IProgressMonitor) */ @Override public void disconnect(IProgressMonitor monitor) throws CoreException { if (isConnected()) { getConnectionFileManager().disconnect(monitor); } } /* * (non-Javadoc) * @see com.aptana.ide.core.io.ConnectionPoint#isConnected() */ @Override public synchronized boolean isConnected() { return connectionFileManager != null && connectionFileManager.isConnected(); } /* * (non-Javadoc) * @see com.aptana.ide.core.io.ConnectionPoint#canDisconnect() */ @Override public boolean canDisconnect() { return isConnected() && true; } /* * (non-Javadoc) * @see org.eclipse.core.runtime.PlatformObject#getAdapter(java.lang.Class) */ @SuppressWarnings("rawtypes") @Override public Object getAdapter(Class adapter) { if (IConnectionFileManager.class.equals(adapter)) { return getConnectionFileManager(); } return super.getAdapter(adapter); } private synchronized void resetConnectionFileManager() { connectionFileManager = null; } private synchronized IConnectionFileManager getConnectionFileManager() { if (connectionFileManager == null) { // find contributed first connectionFileManager = (IFTPConnectionFileManager) super.getAdapter(IFTPConnectionFileManager.class); if (connectionFileManager == null && Platform.getAdapterManager().hasAdapter(this, IFTPConnectionFileManager.class.getName())) { connectionFileManager = (IFTPConnectionFileManager) Platform.getAdapterManager().loadAdapter(this, IFTPConnectionFileManager.class.getName()); } if (connectionFileManager == null) { connectionFileManager = new FTPConnectionFileManager(); } ConnectionContext context = CoreIOPlugin.getConnectionContext(this); if (context != null) { CoreIOPlugin.setConnectionContext(connectionFileManager, context); } connectionFileManager .init(host, port, path, login, password, passiveMode, transferType, encoding, timezone); } return connectionFileManager; } @Override public boolean load15Data(String data) { String[] items = data.split(IConnectionPoint15Constants.DELIMITER); if (items.length < 7) { return false; } setName(items[0]); setHost(items[1]); if (items[2] == null || items[2].equals("")) { //$NON-NLS-1$ setPath(Path.ROOT); } else { setPath(new Path(items[2])); } setLogin(items[3]); setPassword(items[4].toCharArray()); setPassiveMode(items[5].equals(Boolean.TRUE.toString())); setId(items[6]); if (items.length >= 10) { setPort(Integer.parseInt(items[9])); } return true; } }