f1efa14704cd49cb7d7d7018018ba9302d1d8a92
[idea/community.git] / platform / lang-api / src / com / intellij / facet / pointers / FacetPointersManager.java
1 // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.facet.pointers;
3
4 import com.intellij.facet.Facet;
5 import com.intellij.openapi.Disposable;
6 import com.intellij.openapi.project.Project;
7 import org.jetbrains.annotations.NotNull;
8
9 public abstract class FacetPointersManager {
10   public static FacetPointersManager getInstance(Project project) {
11     return project.getComponent(FacetPointersManager.class);
12   }
13
14   public abstract <F extends Facet> FacetPointer<F> create(F facet);
15   public abstract <F extends Facet> FacetPointer<F> create(String id);
16
17   public abstract void addListener(FacetPointerListener<Facet> listener);
18   public abstract void addListener(FacetPointerListener<Facet> listener, Disposable parentDisposable);
19   public abstract void removeListener(FacetPointerListener<Facet> listener);
20
21   public abstract <F extends Facet> void addListener(Class<F> facetClass, FacetPointerListener<F> listener);
22   public abstract <F extends Facet> void addListener(Class<F> facetClass, FacetPointerListener<F> listener, Disposable parentDisposable);
23   public abstract <F extends Facet> void removeListener(Class<F> facetClass, FacetPointerListener<F> listener);
24
25   public static String constructId(final String moduleName, final String facetTypeId, final String facetName) {
26     return moduleName + "/" + facetTypeId + "/" + facetName;
27   }
28
29   @NotNull
30   public static String constructId(@NotNull Facet facet) {
31     return constructId(facet.getModule().getName(), facet.getType().getStringId(), facet.getName());
32   }
33
34   @NotNull
35   public static String getFacetName(@NotNull String facetPointerId) {
36     return facetPointerId.substring(facetPointerId.lastIndexOf('/') + 1);
37   }
38
39   @NotNull
40   public static String getModuleName(String facetPointerId) {
41     return facetPointerId.substring(0, facetPointerId.indexOf('/'));
42   }
43
44   @NotNull
45   public static String getFacetType(@NotNull String facetPointerId) {
46     return facetPointerId.substring(facetPointerId.indexOf('/') + 1, facetPointerId.lastIndexOf('/'));
47   }
48 }