blob: c08459da89bc8ad2bd2d7bf00aa72c8279ea9d3f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Mike Kucera (IBM) - Initial API and implementation
*******************************************************************************/
package org.eclipse.ptp.internal.rdt.ui;
import java.net.URI;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.rse.core.RSECorePlugin;
import org.eclipse.rse.core.model.IHost;
import org.eclipse.rse.core.model.ISystemRegistry;
import org.eclipse.rse.services.clientserver.messages.SystemMessageException;
import org.eclipse.rse.services.files.IHostFile;
import org.eclipse.rse.subsystems.files.core.model.RemoteFileUtility;
import org.eclipse.rse.subsystems.files.core.servicesubsystem.IFileServiceSubSystem;
import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile;
import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFileSubSystem;
public class RSEUtils {
private static String DEFAULT_CONFIG_DIR_NAME = ".eclipsesettings"; //$NON-NLS-1$
private RSEUtils() {}
/**
* Return the best RSE connection object matching the given host name.
* Attempts to return a connection object where the remote file subsystem
* is connected.
*/
public static IHost getConnection(String hostName) {
if(hostName == null)
return null;
ISystemRegistry sr = RSECorePlugin.getTheSystemRegistry();
IHost[] connections = sr.getHosts();
for(IHost con : connections) {
if (hostName.equalsIgnoreCase(con.getHostName())) {
IRemoteFileSubSystem fss = getRemoteFileSubSystem(con);
if (fss != null && fss.isConnected()) {
return con;
}
}
}
return null;
}
public static IHost getConnection(URI uri) {
if(!"rse".equals(uri.getScheme())) //$NON-NLS-1$
return null;
String hostName = uri.getHost();
return getConnection(hostName);
}
public static IFileServiceSubSystem getFileServiceSubSystem(IHost host) {
IRemoteFileSubSystem[] fileSubsystems = RemoteFileUtility.getFileSubSystems(host);
for(IRemoteFileSubSystem subsystem : fileSubsystems) {
if(subsystem instanceof IFileServiceSubSystem && subsystem.isConnected()) {
return (IFileServiceSubSystem) subsystem;
}
}
return null;
}
public static IRemoteFileSubSystem getRemoteFileSubSystem(IHost host) {
IRemoteFileSubSystem[] fileSubsystems = RemoteFileUtility.getFileSubSystems(host);
for(IRemoteFileSubSystem subsystem : fileSubsystems) {
if(subsystem != null && subsystem.isConnected()) {
return subsystem;
}
}
return null;
}
private static IHostFile getUserHome(IHost host) {
IFileServiceSubSystem fileSubsystem = getFileServiceSubSystem(host);
return fileSubsystem == null ? null : fileSubsystem.getFileService().getUserHome();
}
public static String getUserHomeDirectory(IHost host) {
IHostFile userHome = getUserHome(host);
return userHome == null ? null : userHome.getAbsolutePath();
}
public static String getDefaultConfigDirectory(IHost host) {
IFileServiceSubSystem fileSubsystem = getFileServiceSubSystem(host);
try {
fileSubsystem.connect(false, null);
} catch (Exception e) {
return null;
}
if(fileSubsystem != null) {
IHostFile userHome = fileSubsystem.getFileService().getUserHome();
if(userHome != null) {
return userHome.getAbsolutePath() + fileSubsystem.getSeparator() + DEFAULT_CONFIG_DIR_NAME;
}
}
return null;
}
public enum VerifyResult { VERIFIED, INVALID, ERROR }
public static VerifyResult verifyRemoteConfigDirectory(IHost host, String path) {
IRemoteFileSubSystem fileSubsystem = getRemoteFileSubSystem(host);
if(fileSubsystem == null)
return VerifyResult.ERROR;
try {
IRemoteFile dir = fileSubsystem.getRemoteFileObject(path, new NullProgressMonitor());
if(dir != null && dir.isDirectory() && dir.canWrite())
return VerifyResult.VERIFIED;
else
return VerifyResult.INVALID;
} catch (SystemMessageException e) {
return VerifyResult.ERROR;
}
}
}