Fixes https://bugs.eclipse.org/bugs/show_bug.cgi?id=250652 (auto-generate .ecore)
diff --git a/plugins/org.eclipse.emf.emfatic.ui/src/org/eclipse/emf/emfatic/ui/editor/EmfaticEditor.java b/plugins/org.eclipse.emf.emfatic.ui/src/org/eclipse/emf/emfatic/ui/editor/EmfaticEditor.java
index 63b041e..118fe44 100644
--- a/plugins/org.eclipse.emf.emfatic.ui/src/org/eclipse/emf/emfatic/ui/editor/EmfaticEditor.java
+++ b/plugins/org.eclipse.emf.emfatic.ui/src/org/eclipse/emf/emfatic/ui/editor/EmfaticEditor.java
@@ -20,8 +20,13 @@
 import java.util.Set;
 
 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.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.emfatic.core.generator.ecore.EcoreGenerator;
 import org.eclipse.emf.emfatic.core.generics.util.OneToManyMap;
 import org.eclipse.emf.emfatic.core.generics.util.OneToOneMap;
 import org.eclipse.emf.emfatic.core.lang.gen.ast.BoundExceptWildcard;
@@ -31,9 +36,11 @@
 import org.eclipse.emf.emfatic.core.lang.gen.ast.Reference;
 import org.eclipse.emf.emfatic.core.lang.gen.ast.TypeWithMulti;
 import org.eclipse.emf.emfatic.core.lang.gen.ast.Wildcard;
+import org.eclipse.emf.emfatic.ui.EmfaticUIPlugin;
 import org.eclipse.emf.emfatic.ui.hyperlinks.EmfaticHyperlinkDetector;
 import org.eclipse.emf.emfatic.ui.outline.EmfaticContentOutlinePage;
 import org.eclipse.emf.emfatic.ui.partition.EmfaticDocumentProvider;
+import org.eclipse.emf.emfatic.ui.preferences.PreferenceConstants;
 import org.eclipse.emf.emfatic.ui.redsquiggles.EmfaticCSTChangeListener;
 import org.eclipse.emf.emfatic.ui.views.TypesView;
 import org.eclipse.gymnast.runtime.core.ast.ASTNode;
@@ -54,6 +61,8 @@
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.swt.custom.StyledText;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IFileEditorInput;
 import org.eclipse.ui.IViewPart;
 import org.eclipse.ui.IViewReference;
 import org.eclipse.ui.IWorkbenchPage;
@@ -84,6 +93,33 @@
 	protected LDTSourceViewerConfiguration createSourceViewerConfiguration() {
 		return new EmfaticSourceViewerConfiguration(this);
 	}
+	
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		super.doSave(progressMonitor);
+		if(EmfaticUIPlugin.getDefault().getPreferenceStore().getBoolean(PreferenceConstants.AUTO_GENERATE_ECORE))
+			generateEcoreFile();
+	}
+
+	/**
+	 * Creates/updates the ecore file when saving the emf file
+	 */
+	private void generateEcoreFile() {
+		IEditorInput input = getEditorInput();
+		if(input instanceof IFileEditorInput) {
+			final IFile file=((IFileEditorInput)input).getFile();
+			// use a job to create/override the ecore file...
+			Job job = new Job("Generating Ecore Model for " + file.getName()) {
+				protected IStatus run(IProgressMonitor monitor) {
+				    new EcoreGenerator().generate(file, monitor);
+					return Status.OK_STATUS;
+				}				
+			};
+			// we might create a new file in the container
+			job.setRule(file.getParent());
+			job.schedule();
+		}
+	}
 
 	@Override
 	protected EmfaticOutlineConfiguration createOutlineConfiguration() {