CPP-13710 - commit only current document if there are no processors that can access...
[idea/community.git] / java / idea-ui / src / com / intellij / openapi / roots / ui / configuration / artifacts / ArtifactEditorContextImpl.java
1 /*
2  * Copyright 2000-2014 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.openapi.roots.ui.configuration.artifacts;
17
18 import com.intellij.facet.Facet;
19 import com.intellij.openapi.module.ModifiableModuleModel;
20 import com.intellij.openapi.module.Module;
21 import com.intellij.openapi.project.Project;
22 import com.intellij.openapi.roots.LibraryOrderEntry;
23 import com.intellij.openapi.roots.ModifiableRootModel;
24 import com.intellij.openapi.roots.ModuleRootModel;
25 import com.intellij.openapi.roots.OrderEntry;
26 import com.intellij.openapi.roots.impl.OrderEntryUtil;
27 import com.intellij.openapi.roots.impl.libraries.LibraryEx;
28 import com.intellij.openapi.roots.libraries.Library;
29 import com.intellij.openapi.roots.libraries.LibraryTable;
30 import com.intellij.openapi.roots.ui.configuration.ChooseModulesDialog;
31 import com.intellij.openapi.roots.ui.configuration.FacetsProvider;
32 import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
33 import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable;
34 import com.intellij.openapi.util.NlsContexts;
35 import com.intellij.packaging.artifacts.Artifact;
36 import com.intellij.packaging.artifacts.ArtifactModel;
37 import com.intellij.packaging.artifacts.ArtifactType;
38 import com.intellij.packaging.artifacts.ModifiableArtifactModel;
39 import com.intellij.packaging.elements.CompositePackagingElement;
40 import com.intellij.packaging.elements.ManifestFileProvider;
41 import com.intellij.packaging.impl.ui.ChooseArtifactsDialog;
42 import com.intellij.packaging.ui.ArtifactEditor;
43 import com.intellij.packaging.ui.ArtifactEditorContext;
44 import com.intellij.packaging.ui.ManifestFileConfiguration;
45 import com.intellij.util.ui.classpath.ChooseLibrariesFromTablesDialog;
46 import org.jetbrains.annotations.NotNull;
47
48 import java.util.Collections;
49 import java.util.List;
50
51 public class ArtifactEditorContextImpl implements ArtifactEditorContext {
52   private final ArtifactsStructureConfigurableContext myParent;
53   private final ArtifactEditorEx myEditor;
54
55   public ArtifactEditorContextImpl(ArtifactsStructureConfigurableContext parent, ArtifactEditorEx editor) {
56     myParent = parent;
57     myEditor = editor;
58   }
59
60   @Override
61   @NotNull
62   public ModifiableArtifactModel getOrCreateModifiableArtifactModel() {
63     return myParent.getOrCreateModifiableArtifactModel();
64   }
65
66   @Override
67   public ModifiableModuleModel getModifiableModuleModel() {
68     return myParent.getModifiableModuleModel();
69   }
70
71   @Override
72   @NotNull
73   public ModifiableRootModel getOrCreateModifiableRootModel(@NotNull Module module) {
74     return myParent.getOrCreateModifiableRootModel(module);
75   }
76
77   @Override
78   public ManifestFileConfiguration getManifestFile(CompositePackagingElement<?> element, ArtifactType artifactType) {
79     return myParent.getManifestFile(element, artifactType);
80   }
81
82   @Override
83   @NotNull
84   public Project getProject() {
85     return myParent.getProject();
86   }
87
88   @Override
89   public CompositePackagingElement<?> getRootElement(@NotNull Artifact artifact) {
90     return myParent.getRootElement(artifact);
91   }
92
93   @Override
94   public void editLayout(@NotNull Artifact artifact, Runnable runnable) {
95     myParent.editLayout(artifact, runnable);
96   }
97
98   @Override
99   public ArtifactEditor getOrCreateEditor(Artifact artifact) {
100     return myParent.getOrCreateEditor(artifact);
101   }
102
103   @Override
104   public ArtifactEditor getThisArtifactEditor() {
105     return myEditor;
106   }
107
108   @Override
109   public void selectArtifact(@NotNull Artifact artifact) {
110     ProjectStructureConfigurable.getInstance(getProject()).select(artifact, true);
111   }
112
113   @Override
114   public void selectFacet(@NotNull Facet<?> facet) {
115     ProjectStructureConfigurable.getInstance(getProject()).select(facet, true);
116   }
117
118   @Override
119   public void selectModule(@NotNull Module module) {
120     ProjectStructureConfigurable.getInstance(getProject()).select(module.getName(), null, true);
121   }
122
123   @Override
124   public void selectLibrary(@NotNull Library library) {
125     final LibraryTable table = library.getTable();
126     if (table != null) {
127       ProjectStructureConfigurable.getInstance(getProject()).selectProjectOrGlobalLibrary(library, true);
128     }
129     else {
130       final Module module = ((LibraryEx)library).getModule();
131       if (module != null) {
132         final ModuleRootModel rootModel = myParent.getModulesProvider().getRootModel(module);
133         final String libraryName = library.getName();
134         for (OrderEntry entry : rootModel.getOrderEntries()) {
135           if (entry instanceof LibraryOrderEntry && OrderEntryUtil.isModuleLibraryOrderEntry(entry)) {
136             final LibraryOrderEntry libraryEntry = (LibraryOrderEntry)entry;
137             if (libraryName != null && libraryName.equals(libraryEntry.getLibraryName())
138                || libraryName == null && library.equals(libraryEntry.getLibrary())) {
139               ProjectStructureConfigurable.getInstance(getProject()).selectOrderEntry(module, libraryEntry);
140               return;
141             }
142           }
143         }
144       }
145     }
146   }
147
148   @Override
149   public List<Artifact> chooseArtifacts(final List<? extends Artifact> artifacts, final @NlsContexts.DialogTitle String title) {
150     ChooseArtifactsDialog dialog = new ChooseArtifactsDialog(getProject(), artifacts, title, null);
151     return dialog.showAndGet() ? dialog.getChosenElements() : Collections.emptyList();
152   }
153
154
155   @Override
156   @NotNull
157   public ArtifactModel getArtifactModel() {
158     return myParent.getArtifactModel();
159   }
160
161   @Override
162   @NotNull
163   public ModulesProvider getModulesProvider() {
164     return myParent.getModulesProvider();
165   }
166
167   @Override
168   @NotNull
169   public FacetsProvider getFacetsProvider() {
170     return myParent.getFacetsProvider();
171   }
172
173   @Override
174   public Library findLibrary(@NotNull String level, @NotNull String libraryName) {
175     return myParent.findLibrary(level, libraryName);
176   }
177
178   @NotNull
179   @Override
180   public ManifestFileProvider getManifestFileProvider() {
181     return myParent.getManifestFileProvider();
182   }
183
184   @Override
185   public void queueValidation() {
186     myParent.queueValidation(getArtifact());
187   }
188
189   @Override
190   @NotNull
191   public ArtifactType getArtifactType() {
192     return myEditor.getArtifact().getArtifactType();
193   }
194
195   @Override
196   public List<Module> chooseModules(final List<? extends Module> modules, final String title) {
197     return new ChooseModulesDialog(getProject(), modules, title, null).showAndGetResult();
198   }
199
200   @Override
201   public List<Library> chooseLibraries(final @NlsContexts.DialogTitle String title) {
202     final ChooseLibrariesFromTablesDialog dialog = ChooseLibrariesFromTablesDialog.createDialog(title, getProject(), false);
203     return dialog.showAndGet() ? dialog.getSelectedLibraries() : Collections.emptyList();
204   }
205
206   @Override
207   public Artifact getArtifact() {
208     return myEditor.getArtifact();
209   }
210
211   public ArtifactsStructureConfigurableContext getParent() {
212     return myParent;
213   }
214 }