blob: 04618e9074a0ae781bce02b386354bf7fd073ca7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 Ericsson
*
* All rights reserved. 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:
* Alexandre Montplaisir - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.common.core;
import static org.eclipse.tracecompass.common.core.NonNullUtils.nullToEmptyString;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.annotation.Nullable;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*
* @author Alexandre Montplaisir
*/
public abstract class TraceCompassActivator extends Plugin {
// ------------------------------------------------------------------------
// Attributes
// ------------------------------------------------------------------------
/** Map of all the registered activators, indexed by plugin ID */
private static final Map<String, TraceCompassActivator> ACTIVATORS =
Collections.synchronizedMap(new HashMap<String, TraceCompassActivator>());
/** This instance's plug-in ID */
private final String fPluginId;
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
/**
* The constructor
*
* @param pluginID
* The ID of the plugin
*/
public TraceCompassActivator(String pluginID) {
fPluginId = pluginID;
}
// ------------------------------------------------------------------------
// Accessors
// ------------------------------------------------------------------------
/**
* Return this plug-in's ID.
*
* @return The plug-in ID
*/
public String getPluginId() {
return fPluginId;
}
/**
* Get a registered activator. Subclasses should implement their own public
* getInstance() method, which returns the result of this.
*
* @param id
* The activator's plugin ID
* @return The corresponding activator
*/
protected static TraceCompassActivator getInstance(String id) {
TraceCompassActivator ret = ACTIVATORS.get(id);
if (ret == null) {
/* The activator should be registered at this point! */
throw new IllegalStateException();
}
return ret;
}
// ------------------------------------------------------------------------
// Abstract methods
// ------------------------------------------------------------------------
/**
* Additional actions to run at the plug-in startup
*/
protected abstract void startActions();
/**
* Additional actions to run at the plug-in shtudown
*/
protected abstract void stopActions();
// ------------------------------------------------------------------------
// ore.eclipse.core.runtime.Plugin
// ------------------------------------------------------------------------
@Override
public final void start(@Nullable BundleContext context) throws Exception {
super.start(context);
String id = this.getPluginId();
synchronized (ACTIVATORS) {
if (ACTIVATORS.containsKey(id)) {
logError("Duplicate Activator ID : " + id); //$NON-NLS-1$
}
ACTIVATORS.put(id, this);
}
startActions();
}
@Override
public final void stop(@Nullable BundleContext context) throws Exception {
stopActions();
ACTIVATORS.remove(this.getPluginId());
super.stop(context);
}
// ------------------------------------------------------------------------
// Logging helpers
// ------------------------------------------------------------------------
/**
* Logs a message with severity INFO in the runtime log of the plug-in.
*
* @param message
* A message to log
*/
public void logInfo(@Nullable String message) {
getLog().log(new Status(IStatus.INFO, fPluginId, nullToEmptyString(message)));
}
/**
* Logs a message and exception with severity INFO in the runtime log of the
* plug-in.
*
* @param message
* A message to log
* @param exception
* A exception to log
*/
public void logInfo(@Nullable String message, Throwable exception) {
getLog().log(new Status(IStatus.INFO, fPluginId, nullToEmptyString(message), exception));
}
/**
* Logs a message and exception with severity WARNING in the runtime log of
* the plug-in.
*
* @param message
* A message to log
*/
public void logWarning(@Nullable String message) {
getLog().log(new Status(IStatus.WARNING, fPluginId, nullToEmptyString(message)));
}
/**
* Logs a message and exception with severity WARNING in the runtime log of
* the plug-in.
*
* @param message
* A message to log
* @param exception
* A exception to log
*/
public void logWarning(@Nullable String message, Throwable exception) {
getLog().log(new Status(IStatus.WARNING, fPluginId, nullToEmptyString(message), exception));
}
/**
* Logs a message and exception with severity ERROR in the runtime log of
* the plug-in.
*
* @param message
* A message to log
*/
public void logError(@Nullable String message) {
getLog().log(new Status(IStatus.ERROR, fPluginId, nullToEmptyString(message)));
}
/**
* Logs a message and exception with severity ERROR in the runtime log of
* the plug-in.
*
* @param message
* A message to log
* @param exception
* A exception to log
*/
public void logError(@Nullable String message, Throwable exception) {
getLog().log(new Status(IStatus.ERROR, fPluginId, nullToEmptyString(message), exception));
}
}