2379b96ab9860f3e9b513f51ff9da674015d6e07
[idea/community.git] / java / idea-ui / src / com / intellij / util / ui / classpath / ChooseLibrariesFromTablesDialog.java
1 /*
2  * Copyright 2000-2011 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.util.ui.classpath;
17
18 import com.intellij.openapi.application.Application;
19 import com.intellij.openapi.project.Project;
20 import com.intellij.openapi.roots.impl.libraries.LibraryTableImplUtil;
21 import com.intellij.openapi.roots.libraries.Library;
22 import com.intellij.openapi.roots.libraries.LibraryTable;
23 import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar;
24 import org.jetbrains.annotations.NotNull;
25 import org.jetbrains.annotations.Nullable;
26
27 import javax.swing.*;
28 import java.util.ArrayList;
29 import java.util.Collections;
30 import java.util.List;
31
32 public class ChooseLibrariesFromTablesDialog extends ChooseLibrariesDialogBase {
33   private @Nullable final Project myProject;
34   private final boolean myShowCustomLibraryTables;
35
36   protected ChooseLibrariesFromTablesDialog(@NotNull String title, @NotNull Project project, final boolean showCustomLibraryTables) {
37     super(project, title);
38     myShowCustomLibraryTables = showCustomLibraryTables;
39     myProject = project;
40   }
41
42   protected ChooseLibrariesFromTablesDialog(@NotNull JComponent parentComponent,
43                                             @NotNull String title,
44                                             @Nullable Project project,
45                                             final boolean showCustomLibraryTables) {
46     super(parentComponent, title);
47     myShowCustomLibraryTables = showCustomLibraryTables;
48     myProject = project;
49   }
50
51   public static ChooseLibrariesFromTablesDialog createDialog(@NotNull String title,
52                                                              @NotNull Project project,
53                                                              final boolean showCustomLibraryTables) {
54     final ChooseLibrariesFromTablesDialog dialog = new ChooseLibrariesFromTablesDialog(title, project, showCustomLibraryTables);
55     dialog.init();
56     return dialog;
57   }
58
59   @NotNull
60   @Override
61   protected Project getProject() {
62     if (myProject != null) {
63       return myProject;
64     }
65     return super.getProject();
66   }
67
68   @Override
69   protected JComponent createNorthPanel() {
70     return null;
71   }
72
73   @Override
74   protected void collectChildren(Object element, List<Object> result) {
75     if (element instanceof Application) {
76       for (LibraryTable table : getLibraryTables(myProject, myShowCustomLibraryTables)) {
77         if (hasLibraries(table)) {
78           result.add(table);
79         }
80       }
81     }
82     else if (element instanceof LibraryTable) {
83       Collections.addAll(result, getLibraries((LibraryTable)element));
84     }
85   }
86
87   public static List<LibraryTable> getLibraryTables(final Project project, final boolean showCustomLibraryTables) {
88     final List<LibraryTable> tables = new ArrayList<>();
89     final LibraryTablesRegistrar registrar = LibraryTablesRegistrar.getInstance();
90     if (project != null) {
91       tables.add(registrar.getLibraryTable(project));
92     }
93     tables.add(registrar.getLibraryTable());
94     if (showCustomLibraryTables) {
95       tables.addAll(registrar.getCustomLibraryTables());
96     }
97     return tables;
98   }
99
100   private boolean hasLibraries(LibraryTable table) {
101     final Library[] libraries = getLibraries(table);
102     for (Library library : libraries) {
103       if (acceptsElement(library)) {
104         return true;
105       }
106     }
107     return false;
108   }
109
110   @Override
111   protected int getLibraryTableWeight(@NotNull LibraryTable libraryTable) {
112     if (libraryTable.getTableLevel().equals(LibraryTableImplUtil.MODULE_LEVEL)) return 0;
113     if (isProjectLibraryTable(libraryTable)) return 1;
114     if (isApplicationLibraryTable(libraryTable)) return 2;
115     return 3;
116   }
117
118   private static boolean isApplicationLibraryTable(LibraryTable libraryTable) {
119     return libraryTable.equals(LibraryTablesRegistrar.getInstance().getLibraryTable());
120   }
121
122   private boolean isProjectLibraryTable(LibraryTable libraryTable) {
123     final LibraryTablesRegistrar registrar = LibraryTablesRegistrar.getInstance();
124     return myProject != null && libraryTable.equals(registrar.getLibraryTable(myProject));
125   }
126
127   @Override
128   protected boolean isAutoExpandLibraryTable(@NotNull LibraryTable libraryTable) {
129     return isApplicationLibraryTable(libraryTable) || isProjectLibraryTable(libraryTable);
130   }
131
132   protected Library @NotNull [] getLibraries(@NotNull LibraryTable table) {
133     return table.getLibraries();
134   }
135 }