View | Details | Raw Unified | Return to bug 153652
Collapse All | Expand All

(-)UI/org/eclipse/rse/ui/actions/SystemCopyToClipboardAction.java (-2 / +113 lines)
Lines 18-24 Link Here
18
import java.util.ArrayList;
18
import java.util.ArrayList;
19
import java.util.Iterator;
19
import java.util.Iterator;
20
20
21
import org.eclipse.core.resources.IContainer;
22
import org.eclipse.core.resources.IFile;
23
import org.eclipse.core.resources.IResource;
21
import org.eclipse.core.runtime.IAdaptable;
24
import org.eclipse.core.runtime.IAdaptable;
25
import org.eclipse.core.runtime.IProgressMonitor;
26
import org.eclipse.core.runtime.IStatus;
27
import org.eclipse.core.runtime.NullProgressMonitor;
28
import org.eclipse.core.runtime.Status;
29
import org.eclipse.core.runtime.jobs.Job;
22
import org.eclipse.jface.viewers.IStructuredSelection;
30
import org.eclipse.jface.viewers.IStructuredSelection;
23
import org.eclipse.rse.core.model.IHost;
31
import org.eclipse.rse.core.model.IHost;
24
import org.eclipse.rse.core.model.ISystemRegistry;
32
import org.eclipse.rse.core.model.ISystemRegistry;
Lines 30-35 Link Here
30
import org.eclipse.rse.ui.RSEUIPlugin;
38
import org.eclipse.rse.ui.RSEUIPlugin;
31
import org.eclipse.rse.ui.SystemResources;
39
import org.eclipse.rse.ui.SystemResources;
32
import org.eclipse.rse.ui.validators.IValidatorRemoteSelection;
40
import org.eclipse.rse.ui.validators.IValidatorRemoteSelection;
41
import org.eclipse.rse.ui.view.ISystemEditableRemoteObject;
33
import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter;
42
import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter;
34
import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
43
import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
35
import org.eclipse.swt.dnd.Clipboard;
44
import org.eclipse.swt.dnd.Clipboard;
Lines 41-46 Link Here
41
import org.eclipse.ui.PlatformUI;
50
import org.eclipse.ui.PlatformUI;
42
import org.eclipse.ui.part.PluginTransfer;
51
import org.eclipse.ui.part.PluginTransfer;
43
import org.eclipse.ui.part.PluginTransferData;
52
import org.eclipse.ui.part.PluginTransferData;
53
import org.eclipse.ui.part.ResourceTransfer;
44
54
45
55
46
/**
56
/**
Lines 48-57 Link Here
48
 */
58
 */
