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