/*******************************************************************************
* Copyright (c) 2014 Bruno Medeiros and other Contributors.
* 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:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package melnorme.lang.ide.core;
import org.eclipse.core.runtime.ILog;
import org.eclipse.core.runtime.Plugin;
import org.osgi.framework.BundleContext;
import melnorme.lang.ide.core.utils.EclipseUtils;
import melnorme.utilbox.misc.ILogHandler;
import melnorme.utilbox.status.StatusException;
public abstract class LangCorePlugin extends Plugin {
public static final String PLUGIN_ID = LangCore_Actual.PLUGIN_ID;
public static final String TESTS_PLUGIN_ID = PLUGIN_ID + ".tests";
public static final String NATURE_ID = LangCore_Actual.NATURE_ID;
protected static LangCorePlugin pluginInstance;
/** Returns the singleton for this plugin instance. */
public static LangCorePlugin getInstance() {
return pluginInstance;
}
public static final ILogHandler LOG_HANDLER = new ILogHandler() {
@Override
public void logStatus(StatusException se) {
int severity = EclipseUtils.toEclipseSeverity(se);
ILog log = LangCorePlugin.getInstance().getLog();
log.log(EclipseCore.createStatus(severity, se.getMessage(), se.getCause()));
}
};
protected LangCore langCore;
/* ----------------- ----------------- */
protected boolean initializedAfterUI = false;
@Override
public final void start(BundleContext context) throws Exception {
pluginInstance = this;
langCore = new LangCore(LOG_HANDLER);
super.start(context);
doCustomStart(context);
}
protected abstract void doCustomStart(BundleContext context);
/**
* Initialize services that should only be started after the UI plugin
* (or other application plugin such as test runner) has started.
* This is because the UI plugin might register listeners into core services,
* and this ensures that the UI plugin gets all updates, because they will only start after this.
*/
public final void initializeAfterUIStart() {
if(initializedAfterUI == true) {
LangCore.logWarning("Atempted initializeAfterUIStart more than once.");
} else {
initializedAfterUI = true;
langCore.startAgentsAfterUIStart();
}
}
@Override
public final void stop(BundleContext context) throws Exception {
doCustomStop(context);
langCore.shutdown();
super.stop(context);
pluginInstance = null;
}
protected abstract void doCustomStop(BundleContext context);
}