8326918b4e54114272f04cbd9f678696e84a14a7
[idea/community.git] / java / idea-ui / src / com / intellij / openapi / roots / ui / configuration / OutputEditor.java
1 /*
2  * Copyright 2000-2016 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
17 package com.intellij.openapi.roots.ui.configuration;
18
19 import com.intellij.ide.JavaUiBundle;
20 import com.intellij.ui.IdeBorderFactory;
21 import com.intellij.util.ui.JBUI;
22 import com.intellij.util.ui.UIUtil;
23 import org.jetbrains.annotations.NonNls;
24 import org.jetbrains.annotations.Nullable;
25
26 import javax.swing.*;
27 import javax.swing.border.EmptyBorder;
28 import java.awt.*;
29 import java.util.Arrays;
30 import java.util.List;
31
32 public class OutputEditor extends ModuleElementsEditor {
33   private final BuildElementsEditor myCompilerOutputEditor;
34   private final JavadocEditor myJavadocEditor;
35   private final AnnotationsEditor myAnnotationsEditor;
36   private final List<ModuleElementsEditor> myEditors;
37
38   protected OutputEditor(final ModuleConfigurationState state) {
39     super(state);
40     myCompilerOutputEditor = new BuildElementsEditor(state);
41     myJavadocEditor = new JavadocEditor(state);
42     myAnnotationsEditor = new AnnotationsEditor(state);
43     myEditors = Arrays.asList(myCompilerOutputEditor, myJavadocEditor, myAnnotationsEditor);
44     myEditors.forEach(editor -> editor.addListener(this::fireConfigurationChanged));
45   }
46
47   @Override
48   protected JComponent createComponentImpl() {
49     final JPanel panel = new JPanel(new GridBagLayout());
50     panel.setBorder(new EmptyBorder(UIUtil.PANEL_SMALL_INSETS));
51     final GridBagConstraints gc =
52       new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, JBUI.emptyInsets(), 0, 0);
53     panel.add(myCompilerOutputEditor.createComponentImpl(), gc);
54     final JPanel javadocPanel = (JPanel)myJavadocEditor.createComponentImpl();
55     javadocPanel.setBorder(IdeBorderFactory.createTitledBorder(myJavadocEditor.getDisplayName(), false));
56     gc.weighty = 1;
57     panel.add(javadocPanel, gc);
58     final JPanel annotationsPanel = (JPanel)myAnnotationsEditor.createComponentImpl();
59     annotationsPanel.setBorder(IdeBorderFactory.createTitledBorder(myAnnotationsEditor.getDisplayName(), false));
60     panel.add(annotationsPanel, gc);
61     return panel;
62   }
63
64   @Override
65   public void saveData() {
66     super.saveData();
67     myEditors.forEach(ModuleElementsEditor::saveData);
68   }
69
70   @Override
71   public String getDisplayName() {
72     return getName();
73   }
74
75   @Override
76   public void moduleStateChanged() {
77     super.moduleStateChanged();
78     myEditors.forEach(ModuleElementsEditor::moduleStateChanged);
79   }
80
81
82   @Override
83   public void moduleCompileOutputChanged(final String baseUrl, final String moduleName) {
84     super.moduleCompileOutputChanged(baseUrl, moduleName);
85     myEditors.forEach(editor -> editor.moduleCompileOutputChanged(baseUrl, moduleName));
86   }
87
88   @Override
89   @Nullable
90   @NonNls
91   public String getHelpTopic() {
92     return "projectStructure.modules.paths";
93   }
94
95   public static String getName() {
96     return JavaUiBundle.message("project.roots.path.tab.title");
97   }
98 }