jsonSchema: allow JsonSchemaProviderFactory#getResourceFile to accept relative or...
[idea/community.git] / json / src / com / jetbrains / jsonSchema / extension / JsonSchemaProviderFactory.java
1 package com.jetbrains.jsonSchema.extension;
2
3 import com.intellij.openapi.diagnostic.Logger;
4 import com.intellij.openapi.extensions.ExtensionPointName;
5 import com.intellij.openapi.project.Project;
6 import com.intellij.openapi.vfs.VfsUtil;
7 import com.intellij.openapi.vfs.VirtualFile;
8 import org.jetbrains.annotations.NotNull;
9 import org.jetbrains.annotations.Nullable;
10
11 import java.net.URL;
12 import java.util.List;
13
14 public interface JsonSchemaProviderFactory {
15   ExtensionPointName<JsonSchemaProviderFactory> EP_NAME = ExtensionPointName.create("JavaScript.JsonSchema.ProviderFactory");
16   Logger LOG = Logger.getInstance(JsonSchemaProviderFactory.class);
17
18   List<JsonSchemaFileProvider> getProviders(@Nullable Project project);
19
20   /**
21    * Finds a {@link VirtualFile} instance corresponding to a specified resource path (relative or absolute).
22    *
23    * @param baseClass
24    * @param resourcePath  String identifying a resource (relative or absolute)
25    *                      See {@link Class#getResource(String)} for more details
26    * @return VirtualFile instance, or null if not found
27    */
28   static VirtualFile getResourceFile(@NotNull Class baseClass, @NotNull String resourcePath) {
29     URL url = baseClass.getResource(resourcePath);
30     if (url == null) {
31       LOG.error("Cannot find resource " + resourcePath);
32       return null;
33     }
34     VirtualFile file = VfsUtil.findFileByURL(url);
35     if (file == null) {
36       LOG.error("Cannot find file by " + resourcePath);
37       return null;
38     }
39     return file;
40   }
41 }