Lines 214-223
Link Here
|
214 |
} |
214 |
} |
215 |
|
215 |
|
216 |
@Override |
216 |
@Override |
|
|
217 |
public FileObject copy(FileObject target, String name, String ext) throws IOException { |
218 |
ProvidedExtensions extensions = getProvidedExtensions(); |
219 |
|
220 |
File to = getToFile(target, name, ext); |
221 |
|
222 |
extensions.beforeCopy(target, to); |
223 |
FileObject result = null; |
224 |
try { |
225 |
final IOHandler copyHandler = extensions.getCopyHandler(getFileName().getFile(), to); |
226 |
if (copyHandler != null) { |
227 |
if (target instanceof FolderObj) { |
228 |
result = handleMoveCopy((FolderObj)target, name, ext, copyHandler); |
229 |
} else { |
230 |
copyHandler.handle(); |
231 |
refresh(true); |
232 |
//perfromance bottleneck to call refresh on folder |
233 |
//(especially for many files to be copied) |
234 |
target.refresh(true); // XXX ? |
235 |
result = target.getFileObject(name, ext); // XXX ? |
236 |
assert result != null : "Cannot find " + target + " with " + name + "." + ext; |
237 |
} |
238 |
FileUtil.copyAttributes(this, result); |
239 |
} else { |
240 |
result = super.copy(target, name, ext); |
241 |
} |
242 |
} catch (IOException ioe) { |
243 |
extensions.copyFailure(this, to); |
244 |
throw ioe; |
245 |
} |
246 |
extensions.copySuccess(this, to); |
247 |
return result; |
248 |
} |
249 |
|
250 |
@Override |
217 |
public final FileObject move(FileLock lock, FileObject target, String name, String ext) throws IOException { |
251 |
public final FileObject move(FileLock lock, FileObject target, String name, String ext) throws IOException { |
218 |
ProvidedExtensions extensions = getProvidedExtensions(); |
252 |
ProvidedExtensions extensions = getProvidedExtensions(); |
219 |
File to = (target instanceof FolderObj) ? new File(((BaseFileObj) target).getFileName().getFile(), FileInfo.composeName(name, ext)) : |
253 |
File to = getToFile(target, name, ext); |
220 |
new File(FileUtil.toFile(target), FileInfo.composeName(name, ext)); |
|
|
221 |
|
254 |
|
222 |
extensions.beforeMove(this, to); |
255 |
extensions.beforeMove(this, to); |
223 |
FileObject result = null; |
256 |
FileObject result = null; |
Lines 253-260
Link Here
|
253 |
} |
286 |
} |
254 |
|
287 |
|
255 |
public BaseFileObj move(FileLock lock, FolderObj target, String name, String ext, ProvidedExtensions.IOHandler moveHandler) throws IOException { |
288 |
public BaseFileObj move(FileLock lock, FolderObj target, String name, String ext, ProvidedExtensions.IOHandler moveHandler) throws IOException { |
256 |
moveHandler.handle(); |
289 |
return handleMoveCopy(target, name, ext, moveHandler); |
257 |
String nameExt = FileInfo.composeName(name,ext); |
290 |
} |
|
|
291 |
|
292 |
private File getToFile(FileObject target, String name, String ext) { |
293 |
File to = (target instanceof FolderObj) ? new File(((BaseFileObj) target).getFileName().getFile(), FileInfo.composeName(name, ext)) : new File(FileUtil.toFile(target), FileInfo.composeName(name, ext)); |
294 |
return to; |
295 |
} |
296 |
|
297 |
private BaseFileObj handleMoveCopy(FolderObj target, String name, String ext, IOHandler handler) throws IOException { |
298 |
handler.handle(); |
299 |
String nameExt = FileInfo.composeName(name, ext); |
258 |
target.getChildrenCache().getChild(nameExt, true); |
300 |
target.getChildrenCache().getChild(nameExt, true); |
259 |
//TODO: review |
301 |
//TODO: review |
260 |
BaseFileObj result = null; |
302 |
BaseFileObj result = null; |
Lines 268-276
Link Here
|
268 |
result.fireFileFolderCreatedEvent(false); |
310 |
result.fireFileFolderCreatedEvent(false); |
269 |
} |
311 |
} |
270 |
break; |
312 |
break; |
271 |
} |
313 |
} // is not yet ready. We wait max. 1000 ms. |
272 |
// #179109 - result is sometimes null, probably when moved file |
|
|
273 |
// is not yet ready. We wait max. 1000 ms. |
274 |
try { |
314 |
try { |
275 |
Thread.sleep(100); |
315 |
Thread.sleep(100); |
276 |
} catch (InterruptedException ex) { |
316 |
} catch (InterruptedException ex) { |
Lines 288-294
Link Here
|
288 |
return result; |
328 |
return result; |
289 |
} |
329 |
} |
290 |
|
330 |
|
291 |
|
|
|
292 |
void rename(final FileLock lock, final String name, final String ext, final ProvidedExtensions.IOHandler handler) throws IOException { |
331 |
void rename(final FileLock lock, final String name, final String ext, final ProvidedExtensions.IOHandler handler) throws IOException { |
293 |
if (!checkLock(lock)) { |
332 |
if (!checkLock(lock)) { |
294 |
FSException.io("EXC_InvalidLock", lock, getPath()); // NOI18N |
333 |
FSException.io("EXC_InvalidLock", lock, getPath()); // NOI18N |