[491495] "Reverse codegen" action fails 

Bug 491495

Change-Id: Ic4fb97361215430a945593f8b08bf404edadcc3a
Signed-off-by: Thomas Guiu <thomas.guiu@soyatec.com>
diff --git a/tools/org.eclipse.egf.emf.pattern.codegen/src/org/eclipse/egf/emf/pattern/codegen/CodegenFcoreUtil.java b/tools/org.eclipse.egf.emf.pattern.codegen/src/org/eclipse/egf/emf/pattern/codegen/CodegenFcoreUtil.java
index b7121aa..b941f8a 100644
--- a/tools/org.eclipse.egf.emf.pattern.codegen/src/org/eclipse/egf/emf/pattern/codegen/CodegenFcoreUtil.java
+++ b/tools/org.eclipse.egf.emf.pattern.codegen/src/org/eclipse/egf/emf/pattern/codegen/CodegenFcoreUtil.java
@@ -1,290 +1,291 @@
-/**

- * <copyright>

- *

- *  Copyright (c) 2009-2010 Thales Corporate Services S.A.S.

- *  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:

- *      Thales Corporate Services S.A.S - initial API and implementation

- * 

- * </copyright>

- */

-

-package org.eclipse.egf.emf.pattern.codegen;

-

-import java.io.IOException;

-import java.util.Collections;

-import java.util.List;

-

-import org.eclipse.core.resources.IFile;

-import org.eclipse.core.resources.IProject;

-import org.eclipse.core.resources.ResourcesPlugin;

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.core.runtime.IProgressMonitor;

-import org.eclipse.egf.core.EGFCorePlugin;

-import org.eclipse.egf.emf.pattern.codegen.CodegenPatternInitializer.CodegenJetPatternInitializer;

-import org.eclipse.egf.emf.pattern.codegen.CodegenPatternInitializer.ContentProvider;

-import org.eclipse.egf.emf.pattern.codegen.jdt.CodegenASTHelper;

-import org.eclipse.egf.emf.pattern.codegen.jet.CodegenJetPatternHelper;

-import org.eclipse.egf.emf.pattern.codegen.model.AbstractInfoComparator;

-import org.eclipse.egf.emf.pattern.codegen.model.GIFPatternInfo;

-import org.eclipse.egf.emf.pattern.codegen.model.JetPatternInfo;

-import org.eclipse.egf.emf.pattern.codegen.model.JetSubPatternInfo;

-import org.eclipse.egf.emf.pattern.codegen.model.PatternInfo;

-import org.eclipse.egf.model.pattern.Pattern;

-import org.eclipse.egf.pattern.extension.TemplateInitializer;

-import org.eclipse.egf.pattern.jet.JetPreferences;

-import org.eclipse.egf.pattern.jet.extension.JetPatternFactory;

-import org.eclipse.emf.common.util.URI;

-import org.eclipse.emf.ecore.resource.Resource;

-import org.eclipse.emf.transaction.RecordingCommand;

-import org.eclipse.emf.transaction.TransactionalEditingDomain;

-

-/**

- * @author Matthieu Helleboid

- * 

- */

