/******************************************************************************* * Copyright (c) 2016 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 static melnorme.utilbox.core.Assert.AssertNamespace.assertNotNull; import melnorme.lang.ide.core.engine.ILanguageServerHandler; import melnorme.lang.ide.core.engine.SourceModelManager; import melnorme.lang.ide.core.operations.ToolManager; import melnorme.lang.ide.core.operations.build.BuildManager; import melnorme.lang.ide.core.project_model.BundleModelManager; import melnorme.lang.ide.core.project_model.LangBundleModel; import melnorme.utilbox.misc.ILogHandler; import melnorme.utilbox.status.StatusException; public abstract class AbstractLangCore extends LoggingCore { public static LangCore instance; public static LangCore get() { return instance; } /* ----------------- Owned singletons: ----------------- */ protected final ILogHandler logHandler; protected final CoreSettings coreSettings; protected final ToolManager toolManager; protected final ILanguageServerHandler languageServerHandler; protected final BundleModelManager<? extends LangBundleModel> bundleManager; protected final BuildManager buildManager; protected final SourceModelManager sourceModelManager; public AbstractLangCore(ILogHandler logHandler) { instance = (LangCore) this; this.logHandler = logHandler; coreSettings = assertNotNull(createCoreSettings()); toolManager = assertNotNull(createToolManager()); languageServerHandler = assertNotNull(createLanguageServerHandler()); bundleManager = assertNotNull(LangCore_Actual.createBundleModelManager()); buildManager = assertNotNull(createBuildManager()); sourceModelManager = assertNotNull(LangCore_Actual.createSourceModelManager()); } protected void shutdown() { buildManager.dispose(); bundleManager.shutdownManager(); sourceModelManager.dispose(); languageServerHandler.dispose(); toolManager.shutdownNow(); } /* ----------------- ----------------- */ public static ILogHandler log() { return instance.logHandler; } protected abstract CoreSettings createCoreSettings(); public static CoreSettings settings() { return instance.coreSettings; } protected abstract ToolManager createToolManager(); public static ToolManager getToolManager() { return instance.toolManager; } public static BundleModelManager<? extends LangBundleModel> getBundleModelManager() { return instance.bundleManager; } public static LangBundleModel getBundleModel() { return getBundleModelManager().getModel(); } protected abstract BuildManager createBuildManager(); public static BuildManager getBuildManager() { return instance.buildManager; } public static SourceModelManager getSourceModelManager() { return instance.sourceModelManager; } public abstract ILanguageServerHandler createLanguageServerHandler(); public static ILanguageServerHandler getLanguageServerHandler() { return instance.languageServerHandler; } /* ----------------- ----------------- */ /** Start core agents, and do other initizaliation after UI is started. */ public void startAgentsAfterUIStart() { bundleManager.startManager(); } } class LoggingCore { public static ILogHandler log() { return AbstractLangCore.instance.logHandler; } /** Logs status of given StatusException. */ public static void logStatusException(StatusException se) { log().logStatus(se); } /** Logs an error status with given message. */ public static void logError(String message) { log().logError(message); } /** Logs an error status with given message and given throwable. */ public static void logError(String message, Throwable throwable) { log().logError(message, throwable); } /** Logs a warning status with given message. */ public static void logWarning(String message) { log().logWarning(message); } /** Logs a warning status with given message and given throwable. */ public static void logWarning(String message, Throwable throwable) { log().logWarning(message, throwable); } /** Logs an info status with given message. */ public static void logInfo(String message) { log().logInfo(message); } public static void logInternalError(Throwable throwable) { log().logError("Internal Error!", throwable); } }