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 |
} |