IDEA-251030 Icons are not shown in Database toolwindow popup menu
[idea/community.git] / java / idea-ui / src / com / intellij / ide / util / importProject / ProjectLayoutPanel.java
index 563f684639ff5e4c64c7eba259d20afe030deba4..8a6f595195fc953d1896730eb21eec04c08f3092 100644 (file)
@@ -13,7 +13,7 @@ import com.intellij.openapi.ui.Messages;
 import com.intellij.openapi.ui.Splitter;
 import com.intellij.openapi.ui.ex.MultiLineLabel;
 import com.intellij.openapi.util.NlsContexts;
-import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.openapi.util.NlsSafe;
 import com.intellij.ui.DocumentAdapter;
 import com.intellij.ui.IdeBorderFactory;
 import com.intellij.ui.ScrollPaneFactory;
@@ -23,6 +23,7 @@ import com.intellij.util.PlatformIcons;
 import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.ui.FormBuilder;
 import com.intellij.util.ui.JBUI;
+import org.jetbrains.annotations.Nls;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
@@ -60,7 +61,7 @@ abstract class ProjectLayoutPanel<T> extends JPanel {
     setBorder(BorderFactory.createEmptyBorder(5, 5, 0, 5));
     myInsight = insight;
 
-    myEntriesChooser = new ElementsChooser<T>(true) {
+    myEntriesChooser = new ElementsChooser<>(true) {
       @Override
       public String getItemText(@NotNull T element) {
         return getElementText(element);
@@ -72,7 +73,7 @@ abstract class ProjectLayoutPanel<T> extends JPanel {
 
     final JPanel entriesPanel = new JPanel(new BorderLayout());
     entriesPanel.add(myEntriesChooser, BorderLayout.CENTER);
-    entriesPanel.setBorder(IdeBorderFactory.createTitledBorder(StringUtil.capitalize(StringUtil.pluralize(getElementTypeName())), false));
+    entriesPanel.setBorder(IdeBorderFactory.createTitledBorder(getElementTypeNamePlural(), false));
     splitter.setFirstComponent(entriesPanel);
 
     final JScrollPane depsPane = ScrollPaneFactory.createScrollPane(myDependenciesList);
@@ -198,38 +199,18 @@ abstract class ProjectLayoutPanel<T> extends JPanel {
     return Integer.MAX_VALUE;
   }
 
-  protected static String getElementText(Object element) {
+  protected static @NlsSafe String getElementText(Object element) {
     if (element instanceof LibraryDescriptor) {
-      final StringBuilder builder = new StringBuilder();
-      builder.append(((LibraryDescriptor)element).getName());
-      final Collection<File> jars = ((LibraryDescriptor)element).getJars();
-      if (jars.size() == 1) {
-        final File parentFile = jars.iterator().next().getParentFile();
-        if (parentFile != null) {
-          builder.append(" (");
-          builder.append(parentFile.getPath());
-          builder.append(")");
-        }
-      }
-      return builder.toString();
+      return getElementTextFromLibraryDescriptor((LibraryDescriptor)element);
     }
 
     if (element instanceof File) {
-      final StringBuilder builder = new StringBuilder();
-      builder.append(((File)element).getName());
-      final File parentFile = ((File)element).getParentFile();
-      if (parentFile != null) {
-        builder.append(" (");
-        builder.append(parentFile.getPath());
-        builder.append(")");
-      }
-      return builder.toString();
+      return getElementTextFromFile((File)element);
     }
 
     if (element instanceof ModuleDescriptor) {
       final ModuleDescriptor moduleDescriptor = (ModuleDescriptor)element;
-      final StringBuilder builder = new StringBuilder();
-      builder.append(moduleDescriptor.getName());
+      final StringBuilder builder = new StringBuilder(moduleDescriptor.getName());
 
       final Set<File> contents = moduleDescriptor.getContentRoots();
       final int rootCount = contents.size();
@@ -256,6 +237,24 @@ abstract class ProjectLayoutPanel<T> extends JPanel {
     return "";
   }
 
+  @NotNull
+  private static @NlsSafe String getElementTextFromFile(File element) {
+    final File parentFile = element.getParentFile();
+    if (parentFile == null) return element.getName();
+
+    return element.getName() + " (" + parentFile.getPath() + ")";
+  }
+
+  @NotNull
+  private static @NlsSafe String getElementTextFromLibraryDescriptor(LibraryDescriptor element) {
+    final Collection<File> jars = element.getJars();
+    if (jars.size() != 1) return element.getName();
+
+    final File parentFile = jars.iterator().next().getParentFile();
+
+    return element.getName() + " (" + parentFile.getPath() + ")";
+  }
+
   protected abstract List<T> getEntries();
 
   protected abstract Collection getDependencies(T entry);
@@ -268,7 +267,7 @@ abstract class ProjectLayoutPanel<T> extends JPanel {
 
   protected abstract Collection<File> getContent(T entry);
 
-  protected abstract String getElementName(T entry);
+  protected abstract @Nls String getElementName(T entry);
 
   protected abstract void setElementName(T entry, String name);
 
@@ -280,9 +279,20 @@ abstract class ProjectLayoutPanel<T> extends JPanel {
 
   protected abstract @NlsContexts.TabTitle String getEntriesChooserTitle();
 
-  protected abstract @NlsContexts.TabTitle String getDependenciesTitle();
+  protected abstract @NlsContexts.BorderTitle String getDependenciesTitle();
+
+  enum ElementType {
+    LIBRARY(0), MODULE(1);
+    private final int id;
+
+    ElementType(int id) {
+      this.id = id;
+    }
+  }
+
+  protected @NlsContexts.BorderTitle abstract String getElementTypeNamePlural();
 
-  protected abstract String getElementTypeName();
+  protected abstract ElementType getElementType();
 
   private boolean isNameAlreadyUsed(String entryName) {
     final Set<T> itemsToIgnore = new HashSet<>(myEntriesChooser.getSelectedElements());
@@ -329,7 +339,9 @@ abstract class ProjectLayoutPanel<T> extends JPanel {
           ProjectLayoutPanel.this,
           JavaUiBundle.message("label.enter.new.name.for.merge.result"),
           JavaUiBundle.message("dialog.title.merge.module.or.library"),
-          Messages.getQuestionIcon(), getElementName(elements.get(0)), getValidator());
+          Messages.getQuestionIcon(),
+          getElementName(elements.get(0)),
+          getValidator());
         if (newName != null) {
           final T merged = merge(elements);
           setElementName(merged, newName);
@@ -398,8 +410,8 @@ abstract class ProjectLayoutPanel<T> extends JPanel {
       if (elements.size() == 1) {
         final T element = elements.get(0);
         final String newName = Messages.showInputDialog(ProjectLayoutPanel.this,
-                                                        JavaUiBundle.message("label.new.name.for.0.1", getElementTypeName(), getElementName(element)),
-                                                        JavaUiBundle.message("dialog.title.rename.module.or.library.0", StringUtil.capitalize(getElementTypeName())),
+                                                        JavaUiBundle.message("label.new.name.for.0.1", getElementType().id, getElementName(element)),
+                                                        JavaUiBundle.message("dialog.title.rename.module.or.library.0", getElementType().id),
                                                         Messages.getQuestionIcon(),
                                                         getElementName(element),
                                                         getValidator()
@@ -434,10 +446,10 @@ abstract class ProjectLayoutPanel<T> extends JPanel {
 
     private SplitDialog(final Collection<File> files) {
       super(myEntriesChooser, true);
-      setTitle(JavaUiBundle.message("dialog.title.split.module.or.library.0", StringUtil.capitalize(getElementTypeName())));
+      setTitle(JavaUiBundle.message("dialog.title.split.module.or.library.0", getElementType().id));
 
       myNameField = new JTextField();
-      myChooser = new ElementsChooser<File>(true) {
+      myChooser = new ElementsChooser<>(true) {
         @Override
         protected String getItemText(@NotNull final File value) {
           return getElementText(value);
@@ -452,7 +464,7 @@ abstract class ProjectLayoutPanel<T> extends JPanel {
         });
       }
       myChooser.selectElements(ContainerUtil.createMaybeSingletonList(ContainerUtil.getFirstItem(files)));
-      myChooser.addElementsMarkListener(new ElementsChooser.ElementsMarkListener<File>() {
+      myChooser.addElementsMarkListener(new ElementsChooser.ElementsMarkListener<>() {
         @Override
         public void elementMarkChanged(File element, boolean isMarked) {
           updateOkButton();