| /* |
| * Copyright 2000-2014 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.intellij.execution.runners; |
| |
| import com.intellij.diagnostic.logging.LogConsoleManagerBase; |
| import com.intellij.diagnostic.logging.LogFilesManager; |
| import com.intellij.diagnostic.logging.OutputFileUtil; |
| import com.intellij.execution.configurations.RunConfigurationBase; |
| import com.intellij.execution.configurations.RunProfile; |
| import com.intellij.execution.configurations.SearchScopeProvider; |
| import com.intellij.execution.process.ProcessHandler; |
| import com.intellij.execution.ui.ExecutionConsole; |
| import com.intellij.execution.ui.RunContentDescriptor; |
| import com.intellij.execution.ui.RunnerLayoutUi; |
| import com.intellij.icons.AllIcons; |
| import com.intellij.openapi.Disposable; |
| import com.intellij.openapi.actionSystem.DataProvider; |
| import com.intellij.openapi.actionSystem.LangDataKeys; |
| import com.intellij.openapi.project.Project; |
| import com.intellij.psi.search.GlobalSearchScope; |
| import org.jetbrains.annotations.NonNls; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| |
| import javax.swing.*; |
| |
| public abstract class RunTab implements DataProvider, Disposable { |
| @NotNull |
| protected final RunnerLayoutUi myUi; |
| private LogFilesManager myManager; |
| protected RunContentDescriptor myRunContentDescriptor; |
| |
| protected ExecutionEnvironment myEnvironment; |
| protected final Project myProject; |
| private final GlobalSearchScope mySearchScope; |
| |
| private LogConsoleManagerBase logConsoleManager; |
| |
| protected RunTab(@NotNull ExecutionEnvironment environment, @NotNull String runnerType) { |
| this(environment.getProject(), |
| SearchScopeProvider.createSearchScope(environment.getProject(), environment.getRunProfile()), |
| runnerType, |
| environment.getExecutor().getId(), |
| environment.getRunProfile().getName()); |
| |
| myEnvironment = environment; |
| } |
| |
| @Override |
| public void dispose() { |
| myRunContentDescriptor = null; |
| myEnvironment = null; |
| logConsoleManager = null; |
| } |
| |
| protected RunTab(@NotNull Project project, @NotNull GlobalSearchScope searchScope, @NotNull String runnerType, @NotNull String runnerTitle, @NotNull String sessionName) { |
| myProject = project; |
| mySearchScope = searchScope; |
| |
| myUi = RunnerLayoutUi.Factory.getInstance(project).create(runnerType, runnerTitle, sessionName, this); |
| myUi.getContentManager().addDataProvider(this); |
| } |
| |
| @Nullable |
| @Override |
| public Object getData(@NonNls String dataId) { |
| if (LangDataKeys.RUN_PROFILE.is(dataId)) { |
| return myEnvironment == null ? null : myEnvironment.getRunProfile(); |
| } |
| else if (LangDataKeys.EXECUTION_ENVIRONMENT.is(dataId)) { |
| return myEnvironment; |
| } |
| else if (LangDataKeys.RUN_CONTENT_DESCRIPTOR.is(dataId)) { |
| return myRunContentDescriptor; |
| } |
| return null; |
| } |
| |
| @NotNull |
| public LogConsoleManagerBase getLogConsoleManager() { |
| if (logConsoleManager == null) { |
| logConsoleManager = new LogConsoleManagerBase(myProject, mySearchScope) { |
| @Override |
| protected Icon getDefaultIcon() { |
| return AllIcons.Debugger.Console; |
| } |
| |
| @Override |
| protected RunnerLayoutUi getUi() { |
| return myUi; |
| } |
| |
| @Override |
| public ProcessHandler getProcessHandler() { |
| return myRunContentDescriptor == null ? null : myRunContentDescriptor.getProcessHandler(); |
| } |
| }; |
| } |
| return logConsoleManager; |
| } |
| |
| protected final void initLogConsoles(@NotNull RunProfile runConfiguration, @NotNull RunContentDescriptor contentDescriptor, @Nullable ExecutionConsole console) { |
| ProcessHandler processHandler = contentDescriptor.getProcessHandler(); |
| if (runConfiguration instanceof RunConfigurationBase) { |
| RunConfigurationBase configuration = (RunConfigurationBase)runConfiguration; |
| if (myManager == null) { |
| myManager = new LogFilesManager(getLogConsoleManager()); |
| } |
| myManager.addLogConsoles(configuration, processHandler); |
| if (processHandler != null) { |
| OutputFileUtil.attachDumpListener(configuration, processHandler, console); |
| } |
| } |
| } |
| } |