Skip to content
This repository has been archived by the owner on Apr 3, 2018. It is now read-only.

Commit

Permalink
Refactor LangCore singletons
Browse files Browse the repository at this point in the history
  • Loading branch information
bruno-medeiros committed Jun 30, 2016
1 parent d1b74fd commit 370ea93
Show file tree
Hide file tree
Showing 7 changed files with 137 additions and 78 deletions.
@@ -0,0 +1,97 @@
/*******************************************************************************
* 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 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;

public abstract class AbstractLangCore {

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 BundleModelManager<? extends LangBundleModel> bundleManager;
protected final BuildManager buildManager;
protected final SourceModelManager sourceModelManager;

public AbstractLangCore(ILogHandler logHandler) {
instance = (LangCore) this;

this.logHandler = logHandler;

coreSettings = createCoreSettings();
toolManager = createToolManager();
bundleManager = LangCore_Actual.createBundleModelManager();
buildManager = createBuildManager();
sourceModelManager = LangCore_Actual.createSourceModelManager();
}

protected void shutdown() {
buildManager.dispose();
bundleManager.shutdownManager();
sourceModelManager.dispose();
toolManager.shutdownNow();
}

/* ----------------- ----------------- */

public static ILogHandler logHandler() {
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;
}

/* ----------------- ----------------- */

/** Start core agents, and do other initizaliation after UI is started. */
public void startAgentsAfterUIStart() {
bundleManager.startManager();
}

}
30 changes: 3 additions & 27 deletions plugin_ide.core/src-lang/melnorme/lang/ide/core/LangCore.java
Expand Up @@ -10,45 +10,21 @@
*******************************************************************************/
package melnorme.lang.ide.core;

import org.eclipse.core.runtime.ILog;
import melnorme.lang.ide.core.utils.EclipseUtils;
import melnorme.utilbox.misc.ILogHandler;
import melnorme.utilbox.status.Severity;
import melnorme.utilbox.status.StatusException;

public class LangCore extends LangCore_Actual {

public LangCore() {
}

protected void shutdown() {
buildManager.dispose();
bundleManager.shutdownManager();
sourceModelManager.dispose();
toolManager.shutdownNow();
}

/**
* Start core agents, and do other initizaliation after UI is started.
*/
public void startAgentsAfterUIStart() {
bundleManager.startManager();
public LangCore(ILogHandler logHandler) {
super(logHandler);
}

/* ----------------- Logging ----------------- */

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()));
}
};

/** Logs status of given StatusException. */
public static void logStatusException(StatusException se) {
LOG_HANDLER.logStatus(se);
logHandler().logStatus(se);
}

