/** | |
* 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 | |
*/ | |
package org.eclipse.egf.emf.wrapper; | |
import java.util.ArrayList; | |
import org.eclipse.core.runtime.IProgressMonitor; | |
import org.eclipse.core.runtime.SubProgressMonitor; | |
import org.eclipse.egf.core.domain.EgfResourceSet; | |
import org.eclipse.egf.core.producer.InvocationException; | |
import org.eclipse.egf.ftask.producer.context.ITaskProductionContext; | |
import org.eclipse.egf.ftask.producer.invocation.ITaskProduction; | |
import org.eclipse.egf.model.domain.EMFDomain; | |
import org.eclipse.emf.codegen.ecore.generator.Generator; | |
import org.eclipse.emf.codegen.ecore.genmodel.GenModel; | |
import org.eclipse.emf.codegen.ecore.genmodel.util.GenModelUtil; | |
import org.eclipse.emf.common.util.BasicMonitor; | |
import org.eclipse.emf.common.util.Monitor; | |
import org.eclipse.emf.ecore.resource.Resource; | |
public abstract class EgfEmfAbstractTask implements ITaskProduction { | |
private Resource _resource; | |
private GenModel _genModel; | |
public EgfEmfAbstractTask() { | |
super(); | |
} | |
public void preExecute(ITaskProductionContext productionContext, IProgressMonitor monitor) throws InvocationException { | |
_resource = new EgfResourceSet().getResource(productionContext.getInputValue("genModelURI", EMFDomain.class).getUri(), true); //$NON-NLS-1$ | |
} | |
public void doExecute(ITaskProductionContext productionContext, IProgressMonitor monitor) throws InvocationException { | |
// TODO have a look at GeneratorUIUtil | |
// TODO handle diagnostics and status | |
_genModel = (GenModel) _resource.getContents().get(0); | |
_genModel.reconcile(); | |
_genModel.setCanGenerate(true); | |
_genModel.setValidateModel(true); | |
_genModel.diagnose(); | |
_genModel.validate(); | |
Generator generator = GenModelUtil.createGenerator(_genModel); | |
for (String projectType : getProjectTypeList()) { | |
Monitor emfMonitor = BasicMonitor.toMonitor(new SubProgressMonitor(monitor, 100)); | |
generator.generate(_genModel, projectType, emfMonitor); | |
} | |
} | |
public void postExecute(ITaskProductionContext productionContext, IProgressMonitor monitor) throws InvocationException { | |
_resource.unload(); | |
} | |
protected abstract ArrayList<String> getProjectTypeList(); | |
} |