IDEA-251030 Icons are not shown in Database toolwindow popup menu
[idea/community.git] / plugins / javaFX / src / org / jetbrains / plugins / javaFX / packaging / JavaFxApplicationArtifactType.java
1 /*
2  * Copyright 2000-2013 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 org.jetbrains.plugins.javaFX.packaging;
17
18 import com.intellij.icons.AllIcons;
19 import com.intellij.openapi.module.JavaModuleType;
20 import com.intellij.openapi.module.Module;
21 import com.intellij.openapi.module.ModuleType;
22 import com.intellij.openapi.roots.ui.configuration.ChooseModulesDialog;
23 import com.intellij.openapi.util.io.FileUtil;
24 import com.intellij.packaging.artifacts.ArtifactTemplate;
25 import com.intellij.packaging.artifacts.ArtifactType;
26 import com.intellij.packaging.elements.*;
27 import org.jetbrains.annotations.NotNull;
28 import org.jetbrains.annotations.Nullable;
29 import org.jetbrains.plugins.javaFX.JavaFXBundle;
30
31 import javax.swing.*;
32 import java.util.ArrayList;
33 import java.util.Collections;
34 import java.util.List;
35
36 public class JavaFxApplicationArtifactType extends ArtifactType {
37   public static JavaFxApplicationArtifactType getInstance() {
38     return EP_NAME.findExtension(JavaFxApplicationArtifactType.class);
39   }
40   
41   protected JavaFxApplicationArtifactType() {
42     super("javafx", JavaFXBundle.message("javafx.application.title"));
43   }
44
45   @NotNull
46   @Override
47   public Icon getIcon() {
48     return AllIcons.Nodes.Artifact;
49   }
50
51   @Nullable
52   @Override
53   public String getDefaultPathFor(@NotNull PackagingElementOutputKind kind) {
54     return "/";
55   }
56
57   @NotNull
58   @Override
59   public CompositePackagingElement<?> createRootElement(@NotNull String artifactName) {
60     return PackagingElementFactory.getInstance().createArtifactRootElement();
61   }
62
63   @NotNull
64   @Override
65   public List<? extends ArtifactTemplate> getNewArtifactTemplates(@NotNull PackagingElementResolvingContext context) {
66     final List<Module> modules = new ArrayList<>();
67     for (Module module : context.getModulesProvider().getModules()) {
68       if (ModuleType.get(module) instanceof JavaModuleType) {
69         modules.add(module);
70       }
71     }
72     if (modules.isEmpty()) {
73       return Collections.emptyList();
74     }
75     return Collections.singletonList(new JavaFxArtifactTemplate(modules));
76   }
77
78   private class JavaFxArtifactTemplate extends ArtifactTemplate {
79     private final List<Module> myModules;
80
81     JavaFxArtifactTemplate(List<Module> modules) {
82       myModules = modules;
83     }
84
85     @Override
86     public String getPresentableName() {
87       if (myModules.size() == 1) {
88         return "From module '" + myModules.get(0).getName() + "'";
89       }
90       return "From module...";
91     }
92
93     @Override
94     public NewArtifactConfiguration createArtifact() {
95       Module module = null;
96       if (myModules.size() == 1) {
97         module = myModules.get(0);
98       } else {
99         final ChooseModulesDialog dialog = new ChooseModulesDialog(myModules.get(0).getProject(), myModules,
100                                                                    "Select Module",
101                                                                    "Selected module output would to be included in the artifact");
102         dialog.setSingleSelectionMode();
103         if (dialog.showAndGet()) {
104           final List<Module> elements = dialog.getChosenElements();
105           if (elements.isEmpty()) {
106             return null;
107           }
108           module = elements.get(0);
109         }
110       }
111       if (module == null) return null;
112       final CompositePackagingElement<?> rootElement = JavaFxApplicationArtifactType.this.createRootElement(module.getName());
113       final CompositePackagingElement<?>
114         subElement = PackagingElementFactory.getInstance().createArchive(FileUtil.sanitizeFileName(module.getName()) + ".jar");
115       final PackagingElement<?> moduleOutputElement = PackagingElementFactory.getInstance().createModuleOutput(module);
116       subElement.addFirstChild(moduleOutputElement);
117       rootElement.addFirstChild(subElement);
118       return new NewArtifactConfiguration(rootElement, module.getName(), JavaFxApplicationArtifactType.this);
119     }
120   }
121 }