/******************************************************************************* * Copyright (c) 2016 Obeo. * 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: * Obeo - initial API and implementation *******************************************************************************/ package org.eclipse.emf.ecoretools.design.ui.action; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import org.eclipse.emf.codegen.ecore.CodeGenEcorePlugin; import org.eclipse.emf.codegen.ecore.generator.Generator; import org.eclipse.emf.codegen.ecore.genmodel.GenModel; import org.eclipse.emf.codegen.ecore.genmodel.generator.GenBaseGeneratorAdapter; import org.eclipse.emf.codegen.ecore.genmodel.presentation.GeneratorUIUtil; import org.eclipse.emf.codegen.ecore.genmodel.provider.GenModelEditPlugin; import org.eclipse.emf.ecore.EObject; import org.eclipse.sirius.tools.api.ui.IExternalJavaAction; import org.eclipse.sirius.viewpoint.DSemanticDecorator; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.progress.IProgressService; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; public class GenerateAllAction implements IExternalJavaAction { /** * The action expects a single EClass as input. */ public boolean canExecute(Collection<? extends EObject> selections) { return true; } public void execute(Collection<? extends EObject> selections, Map<String, Object> parameters) { Object genmodelsParamValue = parameters.get("genmodels"); String scope = (String) parameters.get("scope"); if (scope == null) { scope = "model, edit, editor, tests"; } if (genmodelsParamValue != null && genmodelsParamValue instanceof Collection) { launchEMFGeneration(genmodelsParamValue, scope); } } private void launchEMFGeneration(Object genmodelsParamValue, final String scope) { final List<GenModel> gens = Lists .newArrayList(Iterables.filter((Collection<?>) genmodelsParamValue, GenModel.class)); if (gens.size() > 0) { Display.getDefault().syncExec(new Runnable() { public void run() { IEditorPart activeEditorPart = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() .getActiveEditor(); GeneratorUIUtil.GeneratorOperation operation = new GeneratorUIUtil.GeneratorOperation( activeEditorPart.getSite().getShell()); for (GenModel genModel : gens) { genModel.reconcile(); genModel.setCanGenerate(true); Generator generator = new Generator(); generator.setInput(genModel); if (scope.contains("model")) { operation.addGeneratorAndArguments(generator, genModel, GenBaseGeneratorAdapter.MODEL_PROJECT_TYPE, CodeGenEcorePlugin.INSTANCE.getString("_UI_ModelProject_name")); } if (scope.contains("edit")) { operation.addGeneratorAndArguments(generator, genModel, GenBaseGeneratorAdapter.EDIT_PROJECT_TYPE, CodeGenEcorePlugin.INSTANCE.getString("_UI_EditProject_name")); } if (scope.contains("editor")) { operation.addGeneratorAndArguments(generator, genModel, GenBaseGeneratorAdapter.EDITOR_PROJECT_TYPE, CodeGenEcorePlugin.INSTANCE.getString("_UI_EditorProject_name")); } if (scope.contains("tests")) { operation.addGeneratorAndArguments(generator, genModel, GenBaseGeneratorAdapter.TESTS_PROJECT_TYPE, CodeGenEcorePlugin.INSTANCE.getString("_UI_TestsProject_name")); } } try { IWorkbench wb = PlatformUI.getWorkbench(); IProgressService ps = wb.getProgressService(); ps.busyCursorWhile(operation); } catch (Exception exception) { // Something went wrong that shouldn't. // GenModelEditPlugin.INSTANCE.log(exception); } } }); } } }