/******************************************************************************* * Copyright (c) 2015 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Pivotal, Inc. - initial API and implementation *******************************************************************************/ package org.springframework.ide.eclipse.boot.dash.views; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.model.IProcess; import org.eclipse.debug.internal.ui.views.console.ProcessConsole; import org.eclipse.ui.console.ConsolePlugin; import org.eclipse.ui.console.IConsole; import org.eclipse.ui.console.IConsoleManager; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.console.LogType; import org.springframework.ide.eclipse.boot.dash.model.BootDashElement; import org.springframework.ide.eclipse.boot.launch.util.BootLaunchUtils; import org.springsource.ide.eclipse.commons.livexp.util.ExceptionUtil; import com.google.common.collect.ImmutableSet; @SuppressWarnings("restriction") public class LocalElementConsoleManager extends BootDashModelConsoleManager { @Override public void doWriteToConsole(BootDashElement element, String message, LogType type) throws Exception { // Ignore message and log type for now. // For local apps, console content is generated by the Java process for // the project. } @Override public void doWriteToConsole(String appName, String message, LogType type) throws Exception { // Ignore message and log type for now. // For local apps, console content is generated by the Java process for // the project. } /** * @return IConsole that is associated with the given process. Null if no * console is found. */ protected IConsole getConsole(IProcess process, IConsole[] consoles) { for (IConsole console : consoles) { if (console instanceof ProcessConsole) { IProcess consoleProcess = ((ProcessConsole) console).getProcess(); if (consoleProcess != null && consoleProcess.equals(process)) { return console; } } } return null; } @Override public void terminateConsole(String appName) throws Exception { // Not supported } @Override public void showConsole(BootDashElement element) throws Exception { IConsoleManager manager = eclipseConsoleManager(); IConsole appConsole = getConsole(element); if (appConsole != null) { manager.showConsoleView(appConsole); } else { throw ExceptionUtil.coreException("Failed to open console for: " + element.getName() + ". Either a process console may not exist or the application is not running."); } } private IConsole getConsole(BootDashElement element) { IConsoleManager manager = eclipseConsoleManager(); IConsole[] activeConsoles = manager.getConsoles(); if (activeConsoles != null) { ImmutableSet<ILaunchConfiguration> launchConfs = element.getLaunchConfigs(); for (ILaunch launch : BootLaunchUtils.getLaunches(launchConfs)) { IProcess[] processes = launch.getProcesses(); if (processes != null) { for (IProcess process : processes) { IConsole console = getConsole(process, activeConsoles); if (console!=null) { return console; } } } } } return null; } protected IConsoleManager eclipseConsoleManager() { return ConsolePlugin.getDefault().getConsoleManager(); } @Override public void resetConsole(String appName) { // Not supported } @Override public void showConsole(String appName) throws Exception { // Not supported } @Override public void reconnect(BootDashElement element) throws Exception { // Not supported } }