1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-15 13:05:22 +02:00

[254588] SystemDropActionDelegate performs refreshLocal too early

This commit is contained in:
David McKnight 2009-04-07 21:01:02 +00:00
parent 831ed5d4e6
commit e088c79b13

View file

@ -1,5 +1,5 @@
/******************************************************************************** /********************************************************************************
* Copyright (c) 2002, 2007 IBM Corporation and others. All rights reserved. * Copyright (c) 2002, 2009 IBM Corporation and others. All rights reserved.
* This program and the accompanying materials are made available under the terms * 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 * of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html * available at http://www.eclipse.org/legal/epl-v10.html
@ -12,6 +12,7 @@
* *
* Contributors: * Contributors:
* Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry * Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry
* David McKnight (IBM) - [254588] SystemDropActionDelegate performs refreshLocal too early
********************************************************************************/ ********************************************************************************/
package org.eclipse.rse.internal.ui.view; package org.eclipse.rse.internal.ui.view;
@ -20,14 +21,19 @@ import java.util.ArrayList;
import org.eclipse.core.resources.IProjectNature; import org.eclipse.core.resources.IProjectNature;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.WorkspaceJob;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableContext; import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.rse.core.RSECorePlugin; import org.eclipse.rse.core.RSECorePlugin;
import org.eclipse.rse.core.model.ISystemProfile; import org.eclipse.rse.core.model.ISystemProfile;
import org.eclipse.rse.core.model.ISystemRegistry; import org.eclipse.rse.core.model.ISystemRegistry;
import org.eclipse.rse.core.subsystems.ISubSystem; import org.eclipse.rse.core.subsystems.ISubSystem;
import org.eclipse.rse.internal.ui.GenericMessages;
import org.eclipse.rse.services.clientserver.messages.SystemMessage; import org.eclipse.rse.services.clientserver.messages.SystemMessage;
import org.eclipse.rse.services.clientserver.messages.SystemMessageException; import org.eclipse.rse.services.clientserver.messages.SystemMessageException;
import org.eclipse.rse.ui.ISystemMessages; import org.eclipse.rse.ui.ISystemMessages;
@ -88,11 +94,9 @@ public class SystemDropActionDelegate implements IDropActionDelegate
byte[] result = (byte[]) data; byte[] result = (byte[]) data;
// get the sources // get the sources
//StringTokenizer tokenizer = new StringTokenizer(new String(result), SystemViewDataDropAdapter.RESOURCE_SEPARATOR);
String[] tokens = (new String(result)).split("\\"+SystemViewDataDropAdapter.RESOURCE_SEPARATOR); //$NON-NLS-1$ String[] tokens = (new String(result)).split("\\"+SystemViewDataDropAdapter.RESOURCE_SEPARATOR); //$NON-NLS-1$
ArrayList srcObjects = new ArrayList(); ArrayList srcObjects = new ArrayList();
//while (tokenizer.hasMoreTokens())
for (int i = 0; i <tokens.length; i++) for (int i = 0; i <tokens.length; i++)
{ {
String srcStr = tokens[i]; String srcStr = tokens[i];
@ -101,94 +105,30 @@ public class SystemDropActionDelegate implements IDropActionDelegate
srcObjects.add(srcObject); srcObjects.add(srcObject);
} }
SystemDNDTransferRunnable runnable = new SystemDNDTransferRunnable(target, srcObjects, null, SystemDNDTransferRunnable.SRC_TYPE_RSE_RESOURCE); final SystemDNDTransferRunnable runnable = new SystemDNDTransferRunnable(target, srcObjects, null, SystemDNDTransferRunnable.SRC_TYPE_RSE_RESOURCE);
final IResource lresource = resource;
runnable.schedule(); Job transferAndRefreshJob = new WorkspaceJob(GenericMessages.TransferOperation_message){
public IStatus runInWorkspace(IProgressMonitor monitor){
IStatus result = runnable.runInWorkspace(monitor);
if (resource != null) if (lresource != null){
{ try {
try lresource.refreshLocal(IResource.DEPTH_INFINITE, null);
{
resource.refreshLocal(IResource.DEPTH_INFINITE, null);
} }
catch (CoreException e) catch (CoreException e)
{ {
} }
} }
return result;
}
};
transferAndRefreshJob.schedule();
RSEUIPlugin.getTheSystemRegistryUI().clearRunnableContext(); RSEUIPlugin.getTheSystemRegistryUI().clearRunnableContext();
} }
/** FIXME - IREmoteFile is systems.core independent now
IRemoteFileSubSystem localFS = getLocalFileSubSystem();
try
{
IRemoteFile rsfTarget = localFS.getRemoteFileObject(localPath);
if (data instanceof byte[])
{
byte[] result = (byte[]) data;
// get the sources
//StringTokenizer tokenizer = new StringTokenizer(new String(result), SystemViewDataDropAdapter.RESOURCE_SEPARATOR);
String[] tokens = (new String(result)).split("\\"+SystemViewDataDropAdapter.RESOURCE_SEPARATOR);
ArrayList srcObjects = new ArrayList();
ArrayList rulesList = new ArrayList();
int j = 0;
//while (tokenizer.hasMoreTokens())
for (int i = 0; i <tokens.length; i++)
{
String srcStr = tokens[i];
Object srcObject = getObjectFor(srcStr);
srcObjects.add(srcObject);
if (srcObject instanceof ISchedulingRule)
{
rulesList.add(srcObject);
j++;
}
else if (srcObject instanceof IRemoteFile)
{
rulesList.add(new RemoteFileSchedulingRule((IRemoteFile)srcObject));
j++;
}
}
if (resource != null)
{
rulesList.add(resource);
j++;
}
ISchedulingRule[] rules = (ISchedulingRule[])rulesList.toArray(new ISchedulingRule[rulesList.size()]);
MultiRule rule = null;
if (j > 0)
{
rule = new MultiRule(rules);
}
Viewer currentViewer = null; // todo: figure out how to determine the current viewer! Phil
SystemDNDTransferRunnable runnable = new SystemDNDTransferRunnable(rsfTarget, srcObjects, currentViewer, SystemDNDTransferRunnable.SRC_TYPE_RSE_RESOURCE);
runnable.setRule(rule);
runnable.schedule();
if (resource != null)
{
try
{
resource.refreshLocal(IResource.DEPTH_INFINITE, null);
}
catch (CoreException e)
{
}
}
RSEUIPlugin.getTheSystemRegistryUI().clearRunnableContext();
}
}
catch (SystemMessageException e)
{
}
**/
return true; return true;
} }