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

Commit

Permalink
intermediate refactoring of LangOperationsConsoleUIHandler.
Browse files Browse the repository at this point in the history
review LangUIPlugin_Actual
  • Loading branch information
bruno-medeiros committed Jan 13, 2016
1 parent 24a1726 commit c0b5177
Show file tree
Hide file tree
Showing 16 changed files with 272 additions and 216 deletions.
Expand Up @@ -13,13 +13,14 @@
import static melnorme.utilbox.core.Assert.AssertNamespace.assertNotNull;

import java.nio.file.Path;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;

import melnorme.lang.ide.core.ILangOperationsListener;
import melnorme.lang.ide.core.LangCore;
import melnorme.lang.ide.core.operations.ILangOperationsListener_Default.ILangOperationConsoleHandler;
import melnorme.lang.ide.core.operations.ILangOperationsListener_Default.ProcessStartKind;
import melnorme.lang.ide.core.utils.EclipseUtils;
import melnorme.lang.ide.core.utils.ResourceUtils;
import melnorme.lang.ide.core.utils.operation.EclipseCancelMonitor;
Expand All @@ -30,6 +31,7 @@
import melnorme.lang.tooling.ops.IOperationHelper;
import melnorme.lang.tooling.ops.util.PathValidator;
import melnorme.lang.utils.ProcessUtils;
import melnorme.utilbox.collections.ArrayList2;
import melnorme.utilbox.concurrency.ICancelMonitor;
import melnorme.utilbox.concurrency.OperationCancellation;
import melnorme.utilbox.core.CommonException;
Expand Down Expand Up @@ -95,9 +97,9 @@ public void notifyMessage(StatusLevel statusLevel, String title, String message)
}
}

