/*******************************************************************************
* Copyright (c) 2016 ARM Ltd. and others
* 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:
* ARM Ltd and ARM Germany GmbH - Initial API and implementation
*******************************************************************************/
package com.arm.cmsis.pack.refclient.ui.console;
import java.io.IOException;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.MessageConsole;
import org.eclipse.ui.console.MessageConsoleStream;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import com.arm.cmsis.pack.refclient.Activator;
import com.arm.cmsis.pack.refclient.ui.SequenceView;
/**
* Reference Console for Debug Sequences
*/
public class SequenceConsole extends MessageConsole {
public static final String CONSOLE_TYPE = "com.arm.cmsis.pack.refclient.sequence.console"; //$NON-NLS-1$
public static final String BASE_NAME = "CMSIS Sequence console"; //$NON-NLS-1$
public static final String ICON_SEQ_CONSOLE = "icons/launch.gif"; //$NON-NLS-1$
MessageConsoleStream fStream;
public SequenceConsole(String name, ImageDescriptor imageDescriptor) {
super(name, CONSOLE_TYPE, imageDescriptor, true);
initStream();
}
private void initStream() {
fStream = newMessageStream();
}
@Override
protected void dispose() {
super.dispose();
try {
fStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void output(final String message){
Display.getDefault().asyncExec(() -> fStream.println(message));
}
public static SequenceConsole openConsole(IProject project) {
String name = null;
if(project != null) {
name = project.getName();
}
return openConsole(name);
}
synchronized public static SequenceConsole openConsole(String projectName) {
// add it if necessary
String consoleName = BASE_NAME;
if(projectName != null && !projectName.isEmpty() && !projectName.equals(BASE_NAME)) {
consoleName += " [" + projectName + "]"; //$NON-NLS-1$ //$NON-NLS-2$
}
SequenceConsole seqConsole = null;
SequenceConsole seqBaseConsole = null;
IConsole[] consoles = ConsolePlugin.getDefault().getConsoleManager().getConsoles();
if(consoles != null) {
for (IConsole console : consoles) {
if(console.getType() == null) {
continue;
}
if(!console.getType().equals(CONSOLE_TYPE)) {
continue;
}
if(consoleName.equals(BASE_NAME)) {
seqConsole = (SequenceConsole) console;
break;
}
String name = console.getName();
if(name ==null) {
continue;
}
if (name.equals(consoleName)) {
seqConsole = (SequenceConsole) console;
break;
} else if(name.equals(BASE_NAME)) {
seqBaseConsole = (SequenceConsole) console;
}
}
}
if (seqConsole == null && seqBaseConsole!= null) {
seqConsole = seqBaseConsole;
if(!consoleName.equals(BASE_NAME)) {
seqConsole.setName(consoleName);
}
} else if (seqConsole == null) {
ImageDescriptor imageDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, ICON_SEQ_CONSOLE);
seqConsole = new SequenceConsole(consoleName, imageDescriptor);
ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[] { seqConsole });
}
IViewPart seqView = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(SequenceView.ID);
if(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().isPartVisible(seqView)) {
showConsole(seqConsole);
}
return seqConsole;
}
synchronized public static void showConsole(final SequenceConsole console) {
Display.getDefault().asyncExec(() ->
ConsolePlugin.getDefault().getConsoleManager().showConsoleView(console)
);
}
}