NotNull, dispose
[fedora-idea.git] / platform / lang-impl / src / com / intellij / execution / impl / TypeTemplatesConfigurable.java
blob58922126a6673baff56c7bd853fb297d1d5ec407
1 /*
2 * Copyright 2000-2009 JetBrains s.r.o.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 package com.intellij.execution.impl;
18 import com.intellij.execution.ExecutionBundle;
19 import com.intellij.execution.RunnerAndConfigurationSettings;
20 import com.intellij.execution.configurations.ConfigurationFactory;
21 import com.intellij.execution.configurations.ConfigurationType;
22 import com.intellij.openapi.options.Configurable;
23 import com.intellij.openapi.options.ConfigurationException;
24 import com.intellij.openapi.options.SettingsEditorConfigurable;
25 import com.intellij.openapi.project.Project;
26 import com.intellij.ui.TabbedPaneWrapper;
28 import javax.swing.*;
30 /**
31 * @author dyoma
33 class TypeTemplatesConfigurable implements Configurable {
34 private final ConfigurationType myType;
35 private final Configurable[] myConfigurables;
36 private TabbedPaneWrapper myTabbedPane;
38 public TypeTemplatesConfigurable(final ConfigurationType type, final RunManagerImpl runManager, Project project) {
39 myType = type;
40 myConfigurables = new Configurable[getFactories().length];
41 myTabbedPane = new TabbedPaneWrapper(project);
42 final ConfigurationFactory[] factories = getFactories();
43 for (int i = 0; i < factories.length; i++) {
44 final ConfigurationFactory factory = factories[i];
45 final RunnerAndConfigurationSettingsImpl template = runManager.getConfigurationTemplate(factory);
46 final Configurable configurable = new TemplateConfigurable(template);
47 myConfigurables[i] = configurable;
48 myTabbedPane.addTab(factory.getName(), configurable.getIcon(), configurable.createComponent(), null);
52 private ConfigurationFactory[] getFactories() {
53 return myType.getConfigurationFactories();
56 public String getDisplayName() {
57 return ExecutionBundle.message("template.settings.configurable.display.name");
60 public Icon getIcon() {
61 return myType.getIcon();
64 public String getHelpTopic() {
65 final int index = myTabbedPane.getSelectedIndex();
66 return myConfigurables[index].getHelpTopic();
69 public JComponent createComponent() {
70 return myTabbedPane.getComponent();
73 public boolean isModified() {
74 for (final Configurable configurable : myConfigurables) {
75 if (configurable.isModified()) return true;
77 return false;
80 public void apply() throws ConfigurationException {
81 for (final Configurable configurable : myConfigurables) {
82 configurable.apply();
86 public void reset() {
87 for (final Configurable configurable : myConfigurables) {
88 configurable.reset();
92 public void disposeUIResources() {
93 for (int i = 0; i < myConfigurables.length; i++) {
94 final Configurable configurable = myConfigurables[i];
95 configurable.disposeUIResources();
96 myConfigurables[i] = null;
98 myTabbedPane = null;
101 public static Configurable createConfigurable(final ConfigurationType type, final Project project) {
102 final ConfigurationFactory[] factories = type.getConfigurationFactories();
103 final RunManagerImpl runManager = RunManagerImpl.getInstanceImpl(project);
104 return factories.length == 1
105 ? new TemplateConfigurable(runManager.getConfigurationTemplate(factories[0]))
106 : new TypeTemplatesConfigurable(type, runManager, project);
109 private static class TemplateConfigurable extends SettingsEditorConfigurable<RunnerAndConfigurationSettingsImpl> {
110 private final RunnerAndConfigurationSettings myTemplate;
112 public TemplateConfigurable(RunnerAndConfigurationSettingsImpl template) {
113 super(new ConfigurationSettingsEditorWrapper(template), template);
114 myTemplate = template;
117 public String getDisplayName() {
118 return myTemplate.getConfiguration().getName();
121 public Icon getIcon() {
122 return myTemplate.getConfiguration().getType().getIcon();
125 public String getHelpTopic() {
126 return null;