com.intellij.openapi.vfs.VirtualFileManager Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of core-api Show documentation
Show all versions of core-api Show documentation
A packaging of the IntelliJ Community Edition core-api library.
This is release number 1 of trunk branch 142.
The newest version!
/*
* Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.openapi.vfs;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.util.ModificationTracker;
import com.intellij.openapi.vfs.newvfs.BulkFileListener;
import com.intellij.util.io.URLUtil;
import com.intellij.util.messages.Topic;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* Manages virtual file systems.
*
* @see VirtualFileSystem
*/
public abstract class VirtualFileManager implements ModificationTracker {
public static final Topic VFS_CHANGES =
new Topic("NewVirtualFileSystem changes", BulkFileListener.class);
/**
* Gets the instance of VirtualFileManager
.
*
* @return VirtualFileManager
*/
@NotNull
public static VirtualFileManager getInstance() {
return ApplicationManager.getApplication().getComponent(VirtualFileManager.class);
}
/**
* Gets VirtualFileSystem with the specified protocol.
*
* @param protocol String representing the protocol
* @return {@link VirtualFileSystem}
* @see VirtualFileSystem#getProtocol
*/
public abstract VirtualFileSystem getFileSystem(String protocol);
/**
* Refreshes the cached file systems information from the physical file systems synchronously.
*
* Note: this method should be only called within a write-action
* (see {@linkplain com.intellij.openapi.application.Application#runWriteAction})
*
* @return refresh session ID.
*/
public abstract long syncRefresh();
/**
* Refreshes the cached file systems information from the physical file systems asynchronously.
* Launches specified action when refresh is finished.
*
* @return refresh session ID.
*/
public abstract long asyncRefresh(@Nullable Runnable postAction);
public abstract void refreshWithoutFileWatcher(boolean asynchronous);
/**
* Searches for the file specified by given URL. URL is a string which uniquely identifies file in all
* file systems.
*
* @param url the URL to find file by
* @return {@link VirtualFile}
if the file was found, null
otherwise
* @see VirtualFile#getUrl
* @see VirtualFileSystem#findFileByPath
* @see #refreshAndFindFileByUrl
*/
@Nullable
public abstract VirtualFile findFileByUrl(@NonNls @NotNull String url);
/**
* Refreshes only the part of the file system needed for searching the file by the given URL and finds file
* by the given URL.
*
* This method is useful when the file was created externally and you need to find {@link VirtualFile}
* corresponding to it.
*
* This method should be only called within write-action.
* See {@link com.intellij.openapi.application.Application#runWriteAction}.
*
* @param url the URL
* @return {@link VirtualFile}
if the file was found, null
otherwise
* @see VirtualFileSystem#findFileByPath
* @see VirtualFileSystem#refreshAndFindFileByPath
*/
@Nullable
public abstract VirtualFile refreshAndFindFileByUrl(@NotNull String url);
/**
* Adds listener to the file system.
*
* @param listener the listener
* @see VirtualFileListener
*/
public abstract void addVirtualFileListener(@NotNull VirtualFileListener listener);
public abstract void addVirtualFileListener(@NotNull VirtualFileListener listener, @NotNull Disposable parentDisposable);
/**
* Removes listener form the file system.
*
* @param listener the listener
*/
public abstract void removeVirtualFileListener(@NotNull VirtualFileListener listener);
/**
* Constructs URL by specified protocol and path. URL is a string which uniquely identifies file in all
* file systems.
*
* @param protocol the protocol
* @param path the path
* @return URL
*/
@NotNull
public static String constructUrl(@NotNull String protocol, @NotNull String path) {
return protocol + URLUtil.SCHEME_SEPARATOR + path;
}
/**
* Extracts protocol from the given URL. Protocol is a substring from the beginning of the URL till "://".
*
* @param url the URL
* @return protocol or null
if there is no "://" in the URL
* @see VirtualFileSystem#getProtocol
*/
@Nullable
public static String extractProtocol(@NotNull String url) {
int index = url.indexOf(URLUtil.SCHEME_SEPARATOR);
if (index < 0) return null;
return url.substring(0, index);
}
/**
* Extracts path from the given URL. Path is a substring from "://" till the end of URL. If there is no "://" URL
* itself is returned.
*
* @param url the URL
* @return path
*/
@NotNull
public static String extractPath(@NotNull String url) {
int index = url.indexOf(URLUtil.SCHEME_SEPARATOR);
if (index < 0) return url;
return url.substring(index + URLUtil.SCHEME_SEPARATOR.length());
}
public abstract void addVirtualFileManagerListener(@NotNull VirtualFileManagerListener listener);
public abstract void addVirtualFileManagerListener(@NotNull VirtualFileManagerListener listener, @NotNull Disposable parentDisposable);
public abstract void removeVirtualFileManagerListener(@NotNull VirtualFileManagerListener listener);
public abstract void notifyPropertyChanged(@NotNull VirtualFile virtualFile, @NotNull String property, Object oldValue, Object newValue);
}