-public class CodegenFcoreUtil {

-

-    public static final String N = "\n"; //$NON-NLS-1$

-

-    protected IProject codegenProject;

-

-    protected IProject fcoreProject;

-

-    protected Resource mdpstResource;

-

-    protected Resource emfPatternBaseResource;

-

-    protected Resource emfPatternResource;

-

-    protected CodegenPatternHelper codegenPatternHelper;

-

-    protected CodegenEGFHelper codegenEGFHelper;

-

-    protected CodegenJetPatternHelper codegenJetPatternHelper;

-

-    protected List<PatternInfo> patternInfos;

-

-    protected CodegenVersionHelper codegenVersionHelper;

-

-    protected class ClearCommand extends RecordingCommand {

-

-        protected Exception exception;

-

-        public ClearCommand(TransactionalEditingDomain domain) {

-            super(domain);

-        }

-

-        @Override

-        protected void doExecute() {

-            try {

-                emfPatternResource.getContents().clear();

-            } catch (Exception e) {

-                this.exception = e;

-            }

-        }

-

-    }

-

-    protected class CreateCommand extends RecordingCommand {

-

-        protected Exception exception;

-

-        protected IProgressMonitor monitor;

-

-        public CreateCommand(TransactionalEditingDomain domain, IProgressMonitor monitor) {

-            super(domain);

-            this.monitor = monitor;

-        }

-

-        @Override

-        protected void doExecute() {

-            try {

-                createPatterns(monitor);

-                codegenEGFHelper.createOrchestration(emfPatternBaseResource, mdpstResource, patternInfos, monitor, codegenPatternHelper);

-                codegenEGFHelper.createAllFactoryComponent();

-                codegenEGFHelper.fixPatternElementOrder();

-            } catch (Exception e) {

-                this.exception = e;

-            }

-        }

-    }

-

-    public void createFcoreFile(IFile fcore, String emfCodegenEcoreProjectName, final IProgressMonitor monitor) throws Exception {

-        final IOException[] ioExceptions = new IOException[1];

-

-        fcoreProject = fcore.getProject();

-        codegenProject = ResourcesPlugin.getWorkspace().getRoot().getProject(emfCodegenEcoreProjectName);

-        if (!codegenProject.exists())

-            throw new IllegalStateException("Cannot find project " + emfCodegenEcoreProjectName + " in workspace"); //$NON-NLS-1$ //$NON-NLS-2$

-

-        if (!codegenProject.isOpen())

-            throw new IllegalStateException("Project " + emfCodegenEcoreProjectName + " is closed"); //$NON-NLS-1$ //$NON-NLS-2$

-

-        // Retrieve our editing domain

-        TransactionalEditingDomain editingDomain = TransactionalEditingDomain.Registry.INSTANCE.getEditingDomain(EGFCorePlugin.EDITING_DOMAIN_ID);

-

-        // Feed our URIConverter

-        URI platformPluginURI = URI.createPlatformPluginURI(fcore.getFullPath().toString(), false);

-        URI platformResourceURI = URI.createPlatformResourceURI(fcore.getFullPath().toString(), true);

-        editingDomain.getResourceSet().getURIConverter().getURIMap().put(platformPluginURI, platformResourceURI);

-

-        // Create a resource for this file.

-        if (fcore.exists()) {

-            emfPatternResource = editingDomain.getResourceSet().getResource(platformPluginURI, true);

-            keepPreviousFcoreIdsAndOrder(fcore, editingDomain, platformPluginURI);

-            clearFcore(editingDomain);

-        } else

-            emfPatternResource = editingDomain.getResourceSet().createResource(platformPluginURI);

-

-        URI emfPatternBaseResourceURI = URI.createPlatformPluginURI("/org.eclipse.egf.emf.pattern.base/egf/EMF_Pattern_Base.fcore", true); //$NON-NLS-1$

-        emfPatternBaseResource = editingDomain.getResourceSet().getResource(emfPatternBaseResourceURI, true);

-        URI mdpstResourceURI = URI.createPlatformPluginURI("/org.eclipse.egf.pattern.ftask/egf/Model_driven_pattern_strategy_task.fcore", true); //$NON-NLS-1$

-        mdpstResource = editingDomain.getResourceSet().getResource(mdpstResourceURI, true);

-

-        createCodegenVersionHelper();

-        createCodegenPatternHelper();

-        createCodegenEGFHelper(); //called with the newly created resource

-        createCodegenJetPattenHelper();

-        createPatternInfos(monitor);

-        computePatternInfoNames();

-        computeSubPatternInfo(monitor);

-        computePatternInfoNames();

-        computeMethodsContent(monitor);

-        computePatternInfoDescription();

-        replaceManifestVersion();

-

-        // Add factory component to the contents.

-        CreateCommand createCommand = new CreateCommand(editingDomain, monitor);

-        editingDomain.getCommandStack().execute(createCommand);

-        if (createCommand.exception != null)

-            throw createCommand.exception;

-

-        // save fcore

-        try {

-            editingDomain.runExclusive(new Runnable() {

-

-                public void run() {

-                    try {

-                        emfPatternResource.save(Collections.EMPTY_MAP);

-                    } catch (IOException ioe) {

-                        ioExceptions[0] = ioe;

-                    }

-                }

-            });

-        } catch (InterruptedException ie) {

-            return;

-        }

-

-        // Rethrow exception if any

-        if (ioExceptions[0] != null) {

-            throw ioExceptions[0];

-        }

-

-        return;

-    }

-

-    protected void replaceManifestVersion() throws CoreException, IOException {

-        codegenVersionHelper.replaceManifestVersion();

-    }

-

-    protected void clearFcore(TransactionalEditingDomain editingDomain) throws Exception {

-        ClearCommand clearCommand = new ClearCommand(editingDomain);

-        editingDomain.getCommandStack().execute(clearCommand);

-        if (clearCommand.exception != null)

-            throw clearCommand.exception;

-    }

-

-    protected void keepPreviousFcoreIdsAndOrder(IFile fcore, TransactionalEditingDomain editingDomain, URI platformPluginURI) {

-        // Try to keep xmi ids if fcore exists

-        createCodegenEGFHelper(); //called with old resource

-        codegenEGFHelper.populateXmiIds();

-        codegenEGFHelper.populatePatternOrder();

-    }

-

-    protected void createCodegenPatternHelper() {

-        codegenPatternHelper = new CodegenPatternHelper();

-    }

-

-    protected void createCodegenEGFHelper() {

-        codegenEGFHelper = new CodegenEGFHelper(emfPatternResource, codegenEGFHelper);

-    }

-

-    public void createPatternInfos(IProgressMonitor monitor) throws Exception {

-        patternInfos = new CodegenASTHelper().createPatternInfo(codegenProject, monitor);

-        // sort list to have Model, Edit, Editor, Tests according to PartType

-        // ordinal order

-        Collections.sort(patternInfos, new AbstractInfoComparator());

-    }

-

-    public void computeSubPatternInfo(IProgressMonitor monitor) throws Exception {

-        codegenJetPatternHelper.computeJetSubPatternInfo(patternInfos);

-    }

-

-    public void createCodegenJetPattenHelper() {

-        codegenJetPatternHelper = new CodegenJetPatternHelper(codegenPatternHelper, codegenProject, emfPatternBaseResource, emfPatternResource);

-    }

-

-    public void createCodegenVersionHelper() {

-        codegenVersionHelper = new CodegenVersionHelper(codegenProject, fcoreProject);

-    }

-

-    public void computePatternInfoNames() {

-        new CodegenPatternNameResolver(codegenPatternHelper).computePatternName(patternInfos);

-    }

-

-    public void computePatternInfoDescription() throws Exception {

-        new CodegenPatternDescriptionHandler(codegenProject).computeDescription(patternInfos, codegenVersionHelper);

-    }

-

-    public void computeMethodsContent(IProgressMonitor monitor) {

-        for (PatternInfo patternInfo : patternInfos) {

-            CodegenPatternMethodContentResolver codegenPatternMethodContentResolver = new CodegenPatternMethodContentResolver(codegenProject, codegenPatternHelper, emfPatternBaseResource, codegenJetPatternHelper);

-            if (patternInfo instanceof JetPatternInfo) {

-                JetPatternInfo jetPatternInfo = (JetPatternInfo) patternInfo;

-                codegenPatternMethodContentResolver.computeMethodsContent(jetPatternInfo);

-            } else if (patternInfo instanceof GIFPatternInfo) {

-                GIFPatternInfo gifPatternInfo = (GIFPatternInfo) patternInfo;

-                codegenPatternMethodContentResolver.computeMethodsContent(gifPatternInfo);

-            } else if (patternInfo instanceof JetSubPatternInfo) {

-                JetSubPatternInfo jetSubPatternInfo = (JetSubPatternInfo) patternInfo;

-                codegenPatternMethodContentResolver.computeMethodsContent(jetSubPatternInfo);

-            } else

-                throw new IllegalStateException();

-

-            monitor.worked(10);

-        }

-    }

-

-    public void createPatterns(IProgressMonitor monitor) throws Exception {

-        for (PatternInfo patternInfo : patternInfos) {

-            Pattern pattern = getPatternFactory(patternInfo).createPattern();

-            CodegenEngine codegenEngine = getCodeEngine(patternInfo);

-            ContentProvider contentProvider = createContentProvider(patternInfo);

-            TemplateInitializer initializer = getPatternTemplateInitializer(pattern, patternInfo, codegenEngine, contentProvider);

-            initializer.initContent();

-

-            monitor.worked(10);

-        }

-    }

-

-    public TemplateInitializer getPatternTemplateInitializer(Pattern pattern, PatternInfo patternInfo, CodegenEngine codegenEngine, ContentProvider contentProvider) {

-        return new CodegenJetPatternInitializer(fcoreProject, pattern, codegenEngine, contentProvider);

-    }

-

-    public ContentProvider createContentProvider(PatternInfo patternInfo) {

-        return new ContentProvider(patternInfo, true);

-    }

-

-    public CodegenEngine getCodeEngine(PatternInfo patternInfo) {

-        return new CodegenEngine(org.eclipse.egf.pattern.jet.Activator.getDefault().getPluginID(), fcoreProject, JetPreferences.getTemplateFileExtension());

-    }

-

-    public CodegenPatternFactory getPatternFactory(PatternInfo patternInfo) {

-        return new CodegenPatternFactory(new JetPatternFactory(), emfPatternBaseResource, codegenEGFHelper, patternInfo, codegenPatternHelper);

-    }

-}

