jsonSchema: allow JsonSchemaProviderFactory#getResourceFile to accept relative or...
[idea/community.git] / json / src / com / jetbrains / jsonSchema / extension / JsonSchemaProjectSelfProviderFactory.java
1 /*
2  * Copyright 2000-2016 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.jetbrains.jsonSchema.extension;
17
18 import com.intellij.openapi.project.Project;
19 import com.intellij.openapi.util.Pair;
20 import com.intellij.openapi.vfs.VirtualFile;
21 import com.jetbrains.jsonSchema.JsonSchemaFileType;
22 import com.jetbrains.jsonSchema.JsonSchemaMappingsProjectConfiguration;
23 import org.jetbrains.annotations.NotNull;
24 import org.jetbrains.annotations.Nullable;
25
26 import java.util.Collections;
27 import java.util.List;
28
29 /**
30  * @author Irina.Chernushina on 2/24/2016.
31  */
32 public class JsonSchemaProjectSelfProviderFactory implements JsonSchemaProviderFactory {
33   public static final String SCHEMA_JSON_FILE_NAME = "schema.json";
34   private final List<JsonSchemaFileProvider> myProviders;
35
36   public JsonSchemaProjectSelfProviderFactory() {
37     myProviders = Collections.singletonList(new MyJsonSchemaFileProvider());
38   }
39
40   @Override
41   public List<JsonSchemaFileProvider> getProviders(@Nullable Project project) {
42     return myProviders;
43   }
44
45   private static class MyJsonSchemaFileProvider implements JsonSchemaFileProvider {
46     public static final Pair<SchemaType, Object> KEY = Pair.create(SchemaType.schema, SchemaType.schema);
47
48     @Override
49     public boolean isAvailable(@NotNull Project project, @NotNull VirtualFile file) {
50       if (!JsonSchemaFileType.INSTANCE.equals(file.getFileType())) return false;
51       return JsonSchemaMappingsProjectConfiguration.getInstance(project).isRegisteredSchemaFile(file);
52     }
53
54     @NotNull
55     @Override
56     public String getName() {
57       return SCHEMA_JSON_FILE_NAME;
58     }
59
60     @Override
61     public VirtualFile getSchemaFile() {
62       return JsonSchemaProviderFactory.getResourceFile(JsonSchemaProjectSelfProviderFactory.class, "/jsonSchema/schema.json");
63     }
64
65     @Override
66     public SchemaType getSchemaType() {
67       return SchemaType.schema;
68     }
69   }
70 }