Browse Source

Execute Generators as a Job

Andreas Mülder 13 years ago
parent
commit
f43bfa20fa

+ 18 - 9
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/action/GenerateModelAction.java

@@ -10,16 +10,17 @@
  */
 package org.yakindu.sct.generator.genmodel.ui.action;
 
-import java.io.IOException;
-import java.util.Collections;
 import java.util.List;
 
 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.URI;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.StructuredSelection;
@@ -34,7 +35,6 @@ import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDe
 import org.yakindu.sct.model.sgen.FeatureParameterValue;
 import org.yakindu.sct.model.sgen.GeneratorEntry;
 import org.yakindu.sct.model.sgen.GeneratorModel;
-import org.yakindu.sct.model.sgen.SGenPackage;
 import org.yakindu.sct.model.sgen.impl.FeatureParameterValueImpl;
 
 import com.google.inject.Inject;
@@ -72,11 +72,20 @@ public class GenerateModelAction implements IObjectActionDelegate {
 		String generatorId = model.getGeneratorId();
 		GeneratorDescriptor description = GeneratorExtensions
 				.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()) {
+			protected IStatus run(IProgressMonitor monitor) {
+				for (GeneratorEntry generatorEntry : entries) {
+					if (monitor.isCanceled()) {
+						break;
+					}
+					generator.generate(generatorEntry);
+				}
+				return Status.OK_STATUS;
+			}
+		};
+		generatorJob.schedule();
 
 	}