All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.ui.console.AbstractConsole Maven / Gradle / Ivy

/*******************************************************************************
 * Copyright (c) 2000, 2016 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.ui.console;

import org.eclipse.core.runtime.ISafeRunnable;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.IBasicPropertyConstants;
import org.eclipse.ui.internal.console.ConsoleMessages;

/**
 * Common function for consoles.
 * 

* Clients implementing consoles should subclass this class. *

* @since 3.0 */ public abstract class AbstractConsole implements IConsole { // property listeners private ListenerList fListeners; /** * Console name */ private String fName = null; /** * Console image descriptor */ private ImageDescriptor fImageDescriptor = null; /** * Console type identifier */ private String fType = null; /** * Used to notify this console of lifecycle methods init() * and dispose(). */ class Lifecycle implements IConsoleListener { @Override public void consolesAdded(IConsole[] consoles) { for (IConsole console : consoles) { if (console == AbstractConsole.this) { initialize(); } } } @Override public void consolesRemoved(IConsole[] consoles) { for (IConsole console : consoles) { if (console == AbstractConsole.this) { ConsolePlugin.getDefault().getConsoleManager().removeConsoleListener(this); destroy(); } } } } /** * Notifies listeners of property changes, handling any exceptions */ class PropertyNotifier implements ISafeRunnable { private IPropertyChangeListener fListener; private PropertyChangeEvent fEvent; @Override public void handleException(Throwable exception) { IStatus status = new Status(IStatus.ERROR, ConsolePlugin.getUniqueIdentifier(), IConsoleConstants.INTERNAL_ERROR, ConsoleMessages.AbstractConsole_0, exception); ConsolePlugin.log(status); } @Override public void run() throws Exception { fListener.propertyChange(fEvent); } /** * Notifies listeners of the property change * * @param event the event that describes the property that has changed */ public void notify(PropertyChangeEvent event) { if (fListeners == null) { return; } fEvent = event; for (IPropertyChangeListener iPropertyChangeListener : fListeners) { fListener = iPropertyChangeListener; SafeRunner.run(this); } fListener = null; } } /** * Constructs a new console with the given name and image. * * @param name console name, cannot be null * @param imageDescriptor image descriptor, or null if none * @param autoLifecycle whether this console's lifecycle methods should be called * automatically when it is added (initialize()) and removed * (destroy()) from the console manager. When false, * clients are responsible for calling the lifecycle methods. * @since 3.1 */ public AbstractConsole(String name, ImageDescriptor imageDescriptor, boolean autoLifecycle) { this(name, null, imageDescriptor, autoLifecycle); } /** * Constructs a new console with the given name, type, image and lifecycle. * * @param name console name, cannot be null * @param type console type identifier or null * @param imageDescriptor image descriptor, or null if none * @param autoLifecycle whether this console's lifecycle methods should be called * automatically when it is added (initialize()) and removed * (destroy()) from the console manager. When false, * clients are responsible for calling the lifecycle methods. * @since 3.1 */ public AbstractConsole(String name, String type, ImageDescriptor imageDescriptor, boolean autoLifecycle) { setName(name); setType(type); setImageDescriptor(imageDescriptor); if (autoLifecycle) { ConsolePlugin.getDefault().getConsoleManager().addConsoleListener(new Lifecycle()); } } /** * Constructs a new console with the given name and image. The console's lifecycle * methods init() and dispose() will be called when the * console is added and removed from the console manager. * * @param name console name, cannot be null * @param imageDescriptor image descriptor, or null if none */ public AbstractConsole(String name, ImageDescriptor imageDescriptor) { this(name, imageDescriptor, true); } @Override public String getName() { return fName; } /** * Sets the name of this console to the specified value and notifies * property listeners of the change. * * @param name the new name */ protected void setName(String name) { if (!name.equals(fName)) { String old = fName; fName = name; firePropertyChange(this, IBasicPropertyConstants.P_TEXT, old, name); } } @Override public ImageDescriptor getImageDescriptor() { return fImageDescriptor; } /** * Sets the image descriptor for this console to the specified value and notifies * property listeners of the change. * * @param imageDescriptor the new image descriptor */ protected void setImageDescriptor(ImageDescriptor imageDescriptor) { ImageDescriptor old = fImageDescriptor; fImageDescriptor =imageDescriptor; firePropertyChange(this, IBasicPropertyConstants.P_IMAGE, old, imageDescriptor); } @Override public void addPropertyChangeListener(IPropertyChangeListener listener) { if (fListeners == null) { fListeners = new ListenerList<>(); } fListeners.add(listener); } @Override public void removePropertyChangeListener(IPropertyChangeListener listener) { if (fListeners != null) { fListeners.remove(listener); } } /** * Notify all listeners that the given property has changed. * * @param source the object on which a property has changed * @param property identifier of the property that has changed * @param oldValue the old value of the property, or null * @param newValue the new value of the property, or null */ public void firePropertyChange(Object source, String property, Object oldValue, Object newValue) { if (fListeners == null) { return; } PropertyNotifier notifier = new PropertyNotifier(); notifier.notify(new PropertyChangeEvent(source, property, oldValue, newValue)); } /** * Initializes this console. This method should only be called by clients managing a * console's lifecycle, otherwise this method will be called automatically when this console * is added to the console manager. The method is called once to initialize this console, * marking the beginning of its lifecycle. * * @since 3.1 */ public final void initialize() { init(); } /** * Called when this console is added to the console manager. Default * implementation does nothing. Subclasses may override. *

* Since 3.1, this method is only called automatically if this console was * created with an automatic lifecycle. *

*/ protected void init() { } /** * Disposes this console. This method should only be called by clients managing a * console's lifecycle, otherwise this method will be called automatically when this * console is removed from the console manager. The method is called once to dispose * this console, after which this console will no longer be used. * * @since 3.1 */ public final void destroy() { dispose(); } /** * Called when this console is removed from the console manager. Default * implementation does nothing. Subclasses may override. *

* Since 3.1, this methods is only called automatically if this console was * created with an automatic lifecycle. *

*/ protected void dispose() { } /** * Shows this console in all console views. This console will be become visible * if another console is currently pinned. * * @since 3.1 */ public void activate() { ConsolePlugin.getDefault().getConsoleManager().showConsoleView(this); } /** * Sets this console's type identifier. * * @param typeIdentifier the type identifier for this console * @since 3.1 */ protected void setType(String typeIdentifier) { fType = typeIdentifier; } /** * @since 3.1 */ @Override public String getType() { return fType; } /** * Returns the help context identifier for this console, or null * if none. When a non-null value is returned the associated help * will be installed for this console. * * @return help context id or null * @since 3.2 */ public String getHelpContextId() { return null; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy