df0aa2188c82b1c847a4445d9862650225668f77
[idea/community.git] / platform / lang-api / src / com / intellij / facet / FacetModel.java
1 /*
2  * Copyright 2000-2009 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
17 package com.intellij.facet;
18
19 import org.jetbrains.annotations.NotNull;
20 import org.jetbrains.annotations.Nullable;
21
22 import java.util.Collection;
23
24 /**
25  * @author nik
26  */
27 public interface FacetModel {
28   /**
29    * Returns all facets in the module sorted in such a way that a facet will occur before any of its subfacets
30    * @return sorted array of facets
31    */
32   @NotNull
33   Facet[] getSortedFacets();
34
35   /**
36    * @return all facets in the module
37    */
38   @NotNull
39   Facet[] getAllFacets();
40
41   /**
42    * @param typeId type of facets
43    * @return all facets of the given type
44    */
45   @NotNull
46   <F extends Facet> Collection<F> getFacetsByType(FacetTypeId<F> typeId);
47
48   /**
49    * @param typeId type of facet
50    * @return first facet of the given type or {@code null} if the module doesn't contain facets of this type
51    */
52   @Nullable
53   <F extends Facet> F getFacetByType(FacetTypeId<F> typeId);
54
55   /**
56    * @param type type of facet
57    * @param name name of facet
58    * @return first facet of the given type with the given name or {@code null} if not found
59    */
60   @Nullable
61   <F extends Facet> F findFacet(FacetTypeId<F> type, String name);
62
63   /**
64    * @param underlyingFacet facet
65    * @param typeId type of subfacet
66    * @return first subfacet of the given facet
67    */
68   @Nullable
69   <F extends Facet> F getFacetByType(@NotNull Facet underlyingFacet, FacetTypeId<F> typeId);
70
71   /**
72    * @param underlyingFacet facet
73    * @param typeId type of subfacet
74    * @return all subfacets of the given facet
75    */
76   @NotNull
77   <F extends Facet> Collection<F> getFacetsByType(@NotNull Facet underlyingFacet, FacetTypeId<F> typeId);
78
79   @NotNull
80   String getFacetName(@NotNull Facet facet);
81 }