From 30d4cdf5cbc6b0f19ace370eb4c9e58b99ebfff0 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Mon, 2 Dec 2013 17:16:16 +0100 Subject: [PATCH 1/2] cleanup --- .../intellij/openapi/vfs/impl/http/RemoteFileInfoImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/http/RemoteFileInfoImpl.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/http/RemoteFileInfoImpl.java index 5775d2160b5f..b59393903be2 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/http/RemoteFileInfoImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/http/RemoteFileInfoImpl.java @@ -22,7 +22,7 @@ import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VfsBundle; -import com.intellij.openapi.vfs.VfsUtil; +import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; @@ -142,7 +142,7 @@ public class RemoteFileInfoImpl implements RemoteContentProvider.DownloadingCall VirtualFile localFile = new WriteAction() { @Override - protected void run(final Result result) { + protected void run(@NotNull final Result result) { final VirtualFile file = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(localIOFile); if (file != null) { file.refresh(false, false); @@ -234,7 +234,7 @@ public class RemoteFileInfoImpl implements RemoteContentProvider.DownloadingCall myCancelled.set(true); if (myPrevLocalFile != null) { myLocalVirtualFile = myPrevLocalFile; - myLocalFile = VfsUtil.virtualToIoFile(myLocalVirtualFile); + myLocalFile = VfsUtilCore.virtualToIoFile(myLocalVirtualFile); myState = RemoteFileState.DOWNLOADED; myErrorMessage = null; } From 2694a1f8942a35e411e6025971548f116154de0e Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Mon, 2 Dec 2013 18:40:00 +0100 Subject: [PATCH 2/2] VisualizeScriptSourcemap action --- .../openapi/vfs/impl/http/RemoteFileInfo.java | 4 ++ .../vfs/impl/http/RemoteFileInfoImpl.java | 42 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/platform/core-impl/src/com/intellij/openapi/vfs/impl/http/RemoteFileInfo.java b/platform/core-impl/src/com/intellij/openapi/vfs/impl/http/RemoteFileInfo.java index 9f4ef3e05fb7..9f517bb5b61a 100644 --- a/platform/core-impl/src/com/intellij/openapi/vfs/impl/http/RemoteFileInfo.java +++ b/platform/core-impl/src/com/intellij/openapi/vfs/impl/http/RemoteFileInfo.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.vfs.impl.http; +import com.intellij.openapi.util.AsyncResult; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; @@ -34,4 +35,7 @@ public interface RemoteFileInfo { RemoteFileState getState(); void cancelDownloading(); + + @NotNull + AsyncResult download(); } diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/http/RemoteFileInfoImpl.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/http/RemoteFileInfoImpl.java index b59393903be2..4328df107d6f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/http/RemoteFileInfoImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/http/RemoteFileInfoImpl.java @@ -19,6 +19,7 @@ import com.intellij.openapi.application.Result; import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileTypes.FileType; +import com.intellij.openapi.util.AsyncResult; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VfsBundle; @@ -291,4 +292,45 @@ public class RemoteFileInfoImpl implements RemoteContentProvider.DownloadingCall } } } + + @NotNull + @Override + public AsyncResult download() { + synchronized (myLock) { + switch (getState()) { + case DOWNLOADING_NOT_STARTED: + startDownloading(); + return createDownloadedCallback(this); + case DOWNLOADING_IN_PROGRESS: + return createDownloadedCallback(this); + case DOWNLOADED: + return new AsyncResult.Done(myLocalVirtualFile); + + case ERROR_OCCURRED: + default: + return new AsyncResult.Rejected(); + } + } + } + + private static AsyncResult createDownloadedCallback(@NotNull RemoteFileInfo remoteFileInfo) { + final AsyncResult callback = new AsyncResult(); + remoteFileInfo.addDownloadingListener(new FileDownloadingAdapter() { + @Override + public void fileDownloaded(VirtualFile localFile) { + callback.setDone(localFile); + } + + @Override + public void errorOccurred(@NotNull String errorMessage) { + callback.reject(errorMessage); + } + + @Override + public void downloadingCancelled() { + callback.setRejected(); + } + }); + return callback; + } }