1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-08 18:26:01 +02:00

Automatically open closed connection when performing FileStore

operations.

Change-Id: I26059d8be488c32722d5a25d75cb56fe1c0eb462
Signed-off-by: Greg Watson <g.watson@computer.org>
This commit is contained in:
Greg Watson 2014-10-13 17:17:16 -04:00
parent b3dbbaca76
commit db68d9779d

View file

@ -72,7 +72,7 @@ public class JschFileStore extends FileStore {
fRemotePath = new Path(uri.getPath()); fRemotePath = new Path(uri.getPath());
} }
private JSchConnection checkConnection() throws RemoteConnectionException { private JSchConnection checkConnection(IProgressMonitor monitor) throws RemoteConnectionException {
IRemoteServices services = RemoteServices.getRemoteServices(fURI); IRemoteServices services = RemoteServices.getRemoteServices(fURI);
assert (services instanceof JSchServices); assert (services instanceof JSchServices);
if (services == null) { if (services == null) {
@ -85,7 +85,10 @@ public class JschFileStore extends FileStore {
throw new RemoteConnectionException(NLS.bind(Messages.JschFileStore_Invalid_connection_for_URI, fURI)); throw new RemoteConnectionException(NLS.bind(Messages.JschFileStore_Invalid_connection_for_URI, fURI));
} }
if (!connection.isOpen()) { if (!connection.isOpen()) {
throw new RemoteConnectionException(Messages.JschFileStore_Connection_is_not_open); connection.open(monitor);
if (!connection.isOpen()) {
throw new RemoteConnectionException(Messages.JschFileStore_Connection_is_not_open);
}
} }
return (JSchConnection) connection; return (JSchConnection) connection;
} }
@ -98,10 +101,10 @@ public class JschFileStore extends FileStore {
*/ */
@Override @Override
public IFileInfo[] childInfos(int options, IProgressMonitor monitor) throws CoreException { public IFileInfo[] childInfos(int options, IProgressMonitor monitor) throws CoreException {
JSchConnection connection = checkConnection();
SubMonitor subMon = SubMonitor.convert(monitor, 10); SubMonitor subMon = SubMonitor.convert(monitor, 10);
JSchConnection connection = checkConnection(subMon.newChild(1));
ChildInfosCommand command = new ChildInfosCommand(connection, fRemotePath); ChildInfosCommand command = new ChildInfosCommand(connection, fRemotePath);
return command.getResult(subMon.newChild(10)); return command.getResult(subMon.newChild(9));
} }
/* /*
@ -129,9 +132,9 @@ public class JschFileStore extends FileStore {
*/ */
@Override @Override
public void delete(int options, IProgressMonitor monitor) throws CoreException { public void delete(int options, IProgressMonitor monitor) throws CoreException {
JSchConnection connection = checkConnection();
SubMonitor subMon = SubMonitor.convert(monitor, 20); SubMonitor subMon = SubMonitor.convert(monitor, 20);
IFileInfo info = fetchInfo(EFS.NONE, subMon.newChild(10)); JSchConnection connection = checkConnection(subMon.newChild(1));
IFileInfo info = fetchInfo(EFS.NONE, subMon.newChild(9));
if (!subMon.isCanceled() && info.exists()) { if (!subMon.isCanceled() && info.exists()) {
DeleteCommand command = new DeleteCommand(connection, fRemotePath); DeleteCommand command = new DeleteCommand(connection, fRemotePath);
command.getResult(subMon.newChild(10)); command.getResult(subMon.newChild(10));
@ -146,10 +149,10 @@ public class JschFileStore extends FileStore {
*/ */
@Override @Override
public IFileInfo fetchInfo(int options, IProgressMonitor monitor) throws CoreException { public IFileInfo fetchInfo(int options, IProgressMonitor monitor) throws CoreException {
JSchConnection connection = checkConnection();
SubMonitor subMon = SubMonitor.convert(monitor, 10); SubMonitor subMon = SubMonitor.convert(monitor, 10);
JSchConnection connection = checkConnection(subMon.newChild(1));
FetchInfoCommand command = new FetchInfoCommand(connection, fRemotePath); FetchInfoCommand command = new FetchInfoCommand(connection, fRemotePath);
return command.getResult(subMon.newChild(10)); return command.getResult(subMon.newChild(9));
} }
/* /*
@ -213,12 +216,12 @@ public class JschFileStore extends FileStore {
*/ */
@Override @Override
public IFileStore mkdir(int options, IProgressMonitor monitor) throws CoreException { public IFileStore mkdir(int options, IProgressMonitor monitor) throws CoreException {
JSchConnection connection = checkConnection();
SubMonitor subMon = SubMonitor.convert(monitor, 20); SubMonitor subMon = SubMonitor.convert(monitor, 20);
JSchConnection connection = checkConnection(subMon.newChild(1));
if ((options & EFS.SHALLOW) == EFS.SHALLOW) { if ((options & EFS.SHALLOW) == EFS.SHALLOW) {
IFileStore parent = getParent(); IFileStore parent = getParent();
if (parent != null && !parent.fetchInfo(EFS.NONE, subMon.newChild(10)).exists()) { if (parent != null && !parent.fetchInfo(EFS.NONE, subMon.newChild(9)).exists()) {
throw new CoreException(new Status(IStatus.ERROR, Activator.getUniqueIdentifier(), EFS.ERROR_WRITE, NLS.bind( throw new CoreException(new Status(IStatus.ERROR, Activator.getUniqueIdentifier(), EFS.ERROR_WRITE, NLS.bind(
Messages.JschFileStore_The_parent_of_directory_does_not_exist, fRemotePath.toString()), null)); Messages.JschFileStore_The_parent_of_directory_does_not_exist, fRemotePath.toString()), null));
} }
@ -261,9 +264,9 @@ public class JschFileStore extends FileStore {
*/ */
@Override @Override
public InputStream openInputStream(int options, IProgressMonitor monitor) throws CoreException { public InputStream openInputStream(int options, IProgressMonitor monitor) throws CoreException {
JSchConnection connection = checkConnection();
SubMonitor subMon = SubMonitor.convert(monitor, 30); SubMonitor subMon = SubMonitor.convert(monitor, 30);
IFileInfo info = fetchInfo(EFS.NONE, subMon.newChild(10)); JSchConnection connection = checkConnection(subMon.newChild(1));
IFileInfo info = fetchInfo(EFS.NONE, subMon.newChild(9));
if (!subMon.isCanceled()) { if (!subMon.isCanceled()) {
if (!info.exists()) { if (!info.exists()) {
throw new CoreException(new Status(IStatus.ERROR, Activator.getUniqueIdentifier(), EFS.ERROR_READ, NLS.bind( throw new CoreException(new Status(IStatus.ERROR, Activator.getUniqueIdentifier(), EFS.ERROR_READ, NLS.bind(
@ -287,9 +290,9 @@ public class JschFileStore extends FileStore {
*/ */
@Override @Override
public OutputStream openOutputStream(int options, IProgressMonitor monitor) throws CoreException { public OutputStream openOutputStream(int options, IProgressMonitor monitor) throws CoreException {
JSchConnection connection = checkConnection();
SubMonitor subMon = SubMonitor.convert(monitor, 30); SubMonitor subMon = SubMonitor.convert(monitor, 30);
IFileInfo info = fetchInfo(EFS.NONE, subMon.newChild(10)); JSchConnection connection = checkConnection(subMon.newChild(1));
IFileInfo info = fetchInfo(EFS.NONE, subMon.newChild(9));
if (!subMon.isCanceled()) { if (!subMon.isCanceled()) {
if (info.isDirectory()) { if (info.isDirectory()) {
throw new CoreException(new Status(IStatus.ERROR, Activator.getUniqueIdentifier(), EFS.ERROR_WRONG_TYPE, NLS.bind( throw new CoreException(new Status(IStatus.ERROR, Activator.getUniqueIdentifier(), EFS.ERROR_WRONG_TYPE, NLS.bind(
@ -310,10 +313,10 @@ public class JschFileStore extends FileStore {
*/ */
@Override @Override
public void putInfo(IFileInfo info, int options, IProgressMonitor monitor) throws CoreException { public void putInfo(IFileInfo info, int options, IProgressMonitor monitor) throws CoreException {
JSchConnection connection = checkConnection();
SubMonitor subMon = SubMonitor.convert(monitor, 10); SubMonitor subMon = SubMonitor.convert(monitor, 10);
JSchConnection connection = checkConnection(subMon.newChild(1));
PutInfoCommand command = new PutInfoCommand(connection, info, options, fRemotePath); PutInfoCommand command = new PutInfoCommand(connection, info, options, fRemotePath);
command.getResult(subMon.newChild(10)); command.getResult(subMon.newChild(9));
} }
/* /*