a73d29c58a698f787191629b45c8a56e7e58658b
[idea/community.git] / platform / lang-api / src / com / intellij / execution / RunManager.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.execution;
17
18 import com.intellij.execution.configurations.ConfigurationFactory;
19 import com.intellij.execution.configurations.ConfigurationType;
20 import com.intellij.execution.configurations.RunConfiguration;
21 import com.intellij.execution.configurations.RunProfile;
22 import com.intellij.openapi.project.Project;
23 import org.jetbrains.annotations.NotNull;
24 import org.jetbrains.annotations.Nullable;
25
26 import java.util.Collection;
27 import java.util.List;
28 import java.util.regex.Matcher;
29 import java.util.regex.Pattern;
30
31 /**
32  * Manages the list of run/debug configurations in a project.
33  *
34  * @author anna
35  * @see RunnerRegistry
36  * @see ExecutionManager
37  */
38 public abstract class RunManager {
39   public static RunManager getInstance(final Project project) {
40     return project.getComponent(RunManager.class);
41   }
42
43   /**
44    * Returns the list of all registered configuration types.
45    *
46    * @return all registered configuration types.
47    */
48   @NotNull
49   public abstract ConfigurationType[] getConfigurationFactories();
50
51   /**
52    * Returns the list of all configurations of a specified type.
53    *
54    * @param type a run configuration type.
55    * @return all configurations of the type, or an empty array if no configurations of the type are defined.
56    */
57   @NotNull
58   @Deprecated
59   public abstract RunConfiguration[] getConfigurations(@NotNull ConfigurationType type);
60
61   /**
62    * Returns the list of all configurations of a specified type.
63    *
64    * @param type a run configuration type.
65    * @return all configurations of the type, or an empty array if no configurations of the type are defined.
66    */
67   @NotNull
68   public abstract List<RunConfiguration> getConfigurationsList(@NotNull ConfigurationType type);
69
70   /**
71    * Returns the list of {@link RunnerAndConfigurationSettings} for all configurations of a specified type.
72    *
73    * @param type a run configuration type.
74    * @return settings for all configurations of the type, or an empty array if no configurations of the type are defined.
75    */
76   @NotNull
77   @Deprecated
78   public abstract RunnerAndConfigurationSettings[] getConfigurationSettings(@NotNull ConfigurationType type);
79
80   /**
81    * Returns the list of {@link RunnerAndConfigurationSettings} for all configurations of a specified type.
82    *
83    * @param type a run configuration type.
84    * @return settings for all configurations of the type, or an empty array if no configurations of the type are defined.
85    */
86   @NotNull
87   public abstract List<RunnerAndConfigurationSettings> getConfigurationSettingsList(@NotNull ConfigurationType type);
88
89   /**
90    * Returns the list of all run configurations.
91    *
92    * @return the list of all run configurations.
93    */
94   @NotNull
95   @Deprecated
96   public abstract RunConfiguration[] getAllConfigurations();
97
98   /**
99    * Returns the list of all run configurations.
100    *
101    * @return the list of all run configurations.
102    */
103   @NotNull
104   public abstract List<RunConfiguration> getAllConfigurationsList();
105
106   /**
107    * Returns the list of all run configurations settings.
108    *
109    * @return the list of all run configurations settings.
110    */
111   @NotNull
112   public abstract List<RunnerAndConfigurationSettings> getAllSettings();
113
114   /**
115    * Returns the list of all temporary run configurations.
116    *
117    * @return the list of all temporary run configurations.
118    * @see RunnerAndConfigurationSettings#isTemporary()
119    */
120   @NotNull
121   @Deprecated
122   public abstract RunConfiguration[] getTempConfigurations();
123
124   /**
125    * Returns the list of all temporary run configurations settings.
126    *
127    * @return the list of all temporary run configurations settings.
128    * @see RunnerAndConfigurationSettings#isTemporary()
129    */
130   @NotNull
131   public abstract List<RunnerAndConfigurationSettings> getTempConfigurationsList();
132
133   /**
134    * Checks if the specified run configuration is temporary and will be deleted when the temporary configurations limit is exceeded.
135    *
136    * @return true if the configuration is temporary, false otherwise.
137    * @see RunnerAndConfigurationSettings#isTemporary()
138    */
139   @Deprecated
140   public abstract boolean isTemporary(@NotNull RunConfiguration configuration);
141
142   /**
143    * Saves the specified temporary run configuration and makes it a permanent one.
144    *
145    * @param configuration the temporary run configuration to save.
146    */
147   @Deprecated
148   public abstract void makeStable(@NotNull RunConfiguration configuration);
149
150   /**
151    * Saves the specified temporary run settings and makes it a permanent one.
152    *
153    * @param settings the temporary settings to save.
154    */
155   public abstract void makeStable(@NotNull RunnerAndConfigurationSettings settings);
156
157   /**
158    * Returns the selected item in the run/debug configurations combobox.
159    *
160    * @return the selected configuration, or null if no configuration is defined or selected.
161    */
162   @Nullable
163   public abstract RunnerAndConfigurationSettings getSelectedConfiguration();
164
165   /**
166    * Selects a configuration in the run/debug configurations combobox.
167    *
168    * @param configuration the configuration to select, or null if nothing should be selected.
169    */
170   public abstract void setSelectedConfiguration(@Nullable RunnerAndConfigurationSettings configuration);
171
172   /**
173    * Creates a configuration of the specified type with the specified name. Note that you need to call
174    * {@link #addConfiguration(RunnerAndConfigurationSettings, boolean)} if you want the configuration to be persisted in the project.
175    *
176    * @param name the name of the configuration to create (should be unique and not equal to any other existing configuration)
177    * @param type the type of the configuration to create.
178    * @return the configuration settings object.
179    * @see RunManager#suggestUniqueName(String, Collection)
180    */
181   @NotNull
182   public abstract RunnerAndConfigurationSettings createRunConfiguration(@NotNull String name, @NotNull ConfigurationFactory type);
183
184   /**
185    * Creates a configuration settings object based on a specified {@link RunConfiguration}. Note that you need to call
186    * {@link #addConfiguration(RunnerAndConfigurationSettings, boolean)} if you want the configuration to be persisted in the project.
187    *
188    * @param runConfiguration the run configuration
189    * @param factory the factory instance.
190    * @return the configuration settings object.
191    */
192   @NotNull
193   public abstract RunnerAndConfigurationSettings createConfiguration(@NotNull RunConfiguration runConfiguration, @NotNull ConfigurationFactory factory);
194
195   /**
196    * Returns the template settings for the specified configuration type.
197    *
198    * @param factory the configuration factory.
199    * @return the template settings.
200    */
201   @NotNull
202   public abstract RunnerAndConfigurationSettings getConfigurationTemplate(ConfigurationFactory factory);
203
204   /**
205    * Adds the specified run configuration to the list of run configurations stored in the project.
206    *
207    * @param settings the run configuration settings.
208    * @param isShared true if the configuration is marked as shared (stored in the versioned part of the project files), false if it's local
209    *                 (stored in the workspace file).
210    */
211   public abstract void addConfiguration(final RunnerAndConfigurationSettings settings, final boolean isShared);
212
213   /**
214    * Marks the specified run configuration as recently used (the temporary run configurations are deleted in LRU order).
215    *
216    * @param profile the run configuration to mark as recently used.
217    */
218   public abstract void refreshUsagesList(RunProfile profile);
219
220   @NotNull
221   public static String suggestUniqueName(@NotNull String str, @NotNull Collection<String> currentNames) {
222     if (!currentNames.contains(str)) return str;
223
224     final Matcher matcher = Pattern.compile("(.*?)\\s*\\(\\d+\\)").matcher(str);
225     final String originalName = (matcher.matches()) ? matcher.group(1) : str;
226     int i = 1;
227     while (true) {
228       final String newName = String.format("%s (%d)", originalName, i);
229       if (!currentNames.contains(newName)) return newName;
230       i++;
231     }
232   }
233 }