IDEA-251030 Icons are not shown in Database toolwindow popup menu
[idea/community.git] / plugins / maven / src / main / java / org / jetbrains / idea / maven / wizards / MavenFrameworkSupportProvider.java
1 // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package org.jetbrains.idea.maven.wizards;
3
4 import com.intellij.ide.util.frameworkSupport.FrameworkSupportConfigurable;
5 import com.intellij.ide.util.frameworkSupport.FrameworkSupportModel;
6 import com.intellij.ide.util.frameworkSupport.FrameworkSupportProvider;
7 import com.intellij.ide.util.projectWizard.ModuleBuilder;
8 import com.intellij.openapi.module.Module;
9 import com.intellij.openapi.module.ModuleType;
10 import com.intellij.openapi.module.StdModuleTypes;
11 import com.intellij.openapi.roots.ModifiableRootModel;
12 import com.intellij.openapi.roots.libraries.Library;
13 import com.intellij.openapi.vfs.VfsUtil;
14 import com.intellij.openapi.vfs.VirtualFile;
15 import com.intellij.util.ArrayUtil;
16 import org.jetbrains.annotations.NotNull;
17 import org.jetbrains.annotations.Nullable;
18 import org.jetbrains.idea.maven.model.MavenId;
19 import org.jetbrains.idea.maven.project.MavenProjectBundle;
20 import org.jetbrains.idea.maven.project.MavenProjectsManager;
21 import org.jetbrains.idea.maven.utils.MavenLog;
22
23 import javax.swing.*;
24 import java.io.IOException;
25 import java.util.Collections;
26
27 import static icons.OpenapiIcons.RepositoryLibraryLogo;
28
29 public class MavenFrameworkSupportProvider extends FrameworkSupportProvider {
30   public MavenFrameworkSupportProvider() {
31     super(MavenFrameworkSupportProvider.class.getName(), MavenProjectBundle.message("maven.name"));
32   }
33
34   @NotNull
35   @Override
36   public FrameworkSupportConfigurable createConfigurable(@NotNull FrameworkSupportModel model) {
37     return new FrameworkSupportConfigurable() {
38       @Override
39       public JComponent getComponent() {
40         return new JPanel();
41       }
42
43       @Override
44       public void addSupport(@NotNull Module module, @NotNull ModifiableRootModel model, @Nullable Library library) {
45         VirtualFile[] roots = model.getContentRoots();
46         VirtualFile root;
47         if (roots.length == 0) {
48           VirtualFile moduleFile = module.getModuleFile();
49           if (moduleFile != null) {
50             root = moduleFile.getParent();
51             model.addContentEntry(root);
52           }
53           else {
54             return;
55           }
56         }
57         else {
58           root = roots[0];
59         }
60
61         VirtualFile existingPom = null;
62         for (VirtualFile child : root.getChildren()) {
63           if (child.getName().startsWith("pom.")) {
64             existingPom = child;
65           }
66         }
67
68         if (existingPom != null) {
69           MavenProjectsManager.getInstance(module.getProject()).addManagedFilesOrUnignore(Collections.singletonList(existingPom));
70         }
71         else {
72           prepareProjectStructure(model, root);
73
74           new MavenModuleBuilderHelper(new MavenId("groupId", module.getName(), "1.0-SNAPSHOT"), null, null, false, false, null,
75                                        null, "Add Maven Support").configure(model.getProject(), root, true);
76         }
77       }
78     };
79   }
80
81   private static void prepareProjectStructure(@NotNull ModifiableRootModel model, @NotNull VirtualFile root) {
82     VirtualFile src = root.findChild("src");
83     if (src == null || !src.isDirectory()) return;
84
85     if (ArrayUtil.contains(src, model.getSourceRoots())) {
86       try {
87         VirtualFile java = VfsUtil.createDirectories(src.getPath() + "/main/java");
88         if (java != null && java.isDirectory()) {
89           for (VirtualFile child : src.getChildren()) {
90             if (!child.getName().equals("main")) {
91               child.move(null, java);
92             }
93           }
94         }
95       }
96       catch (IOException e) {
97         MavenLog.LOG.info(e);
98       }
99     }
100   }
101
102   @Override
103   public boolean isEnabledForModuleBuilder(@NotNull ModuleBuilder builder) {
104     return false;
105   }
106
107   @Override
108   public boolean isSupportAlreadyAdded(@NotNull Module module) {
109     return MavenProjectsManager.getInstance(module.getProject()).isMavenizedModule(module);
110   }
111
112   @Override
113   public boolean isEnabledForModuleType(@NotNull ModuleType moduleType) {
114     return moduleType.equals(StdModuleTypes.JAVA);
115   }
116
117   @Override
118   public Icon getIcon() {
119     return RepositoryLibraryLogo;
120   }
121 }