simplify GTDUCollector a bit more
[idea/community.git] / platform / lang-impl / src / com / intellij / openapi / roots / libraries / LibraryPresentationProvider.java
1 /*
2  * Copyright 2000-2012 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.intellij.openapi.roots.libraries;
17
18 import com.intellij.openapi.extensions.ExtensionPointName;
19 import com.intellij.openapi.vfs.VirtualFile;
20 import org.jetbrains.annotations.Nls;
21 import org.jetbrains.annotations.NotNull;
22 import org.jetbrains.annotations.Nullable;
23
24 import javax.swing.*;
25 import java.util.List;
26
27 /**
28  * Implement this extension point to provide a custom icon and description for specific libraries in Project Structure dialog. Belonging
29  * to a specific kind is determined automatically by classes roots of a library using {@link #detect(List)} method, if you need to specify
30  * it explicitly use {@link LibraryType} extension point instead. <br>
31  * The implementation should be registered in plugin.xml:
32  * <pre>
33  * &lt;extensions defaultExtensionNs="com.intellij"&gt;
34  * &nbsp;&nbsp;&lt;library.presentationProvider implementation="qualified-class-name"/&gt;
35  * &lt;/extensions&gt;
36  * </pre>
37  *
38  * @see LibraryType
39  */
40 public abstract class LibraryPresentationProvider<P extends LibraryProperties> {
41   public static final ExtensionPointName<LibraryPresentationProvider> EP_NAME = ExtensionPointName.create("com.intellij.library.presentationProvider");
42   private final LibraryKind myKind;
43
44   protected LibraryPresentationProvider(@NotNull LibraryKind kind) {
45     myKind = kind;
46   }
47
48   @NotNull
49   public LibraryKind getKind() {
50     return myKind;
51   }
52
53   /**
54    * @deprecated override {@link #getIcon(LibraryProperties)} instead
55    */
56   @Deprecated
57   @Nullable
58   public Icon getIcon() {
59     return null;
60   }
61
62   @Nullable
63   public Icon getIcon(@Nullable P properties) {
64     return getIcon();
65   }
66
67   /**
68    * @return description of a library to be shown in 'Library Editor' in 'Project Structure' dialog
69    */
70   @Nullable
71   public @Nls String getDescription(@NotNull P properties) {
72     return null;
73   }
74
75   /**
76    * Returns non-null value if a library with classes roots {@code classesRoots} is of a kind described by this provider.
77    */
78   @Nullable
79   public abstract P detect(@NotNull List<VirtualFile> classesRoots);
80 }