+/**
+ * <copyright>
+ *
+ *  Copyright (c) 2009-2016 Thales Corporate Services S.A.S.
+ *  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:
+ *      Thales Corporate Services S.A.S - initial API and implementation
+ * 
+ * </copyright>
+ */
+
+package org.eclipse.egf.emf.pattern.codegen;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.egf.core.EGFCorePlugin;
+import org.eclipse.egf.emf.pattern.codegen.CodegenPatternInitializer.CodegenJetPatternInitializer;
+import org.eclipse.egf.emf.pattern.codegen.CodegenPatternInitializer.ContentProvider;
+import org.eclipse.egf.emf.pattern.codegen.jdt.CodegenASTHelper;
+import org.eclipse.egf.emf.pattern.codegen.jet.CodegenJetPatternHelper;
+import org.eclipse.egf.emf.pattern.codegen.model.AbstractInfoComparator;
+import org.eclipse.egf.emf.pattern.codegen.model.GIFPatternInfo;
+import org.eclipse.egf.emf.pattern.codegen.model.JetPatternInfo;
+import org.eclipse.egf.emf.pattern.codegen.model.JetSubPatternInfo;
+import org.eclipse.egf.emf.pattern.codegen.model.PatternInfo;
+import org.eclipse.egf.model.pattern.Pattern;
+import org.eclipse.egf.pattern.extension.TemplateInitializer;
+import org.eclipse.egf.pattern.jet.JetPreferences;
+import org.eclipse.egf.pattern.jet.extension.JetPatternFactory;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+
+/**
+ * @author Matthieu Helleboid
+ * 
+ */
+public class CodegenFcoreUtil {
+
+	public static final String N = "\n"; //$NON-NLS-1$
+
+	protected IProject codegenProject;
+
+	protected IProject fcoreProject;
+
+	protected Resource mdpstResource;
+
+	protected Resource emfPatternBaseResource;
+
+	protected Resource emfPatternResource;
+
+	protected CodegenPatternHelper codegenPatternHelper;
+
+	protected CodegenEGFHelper codegenEGFHelper;
+
+	protected CodegenJetPatternHelper codegenJetPatternHelper;
+
+	protected List<PatternInfo> patternInfos;
+
+	protected CodegenVersionHelper codegenVersionHelper;
+
+	protected class ClearCommand extends RecordingCommand {
+
+		protected Exception exception;
+
+		public ClearCommand(TransactionalEditingDomain domain) {
+			super(domain);
+		}
+
+		@Override
+		protected void doExecute() {
+			try {
+				emfPatternResource.getContents().clear();
+			} catch (Exception e) {
+				this.exception = e;
+			}
+		}
+
+	}
+
+	protected class CreateCommand extends RecordingCommand {
+
+		protected Exception exception;
+
+		protected IProgressMonitor monitor;
+
+		public CreateCommand(TransactionalEditingDomain domain, IProgressMonitor monitor) {
+			super(domain);
+			this.monitor = monitor;
+		}
+
+		@Override
+		protected void doExecute() {
+			try {
+				createPatterns(monitor);
+				codegenEGFHelper.createOrchestration(emfPatternBaseResource, mdpstResource, patternInfos, monitor, codegenPatternHelper);
+				codegenEGFHelper.createAllFactoryComponent();
+				codegenEGFHelper.fixPatternElementOrder();
+			} catch (Exception e) {
+				this.exception = e;
+			}
+		}
+	}
+
+	public void createFcoreFile(IFile fcore, String emfCodegenEcoreProjectName, final IProgressMonitor monitor) throws Exception {
+		final IOException[] ioExceptions = new IOException[1];
+
+		fcoreProject = fcore.getProject();
+		codegenProject = ResourcesPlugin.getWorkspace().getRoot().getProject(emfCodegenEcoreProjectName);
+		if (!codegenProject.exists())
+			throw new IllegalStateException("Cannot find project " + emfCodegenEcoreProjectName + " in workspace"); //$NON-NLS-1$ //$NON-NLS-2$
+
+		if (!codegenProject.isOpen())
+			throw new IllegalStateException("Project " + emfCodegenEcoreProjectName + " is closed"); //$NON-NLS-1$ //$NON-NLS-2$
+
+		// Retrieve our editing domain
+		TransactionalEditingDomain editingDomain = TransactionalEditingDomain.Registry.INSTANCE.getEditingDomain(EGFCorePlugin.EDITING_DOMAIN_ID);
+
+		// Feed our URIConverter
+		URI platformPluginURI = URI.createPlatformPluginURI(fcore.getFullPath().toString(), false);
+		URI platformResourceURI = URI.createPlatformResourceURI(fcore.getFullPath().toString(), true);
+		editingDomain.getResourceSet().getURIConverter().getURIMap().put(platformPluginURI, platformResourceURI);
+
+		// Create a resource for this file.
+		if (fcore.exists()) {
+			emfPatternResource = editingDomain.getResourceSet().getResource(platformPluginURI, true);
+			keepPreviousFcoreIdsAndOrder(fcore, editingDomain, platformPluginURI);
+			clearFcore(editingDomain);
+		} else
+			emfPatternResource = editingDomain.getResourceSet().createResource(platformPluginURI);
+
+		URI emfPatternBaseResourceURI = URI.createPlatformPluginURI("/org.eclipse.egf.emf.pattern.base/egf/EMF_Pattern_Base.fcore", true); //$NON-NLS-1$
+		emfPatternBaseResource = editingDomain.getResourceSet().getResource(emfPatternBaseResourceURI, true);
+		URI mdpstResourceURI = URI.createPlatformPluginURI("/org.eclipse.egf.pattern.ftask/egf/Model_driven_pattern_strategy_task.fcore", true); //$NON-NLS-1$
+		mdpstResource = editingDomain.getResourceSet().getResource(mdpstResourceURI, true);
+
+		createCodegenVersionHelper();
+		createCodegenPatternHelper();
+		createCodegenEGFHelper(); //called with the newly created resource
+		createCodegenJetPattenHelper();
+		createPatternInfos(monitor);
+		computePatternInfoNames();
+		computeSubPatternInfo(monitor);
+		computePatternInfoNames();
+		computeMethodsContent(monitor);
+		computePatternInfoDescription();
+
+		// Add factory component to the contents.
+		CreateCommand createCommand = new CreateCommand(editingDomain, monitor);
+		editingDomain.getCommandStack().execute(createCommand);
+		if (createCommand.exception != null)
+			throw createCommand.exception;
+
+		// save fcore
+		try {
+			editingDomain.runExclusive(new Runnable() {
+
+				public void run() {
+					try {
+						emfPatternResource.save(Collections.EMPTY_MAP);
+					} catch (IOException ioe) {
+						ioExceptions[0] = ioe;
+					}
+				}
+			});
+		} catch (InterruptedException ie) {
+			return;
+		}
+
+		// Rethrow exception if any
+		if (ioExceptions[0] != null) {
+			throw ioExceptions[0];
+		}
+
+		replaceManifestVersion();
+
+		return;
+	}
+
+	protected void replaceManifestVersion() throws CoreException, IOException {
+		codegenVersionHelper.replaceManifestVersion();
+	}
+
+	protected void clearFcore(TransactionalEditingDomain editingDomain) throws Exception {
+		ClearCommand clearCommand = new ClearCommand(editingDomain);
+		editingDomain.getCommandStack().execute(clearCommand);
+		if (clearCommand.exception != null)
+			throw clearCommand.exception;
+	}
+
+	protected void keepPreviousFcoreIdsAndOrder(IFile fcore, TransactionalEditingDomain editingDomain, URI platformPluginURI) {
+		// Try to keep xmi ids if fcore exists
+		createCodegenEGFHelper(); //called with old resource
+		codegenEGFHelper.populateXmiIds();
+		codegenEGFHelper.populatePatternOrder();
+	}
+
+	protected void createCodegenPatternHelper() {
+		codegenPatternHelper = new CodegenPatternHelper();
+	}
+
+	protected void createCodegenEGFHelper() {
+		codegenEGFHelper = new CodegenEGFHelper(emfPatternResource, codegenEGFHelper);
+	}
+
+	public void createPatternInfos(IProgressMonitor monitor) throws Exception {
+		patternInfos = new CodegenASTHelper().createPatternInfo(codegenProject, monitor);
+		// sort list to have Model, Edit, Editor, Tests according to PartType
+		// ordinal order
+		Collections.sort(patternInfos, new AbstractInfoComparator());
+	}
+
+	public void computeSubPatternInfo(IProgressMonitor monitor) throws Exception {
+		codegenJetPatternHelper.computeJetSubPatternInfo(patternInfos);
+	}
+
+	public void createCodegenJetPattenHelper() {
+		codegenJetPatternHelper = new CodegenJetPatternHelper(codegenPatternHelper, codegenProject, emfPatternBaseResource, emfPatternResource);
+	}
+
+	public void createCodegenVersionHelper() {
+		codegenVersionHelper = new CodegenVersionHelper(codegenProject, fcoreProject);
+	}
+
+	public void computePatternInfoNames() {
+		new CodegenPatternNameResolver(codegenPatternHelper).computePatternName(patternInfos);
+	}
+
+	public void computePatternInfoDescription() throws Exception {
+		new CodegenPatternDescriptionHandler(codegenProject).computeDescription(patternInfos, codegenVersionHelper);
+	}
+
+	public void computeMethodsContent(IProgressMonitor monitor) {
+		for (PatternInfo patternInfo : patternInfos) {
+			CodegenPatternMethodContentResolver codegenPatternMethodContentResolver = new CodegenPatternMethodContentResolver(codegenProject, codegenPatternHelper, emfPatternBaseResource, codegenJetPatternHelper);
+			if (patternInfo instanceof JetPatternInfo) {
+				JetPatternInfo jetPatternInfo = (JetPatternInfo) patternInfo;
+				codegenPatternMethodContentResolver.computeMethodsContent(jetPatternInfo);
+			} else if (patternInfo instanceof GIFPatternInfo) {
+				GIFPatternInfo gifPatternInfo = (GIFPatternInfo) patternInfo;
+				codegenPatternMethodContentResolver.computeMethodsContent(gifPatternInfo);
+			} else if (patternInfo instanceof JetSubPatternInfo) {
+				JetSubPatternInfo jetSubPatternInfo = (JetSubPatternInfo) patternInfo;
+				codegenPatternMethodContentResolver.computeMethodsContent(jetSubPatternInfo);
+			} else
+				throw new IllegalStateException();
+
+			monitor.worked(10);
+		}
+	}
+
+	public void createPatterns(IProgressMonitor monitor) throws Exception {
+		for (PatternInfo patternInfo : patternInfos) {
+			Pattern pattern = getPatternFactory(patternInfo).createPattern();
+			CodegenEngine codegenEngine = getCodeEngine(patternInfo);
+			ContentProvider contentProvider = createContentProvider(patternInfo);
+			TemplateInitializer initializer = getPatternTemplateInitializer(pattern, patternInfo, codegenEngine, contentProvider);
+			initializer.initContent();
+
+			monitor.worked(10);
+		}
+	}
+
+	public TemplateInitializer getPatternTemplateInitializer(Pattern pattern, PatternInfo patternInfo, CodegenEngine codegenEngine, ContentProvider contentProvider) {
+		return new CodegenJetPatternInitializer(fcoreProject, pattern, codegenEngine, contentProvider);
+	}
+
+	public ContentProvider createContentProvider(PatternInfo patternInfo) {
+		return new ContentProvider(patternInfo, true);
+	}
+
+	public CodegenEngine getCodeEngine(PatternInfo patternInfo) {
+		return new CodegenEngine(org.eclipse.egf.pattern.jet.Activator.getDefault().getPluginID(), fcoreProject, JetPreferences.getTemplateFileExtension());
+	}
+
+	public CodegenPatternFactory getPatternFactory(PatternInfo patternInfo) {
+		return new CodegenPatternFactory(new JetPatternFactory(), emfPatternBaseResource, codegenEGFHelper, patternInfo, codegenPatternHelper);
+	}
+}