1 package com
.intellij
.openapi
.roots
.ui
.configuration
.artifacts
;
3 import com
.intellij
.openapi
.actionSystem
.AnAction
;
4 import com
.intellij
.openapi
.actionSystem
.AnActionEvent
;
5 import com
.intellij
.openapi
.application
.Result
;
6 import com
.intellij
.openapi
.application
.WriteAction
;
7 import com
.intellij
.openapi
.components
.State
;
8 import com
.intellij
.openapi
.components
.Storage
;
9 import com
.intellij
.openapi
.options
.ConfigurationException
;
10 import com
.intellij
.openapi
.project
.DumbAwareAction
;
11 import com
.intellij
.openapi
.project
.Project
;
12 import com
.intellij
.openapi
.project
.ProjectBundle
;
13 import com
.intellij
.openapi
.roots
.ui
.configuration
.projectRoot
.BaseStructureConfigurable
;
14 import com
.intellij
.openapi
.roots
.ui
.configuration
.projectRoot
.StructureConfigurableContext
;
15 import com
.intellij
.packaging
.artifacts
.*;
16 import org
.jetbrains
.annotations
.Nls
;
17 import org
.jetbrains
.annotations
.NonNls
;
18 import org
.jetbrains
.annotations
.NotNull
;
19 import org
.jetbrains
.annotations
.Nullable
;
27 name
= "ArtifactsStructureConfigurable.UI",
28 storages
= {@Storage(id
= "other", file
= "$WORKSPACE_FILE$")}
30 public class ArtifactsStructureConfigurable
extends BaseStructureConfigurable
{
31 private ArtifactsStructureConfigurableContextImpl myPackagingEditorContext
;
32 @NonNls private static final String DEFAULT_ARTIFACT_NAME
= "unnamed";
34 public ArtifactsStructureConfigurable(@NotNull Project project
) {
39 public void init(StructureConfigurableContext context
) {
41 myPackagingEditorContext
= new ArtifactsStructureConfigurableContextImpl(myContext
, myProject
, new ArtifactAdapter() {
43 public void artifactAdded(@NotNull Artifact artifact
) {
44 final MyNode node
= addArtifactNode(artifact
);
45 selectNodeInTree(node
);
51 public String
getDisplayName() {
52 return ProjectBundle
.message("display.name.artifacts");
55 protected void loadTree() {
56 myTree
.setRootVisible(false);
57 myTree
.setShowsRootHandles(false);
58 for (Artifact artifact
: myPackagingEditorContext
.getArtifactModel().getArtifacts()) {
59 addArtifactNode(artifact
);
63 private MyNode
addArtifactNode(final Artifact artifact
) {
64 final MyNode node
= new MyNode(new ArtifactConfigurable(artifact
, myPackagingEditorContext
, TREE_UPDATER
));
65 addNode(node
, myRoot
);
71 myPackagingEditorContext
.resetModifiableModel();
76 public boolean isModified() {
77 final ModifiableArtifactModel modifiableModel
= myPackagingEditorContext
.getActualModifiableModel();
78 if (modifiableModel
!= null && modifiableModel
.isModified()) {
81 return myPackagingEditorContext
.getManifestFilesInfo().isManifestFilesModified() || super.isModified();
84 public ArtifactsStructureConfigurableContext
getArtifactsStructureContext() {
85 return myPackagingEditorContext
;
88 public ModifiableArtifactModel
getModifiableArtifactModel() {
89 return myPackagingEditorContext
.getModifiableArtifactModel();
92 protected AbstractAddGroup
createAddAction() {
93 return new AbstractAddGroup(ProjectBundle
.message("add.new.header.text")) {
96 public AnAction
[] getChildren(@Nullable AnActionEvent e
) {
97 final ArtifactType
[] types
= ArtifactType
.getAllTypes();
98 final AnAction
[] actions
= new AnAction
[types
.length
];
99 for (int i
= 0; i
< types
.length
; i
++) {
100 actions
[i
] = new AddArtifactAction(types
[i
]);
107 private void addArtifact(@NotNull ArtifactType type
) {
108 String name
= DEFAULT_ARTIFACT_NAME
;
110 while (myPackagingEditorContext
.getArtifactModel().findArtifact(name
) != null) {
111 name
= DEFAULT_ARTIFACT_NAME
+ i
;
114 final ModifiableArtifact artifact
= myPackagingEditorContext
.getModifiableArtifactModel().addArtifact(name
, type
);
115 selectNodeInTree(findNodeByObject(myRoot
, artifact
));
119 public void apply() throws ConfigurationException
{
121 myPackagingEditorContext
.getManifestFilesInfo().saveManifestFiles();
122 final ModifiableArtifactModel modifiableModel
= myPackagingEditorContext
.getActualModifiableModel();
123 if (modifiableModel
!= null) {
125 protected void run(final Result result
) {
126 modifiableModel
.commit();
129 myPackagingEditorContext
.resetModifiableModel();
134 public void disposeUIResources() {
135 super.disposeUIResources();
136 myPackagingEditorContext
.disposeUIResources();
140 protected void removeArtifact(Artifact artifact
) {
141 myPackagingEditorContext
.getModifiableArtifactModel().removeArtifact(artifact
);
144 protected void processRemovedItems() {
147 protected boolean wasObjectStored(Object editableObject
) {
151 public String
getId() {
152 return "project.artifacts";
155 public Runnable
enableSearch(String option
) {
159 public void dispose() {
162 public Icon
getIcon() {
167 private class AddArtifactAction
extends DumbAwareAction
{
168 private final ArtifactType myType
;
170 public AddArtifactAction(ArtifactType type
) {
171 super(ProjectBundle
.message("action.text.add.artifact", type
.getPresentableName()), null, type
.getIcon());
176 public void actionPerformed(AnActionEvent e
) {