Ver código fonte

Run SGen Generator as Job

holger.willebrandt@gmail.com 14 anos atrás
pai
commit
b35be3f89e

+ 29 - 13
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/impl/AbstractSExecModelGenerator.java

@@ -61,9 +61,27 @@ public abstract class AbstractSExecModelGenerator implements ISCTGenerator {
 
 
 	private static final String SEXEC_FILE_EXTENSION = "sexec";
 	private static final String SEXEC_FILE_EXTENSION = "sexec";
 	private static final String SCT_GENERATOR_CONSOLE = "SCT Generator Console";
 	private static final String SCT_GENERATOR_CONSOLE = "SCT Generator Console";
+	private final MessageConsoleStream info;
+	private final MessageConsoleStream error;
+
 
 
 	protected abstract void generate(ExecutionFlow flow, GeneratorEntry entry);
 	protected abstract void generate(ExecutionFlow flow, GeneratorEntry entry);
 
 
+	public AbstractSExecModelGenerator() {
+		super();
+		info = getConsole().newMessageStream();
+		error = getConsole().newMessageStream();
+		error.setColor(Display.getDefault().getSystemColor(SWT.COLOR_RED));
+		error.setActivateOnWrite(true);
+	}
+
+	@Override
+	protected void finalize() throws Throwable {
+		info.close();
+		error.close();
+		super.finalize();
+	}
+
 	public final void generate(GeneratorEntry entry) {
 	public final void generate(GeneratorEntry entry) {
 		writeToConsole(String.format("Generating Statechart %s ...", entry
 		writeToConsole(String.format("Generating Statechart %s ...", entry
 				.getStatechart().getName()));
 				.getStatechart().getName()));
@@ -103,6 +121,17 @@ public abstract class AbstractSExecModelGenerator implements ISCTGenerator {
 		return flow;
 		return flow;
 	}
 	}
 
 
+	protected final void writeToConsole(Throwable t) {
+		PrintWriter printWriter = new PrintWriter(error);
+		t.printStackTrace(printWriter);
+		printWriter.flush();
+		printWriter.close();
+	}
+
+	protected final void writeToConsole(String line) {
+		info.println(line);
+	}
+
 	private MessageConsole getConsole() {
 	private MessageConsole getConsole() {
 		ConsolePlugin plugin = ConsolePlugin.getDefault();
 		ConsolePlugin plugin = ConsolePlugin.getDefault();
 		IConsoleManager conMan = plugin.getConsoleManager();
 		IConsoleManager conMan = plugin.getConsoleManager();
@@ -118,19 +147,6 @@ public abstract class AbstractSExecModelGenerator implements ISCTGenerator {
 		return myConsole;
 		return myConsole;
 	}
 	}
 
 
-	protected final void writeToConsole(Throwable t) {
-		MessageConsoleStream out = getConsole().newMessageStream();
-		out.setColor(Display.getDefault().getSystemColor(SWT.COLOR_RED));
-		PrintWriter printWriter = new PrintWriter(out);
-		t.printStackTrace(printWriter);
-		printWriter.flush();
-		printWriter.close();
-	}
-
-	protected final void writeToConsole(String line) {
-		getConsole().newMessageStream().println(line);
-	}
-
 	protected final void refreshTargetProject(GeneratorEntry entry) {
 	protected final void refreshTargetProject(GeneratorEntry entry) {
 		try {
 		try {
 			IProject project = getTargetProject(entry);
 			IProject project = getTargetProject(entry);

+ 20 - 5
plugins/org.yakindu.sct.generator.ui/src/org/yakindu/sct/generator/ui/action/GenerateModelAction.java

@@ -14,6 +14,10 @@ import java.io.IOException;
 import java.util.Collections;
 import java.util.Collections;
 
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.Resource;
@@ -50,11 +54,22 @@ public class GenerateModelAction implements IObjectActionDelegate {
 		String generatorId = model.getGeneratorId();
 		String generatorId = model.getGeneratorId();
 		GeneratorDescriptor description = GeneratorExtensions
 		GeneratorDescriptor description = GeneratorExtensions
 				.getGeneratorDescriptorForId(generatorId);
 				.getGeneratorDescriptorForId(generatorId);
-		ISCTGenerator generator = description.createGenerator();
-		EList<GeneratorEntry> entries = model.getEntries();
-		for (GeneratorEntry generatorEntry : entries) {
-			generator.generate(generatorEntry);
-		}
+		final ISCTGenerator generator = description.createGenerator();
+		final EList<GeneratorEntry> entries = model.getEntries();
+		Job generatorJob = new Job("Execute SCT Genmodel " + file.getName()) {
+
+			@Override
+			protected IStatus run(IProgressMonitor monitor) {
+				for (GeneratorEntry generatorEntry : entries) {
+					if (monitor.isCanceled()) {
+						break;
+					}
+					generator.generate(generatorEntry);
+				}
+				return Status.OK_STATUS;
+			}
+		};
+		generatorJob.schedule();
 
 
 	}
 	}