49
public class SystemCopyToClipboardAction extends SystemBaseAction implements  IValidatorRemoteSelection
59
public class SystemCopyToClipboardAction extends SystemBaseAction implements  IValidatorRemoteSelection
50
{
60
{
51
61
	private class LazyDownloadJob extends Job
62
	{
63
		private ISystemEditableRemoteObject _editable;
64
		public LazyDownloadJob(ISystemEditableRemoteObject editable) 
65
		{
66
			// TODO Auto-generated constructor stub
67
			super("Downloading " + editable.getAbsolutePath());
68
			_editable = editable;
69
		}
70
		
71
		public IStatus run(IProgressMonitor monitor)
72
		{	
73
			try
74
			{
75
				_editable.download(monitor);
76
			}
77
			catch (Exception e)
78
			{
79
				e.printStackTrace();
80
			}
81
			return Status.OK_STATUS;
82
		}
83
	}
52
84
53
	private IStructuredSelection _selection;
85
	private IStructuredSelection _selection;
54
	private Clipboard _clipboard;
86
	private Clipboard _clipboard;
87
	private boolean  _doResourceTransfer = true; //experiment
55
88
56
	/**
89
	/**
57
	 * Constructor
90
	 * Constructor
Lines 76-81 Link Here
76
			copySelectionToClipboard(_selection);
109
			copySelectionToClipboard(_selection);
77
		}
110
		}
78
	}
111
	}
112
	
113
	private IResource getResource(IAdaptable dragObject)
114
	{
115
		IResource resource = null;
116
		ISystemViewElementAdapter viewAdapter = (ISystemViewElementAdapter) dragObject.getAdapter(ISystemViewElementAdapter.class);
117
		ISystemRemoteElementAdapter remoteAdapter = (ISystemRemoteElementAdapter)dragObject.getAdapter(ISystemRemoteElementAdapter.class);
118
		
119
		if (remoteAdapter != null)
120
		{
121
			
122
			if (remoteAdapter.canEdit(dragObject))
123
			{				
124
				ISystemEditableRemoteObject editable = remoteAdapter.getEditableRemoteObject(dragObject);
125
				// corresponds to a file
126
				IFile file = editable.getLocalResource();
127
				if (!file.exists())
128
				{
129
					LazyDownloadJob job = new LazyDownloadJob(editable);
130
					job.schedule();
131
				}
132
				resource = file;
133
			}
134
			else if (viewAdapter != null)
135
			{
136
				if (viewAdapter.hasChildren(dragObject)) 
137
				{
138
					IContainer parentFolder = null;
139
					// corresponds to a folder
140
					Object[] children = viewAdapter.getChildren(new NullProgressMonitor(), dragObject);
141
					for (int i = 0; i < children.length; i++)
142
					{
143
						IAdaptable child = (IAdaptable)children[i];
144
						IResource childResource = getResource(child);
145
						if (parentFolder == null && childResource != null)
146
						{							
147
							parentFolder = childResource.getParent();
148
							if (!parentFolder.exists())
149
							{
150
								try
151
								{
152
									parentFolder.touch(new NullProgressMonitor());
153
								}
154
								catch (Exception e)
155
								{
156
									
157
								}
158
							
159
							}
160
						}
161
					}
162
					
163
					
164
					resource = parentFolder;
165
				}				
166
			}
167
		}		
168
		return resource;
169
	}
170
	
79
171
80
	private void copySelectionToClipboard(IStructuredSelection ss)
172
	private void copySelectionToClipboard(IStructuredSelection ss)
81
	{
173
	{
Lines 84-90 Link Here
84
		// marshall data
176
		// marshall data
85
		StringBuffer textStream = new StringBuffer(""); //$NON-NLS-1$
177
		StringBuffer textStream = new StringBuffer(""); //$NON-NLS-1$
86
		StringBuffer dataStream = new StringBuffer(""); //$NON-NLS-1$
178
		StringBuffer dataStream = new StringBuffer(""); //$NON-NLS-1$
179
		
87
		ArrayList fileNames = new ArrayList();
180
		ArrayList fileNames = new ArrayList();
181
		ArrayList resources = new ArrayList();
182
		
88
		ISystemRegistry registry = RSEUIPlugin.getTheSystemRegistry();
183
		ISystemRegistry registry = RSEUIPlugin.getTheSystemRegistry();
89
184
90
		while (iterator.hasNext())
185
		while (iterator.hasNext())
Lines 119-124 Link Here
119
							dataStream.append(SystemViewDataDropAdapter.RESOURCE_SEPARATOR);
214
							dataStream.append(SystemViewDataDropAdapter.RESOURCE_SEPARATOR);
120
						}
215
						}
121
216
217
						if (_doResourceTransfer)
218
						{
219
							resources.add(getResource((IAdaptable)dragObject));
220
						}
221
						
122
						/** FIXME - files can't be coupled to systems.core!
222
						/** FIXME - files can't be coupled to systems.core!
123
						// support for external copy for local files
223
						// support for external copy for local files
124
						if (dragObject instanceof IRemoteFile)
224
						if (dragObject instanceof IRemoteFile)
Lines 141-147 Link Here
141
		PluginTransferData data = new PluginTransferData(SystemDropActionDelegate.ID, dataStream.toString().getBytes());
241
		PluginTransferData data = new PluginTransferData(SystemDropActionDelegate.ID, dataStream.toString().getBytes());
142
242
143
		// put data in clipboard
243
		// put data in clipboard
144
		if (fileNames.size() == 0)
244
		if (_doResourceTransfer && resources.size() > 0)
245
		{
246
			IResource[] ft = new IResource[resources.size()];
247
			for (int i = 0; i < ft.length; i++)
248
			{
249
				ft[i] = (IResource) resources.get(i);								
250
			}
251
252
			_clipboard.setContents(new Object[] { data, ft, textStream.toString() }, new Transfer[] { PluginTransfer.getInstance(), ResourceTransfer.getInstance(), TextTransfer.getInstance()});
253
254
		}
255
		else if (fileNames.size() == 0)
145
		{
256
		{
146
			_clipboard.setContents(new Object[] { data, textStream.toString() }, new Transfer[] { PluginTransfer.getInstance(), TextTransfer.getInstance()});
257
			_clipboard.setContents(new Object[] { data, textStream.toString() }, new Transfer[] { PluginTransfer.getInstance(), TextTransfer.getInstance()});
147
		}
258
		}

Return to bug 153652