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