public void notifyOperationStarted(OperationInfo opInfo) {
public void notifyStartBuildOperation(OperationInfo opInfo) {
for(ILangOperationsListener processListener : getListeners()) {
processListener.handleNewOperation(opInfo);
processListener.handleStartBuildOperation(opInfo);
}
}

Expand All @@ -109,53 +111,89 @@ public void notifyMessageEvent(MessageEventInfo messageInfo) {

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

protected EclipseCancelMonitor cm(IProgressMonitor pm) {
return new EclipseCancelMonitor(pm);
}

public OperationInfo startNewToolOperation() {
return startNewToolOperation(false);
}

public OperationInfo startNewToolOperation(boolean explicitConsoleNotify) {
/* FIXME: these are using build operation*/
return startNewBuildOperation(explicitConsoleNotify);
}

public OperationInfo startNewBuildOperation() {
return startNewBuildOperation(false);
}

public OperationInfo startNewBuildOperation(boolean explicitConsoleNotify) {
OperationInfo opInfo = new OperationInfo(null, explicitConsoleNotify);
notifyOperationStarted(opInfo);
notifyStartBuildOperation(opInfo);
opInfo.setStarted(true);
return opInfo;
}

protected EclipseCancelMonitor cm(IProgressMonitor pm) {
return new EclipseCancelMonitor(pm);
public final RunProcessTask newRunToolOperation2(ProcessBuilder pb, IProgressMonitor pm) {
OperationInfo opInfo = startNewToolOperation();
return newRunToolTask(opInfo, pb, pm);
}

public RunProcessTask newRunToolOperation2(ProcessBuilder pb, IProgressMonitor pm) {
OperationInfo opInfo = startNewToolOperation();
return newRunToolTask(opInfo, pb, cm(pm));
@Deprecated
public final RunProcessTask newRunToolTask(OperationInfo opInfo, ProcessBuilder pb, IProgressMonitor pm) {
AggregatedOperationConsoleHandler buildOperationHandler = getBuildOperationHandler(opInfo);
return newRunToolTask2(buildOperationHandler, pb, cm(pm));
}

public RunProcessTask newRunToolTask(OperationInfo opInfo, ProcessBuilder pb, IProgressMonitor pm) {
return newRunToolTask(opInfo, pb, cm(pm));
public RunProcessTask newRunToolTask2(AggregatedOperationConsoleHandler buildOperationHandler, ProcessBuilder pb,
ICancelMonitor cm) {
return new RunProcessTask(buildOperationHandler, pb, cm);
}
public RunProcessTask newRunToolTask(OperationInfo opInfo, ProcessBuilder pb, ICancelMonitor cm) {
return new RunProcessTask(opInfo, pb, cm);

protected AggregatedOperationConsoleHandler getBuildOperationHandler(OperationInfo opInfo) {
AggregatedOperationConsoleHandler aggregatedHandlers = new AggregatedOperationConsoleHandler();

for(ILangOperationsListener processListener : getListeners()) {
ILangOperationConsoleHandler handler =
processListener.getOperationUIHandler(ProcessStartKind.BUILD, opInfo);
aggregatedHandlers.handlers.add(handler);
}
return aggregatedHandlers;
}

public static class AggregatedOperationConsoleHandler implements ILangOperationConsoleHandler {

public final ArrayList2<ILangOperationConsoleHandler> handlers = new ArrayList2<>();

@Override
public void handleProcessStart(String prefixText, ProcessBuilder pb, ProcessStartHelper processStartHelper) {
for (ILangOperationConsoleHandler handler : handlers) {
handler.handleProcessStart(prefixText, pb, processStartHelper);
}
}

}

public class RunProcessTask extends AbstractRunProcessTask {

protected final OperationInfo opInfo;
protected final ILangOperationConsoleHandler opHandler;

public RunProcessTask(OperationInfo opInfo, ProcessBuilder pb, ICancelMonitor cancelMonitor) {
super(pb, cancelMonitor);
this.opInfo = opInfo;
public RunProcessTask(ILangOperationConsoleHandler opHandler, ProcessBuilder pb, ICancelMonitor cm) {
super(pb, cm);
this.opHandler = opHandler;
}

@Override
protected void handleProcessStartResult(ProcessStartHelper psh) {
for(ILangOperationsListener processListener : getListeners()) {
processListener.handleProcessStart(newProcessStartInfo(opInfo, pb, psh));
}
String prefixText = newProcessStartInfo_getPrefixText();
opHandler.handleProcessStart(prefixText, pb, psh);
}

}

protected ProcessStartInfo newProcessStartInfo(OperationInfo opInfo, ProcessBuilder pb, ProcessStartHelper psh) {
return new ProcessStartInfo(opInfo, pb, ">> Running: ", psh);
protected String newProcessStartInfo_getPrefixText() {
return ">> Running: ";
}

/* ----------------- ----------------- */
Expand Down
Expand Up @@ -14,6 +14,8 @@
import org.eclipse.core.runtime.IProgressMonitor;

import melnorme.lang.ide.core.LangCore;
import melnorme.lang.ide.core.operations.AbstractToolManager.AggregatedOperationConsoleHandler;
import melnorme.lang.ide.core.operations.AbstractToolManager.RunProcessTask;
import melnorme.lang.ide.core.operations.build.IToolOperation;
import melnorme.lang.ide.core.utils.ResourceUtils;
import melnorme.utilbox.concurrency.OperationCancellation;
Expand Down Expand Up @@ -43,7 +45,10 @@ protected AbstractToolManager getToolManager() {

protected ExternalProcessResult runBuildTool(OperationInfo opInfo, ProcessBuilder pb, IProgressMonitor pm)
throws CommonException, OperationCancellation {
return getToolManager().newRunToolTask(opInfo, pb, pm).runProcess();
AbstractToolManager toolMgr = getToolManager();
AggregatedOperationConsoleHandler buildOperationHandler = toolMgr.getBuildOperationHandler(opInfo);
RunProcessTask newRunToolTask = toolMgr.newRunToolTask2(buildOperationHandler, pb, toolMgr.cm(pm));
return newRunToolTask.runProcess();
}

}
Expand Up @@ -18,16 +18,37 @@ public interface ILangOperationsListener_Default {
/** Report a message to the user. */
void notifyMessage(StatusLevel statusLevel, String title, String message);

void handleNewOperation(OperationInfo opInfo);
void handleStartBuildOperation(OperationInfo opInfo);

void handleMessage(MessageEventInfo messageInfo);

void handleProcessStart(ProcessStartInfo processStartInfo);
public enum ProcessStartKind {
BUILD,
ENGINE_SERVER,
ENGINE_TOOLS
}

// TODO: Need to refactor out these two methods into something more generic.

void engineDaemonStart(ProcessBuilder pb, ProcessStartHelper processStartHelper);
default void engineDaemonStart(ProcessBuilder pb, ProcessStartHelper psh) {
handleProcessStart(ProcessStartKind.ENGINE_SERVER, pb, psh);
}

void engineClientToolStart(ProcessBuilder pb, ProcessStartHelper processStartHelper);
default void engineClientToolStart(ProcessBuilder pb, ProcessStartHelper psh) {
handleProcessStart(ProcessStartKind.ENGINE_TOOLS, pb, psh);
}

default void handleProcessStart(ProcessStartKind kind, ProcessBuilder pb, ProcessStartHelper psh) {
ILangOperationConsoleHandler operationUIHandler = getOperationUIHandler(kind, null);
operationUIHandler.handleProcessStart(null, pb, psh);
}

ILangOperationConsoleHandler getOperationUIHandler(ProcessStartKind kind, OperationInfo opInfo);

public interface ILangOperationConsoleHandler {

void handleProcessStart(String prefixText, ProcessBuilder pb, ProcessStartHelper processStartHelper);

}

}
Expand Up @@ -16,6 +16,8 @@

import melnorme.utilbox.collections.HashMap2;

/* FIXME: need to remove */
@Deprecated
public class OperationInfo {

public final IProject project; // can be null
Expand Down
Expand Up @@ -20,7 +20,7 @@ public class ProcessStartInfo {
public final OperationInfo opInfo;

public final ProcessBuilder pb;
public final String prefixText;
public String prefixText;
public final ProcessStartHelper processStartHelper;

public ProcessStartInfo(OperationInfo opInfo, ProcessBuilder pb, String prefixText, ProcessStartHelper psh) {
Expand Down
Expand Up @@ -436,7 +436,7 @@ public final IToolOperation newBuildTargetOperation(IProject project, BuildTarge

public IToolOperation newBuildTargetsOperation(IProject project, Collection2<BuildTarget> targetsToBuild)
throws CommonException {
OperationInfo operationInfo = LangCore.getToolManager().startNewToolOperation();
OperationInfo operationInfo = LangCore.getToolManager().startNewBuildOperation();
return newBuildOperation(operationInfo, project, true, targetsToBuild);
}

Expand Down
3 changes: 2 additions & 1 deletion plugin_ide.ui/src-lang/melnorme/lang/ide/ui/LangImages.java
Expand Up @@ -63,7 +63,8 @@ protected static ImageDescriptor createUnmanaged(String prefix, String name) {

public static final ImageHandle ACTIONS_OPEN_DEF = createManaged(LANG_ACTIONS, "OpenDef.16.png");

public static final ImageHandle TOOLS_CONSOLE_ICON = createManaged(CAT_VIEWS, "ToolsConsole.16.png");
public static final ImageHandle BUILD_CONSOLE_ICON = createManaged(CAT_VIEWS, "ToolsConsole.16.png");
public static final ImageHandle ENGINE_TOOLS_CONSOLE_ICON = BUILD_CONSOLE_ICON;
public static final ImageHandle SOURCE_EDITOR_ICON = createManaged(CAT_VIEWS, "SourceEditor.png");

public static final ImageHandle BUILD_TARGET = createManaged(CAT_VIEWS, "target.png");
Expand Down
Expand Up @@ -19,6 +19,7 @@
import melnorme.lang.ide.core.utils.prefs.IPreferenceIdentifier;
import melnorme.lang.ide.ui.LangUI;
import melnorme.lang.ide.ui.LangUIPlugin;
import melnorme.util.swt.SWTUtil;
import melnorme.utilbox.fields.DomainField;
import melnorme.utilbox.fields.IModelField;
import melnorme.utilbox.fields.IFieldValueListener;
Expand Down Expand Up @@ -47,8 +48,8 @@ public ThemedTextStylingPreference(String qualifer, String key, TextStyling defa
this.defaultPref = new TextStylingPreference(qualifer, key, defaultValue);
this.darkPref = new TextStylingPreference(qualifer, key_Dark, defaultValueDark);

defaultPref.asField().registerListener(() -> updateEffectiveValue());
darkPref.asField().registerListener(() -> updateEffectiveValue());
this.defaultPref.asField().registerListener(() -> updateEffectiveValue());
this.darkPref.asField().registerListener(() -> updateEffectiveValue());

LangUI.getInstance().getThemeHelper().new ThemeChangeListener() {
@Override
Expand All @@ -57,6 +58,9 @@ public void handleEvent(Event event) {
}
};

// We can't tell without going to UI if dark theme is active or no, so initialize with defaultPref
effectiveValue.setFieldValue(defaultPref.getFromPrefStore());
// .. then request an update of effective value
updateEffectiveValue();
}

Expand All @@ -71,7 +75,10 @@ public TextStylingPreference getDarkPref() {
/* ----------------- ----------------- */

protected void updateEffectiveValue() {
effectiveValue.setFieldValue(getEffectivePreference().getFromPrefStore());
SWTUtil.runInSWTThread(() -> {
/* Unfortunately, this need to run in UI thread */
effectiveValue.setFieldValue(getEffectivePreference().getFromPrefStore());
});
}

protected TextStyling getEffectiveValue() {
Expand Down
Expand Up @@ -11,6 +11,8 @@
package melnorme.lang.ide.ui.tools.console;

import static melnorme.utilbox.core.CoreUtil.array;

import melnorme.lang.ide.ui.LangImages;
import melnorme.lang.ide.ui.LangUIPlugin_Actual;
import melnorme.lang.ide.ui.utils.ConsoleUtils;

Expand All @@ -20,12 +22,12 @@
import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IOConsoleOutputStream;

public class DaemonToolMessageConsole extends ToolsConsole {
public class EngineToolsConsole extends ToolsConsole {

public final IOConsoleOutputStream serverStdOut;
public final IOConsoleOutputStream serverStdErr;

public DaemonToolMessageConsole(String name, ImageDescriptor imageDescriptor) {
public EngineToolsConsole(String name, ImageDescriptor imageDescriptor) {
super(name, imageDescriptor, false);

serverStdOut = newOutputStream();
Expand All @@ -45,15 +47,15 @@ protected void ui_initStreamColors() {
stdErr.setActivateOnWrite(false);
}

public static DaemonToolMessageConsole getConsole() {
DaemonToolMessageConsole console = ConsoleUtils.findConsole(
LangUIPlugin_Actual.DAEMON_TOOL_ConsoleName, DaemonToolMessageConsole.class);
public static EngineToolsConsole getConsole() {
EngineToolsConsole console = ConsoleUtils.findConsole(
LangUIPlugin_Actual.ENGINE_TOOLS_ConsoleName, EngineToolsConsole.class);
if(console != null) {
return console;
}
// no console, so create a new one
DaemonToolMessageConsole msgConsole = new DaemonToolMessageConsole(
LangUIPlugin_Actual.DAEMON_TOOL_ConsoleName, null);
EngineToolsConsole msgConsole = new EngineToolsConsole(
LangUIPlugin_Actual.ENGINE_TOOLS_ConsoleName, LangImages.ENGINE_TOOLS_CONSOLE_ICON.getDescriptor());
ConsolePlugin.getDefault().getConsoleManager().addConsoles(array(msgConsole));
return msgConsole;
}
Expand Down

0 comments on commit c0b5177

Please sign in to comment.