public static void logInternalError(Throwable throwable) {
Expand Down
Expand Up @@ -10,9 +10,14 @@
*******************************************************************************/
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;
Expand All @@ -27,6 +32,15 @@ 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;

/* ----------------- ----------------- */
Expand All @@ -36,7 +50,7 @@ public static LangCorePlugin getInstance() {
@Override
public final void start(BundleContext context) throws Exception {
pluginInstance = this;
langCore = new LangCore();
langCore = new LangCore(LOG_HANDLER);
super.start(context);
doCustomStart(context);
}
Expand Down
Expand Up @@ -57,9 +57,10 @@
*/
public abstract class ToolManager extends EventSource<ILangOperationsListener> {

protected final CoreSettings settings = LangCore.settings();
protected final CoreSettings settings;

public ToolManager() {
public ToolManager(CoreSettings settings) {
this.settings = assertNotNull(settings);
}

public void shutdownNow() {
Expand Down
Expand Up @@ -67,7 +67,7 @@ public void addProcessListener(IProcessOutputListener listener) throws CommonExc
});

try {
return new ExternalProcessNotifyingHelper(process, true, pm, processListeners, LangCore.LOG_HANDLER);
return new ExternalProcessNotifyingHelper(process, true, pm, processListeners, LangCore.logHandler());
} finally {
processListeners = null; // Set to null to fail fast if anyone else tries to modify afterward.
}
Expand Down
Expand Up @@ -10,8 +10,13 @@
*******************************************************************************/
package LANG_PROJECT_ID.ide.core.operations;

import melnorme.lang.ide.core.CoreSettings;
import melnorme.lang.ide.core.operations.ToolManager;

public class LANGUAGE_ToolManager extends ToolManager {

public LANGUAGE_ToolManager(CoreSettings settings) {
super(settings);
}

}
60 changes: 13 additions & 47 deletions plugin_ide.core/src/melnorme/lang/ide/core/LangCore_Actual.java
Expand Up @@ -5,13 +5,12 @@
import LANG_PROJECT_ID.ide.core.operations.LANGUAGE_BuildManager;
import LANG_PROJECT_ID.ide.core.operations.LANGUAGE_ToolManager;
import LANG_PROJECT_ID.tooling.toolchain.LANGUAGE_SDKLocationValidator;
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;

public class LangCore_Actual {
public class LangCore_Actual extends AbstractLangCore {

public static final String PLUGIN_ID = "LANG_PROJECT_ID.ide.core";
public static final String NATURE_ID = PLUGIN_ID +".nature";
Expand All @@ -27,26 +26,11 @@ public class LangCore_Actual {
public static final String VAR_NAME_SdkToolPath = "SDK_TOOL_PATH";
public static final String VAR_NAME_SdkToolPath_DESCRIPTION = "The path of the SDK tool";

public static LangCore instance;

/* ----------------- Owned singletons: ----------------- */

protected final CoreSettings coreSettings;
protected final ToolManager toolManager;
protected final LANGUAGE_BundleModelManager bundleManager;
protected final BuildManager buildManager;
protected final LANGUAGE_SourceModelManager sourceModelManager;

public LangCore_Actual() {
instance = (LangCore) this;

coreSettings = createCoreSettings();
toolManager = createToolManagerSingleton();
bundleManager = createBundleModelManager();
buildManager = createBuildManager(bundleManager.getModel());
sourceModelManager = createSourceModelManager();
public LangCore_Actual(ILogHandler logHandler) {
super(logHandler);
}


@Override
protected CoreSettings createCoreSettings() {
return new CoreSettings() {
@Override
Expand All @@ -56,44 +40,26 @@ public LANGUAGE_SDKLocationValidator getSDKLocationValidator() {
};
}

public static LANGUAGE_ToolManager createToolManagerSingleton() {
return new LANGUAGE_ToolManager();
@Override
protected ToolManager createToolManager() {
return new LANGUAGE_ToolManager(coreSettings);
}

public static LANGUAGE_BundleModelManager createBundleModelManager() {
return new LANGUAGE_BundleModelManager();
}
public static BuildManager createBuildManager(LangBundleModel bundleModel) {
return new LANGUAGE_BuildManager(bundleModel, LangCore.getToolManager());

@Override
protected BuildManager createBuildManager() {
return new LANGUAGE_BuildManager(this.bundleManager.getModel(), toolManager);
}

public static LANGUAGE_SourceModelManager createSourceModelManager() {
return new LANGUAGE_SourceModelManager();
}


/* ----------------- ----------------- */

public static CoreSettings settings() {
return instance.coreSettings;
}

public static ToolManager getToolManager() {
return instance.toolManager;
}
public static LANGUAGE_BundleModel getBundleModel() {
return instance.bundleManager.getModel();
}
public static BuildManager getBuildManager() {
return instance.buildManager;
}
public static BundleModelManager<?> getBundleModelManager() {
return instance.bundleManager;
}
public static SourceModelManager getSourceModelManager() {
return instance.sourceModelManager;
}

public static class LANGUAGE_BundleModel extends LangBundleModel {

}
Expand Down

0 comments on commit 370ea93

Please sign in to comment.