/*******************************************************************************
* Copyright (c) 2008, 2012 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.eef.codegen.ui.generators.common;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.emf.common.util.BasicMonitor;
import org.eclipse.emf.eef.EEFGen.EEFGenModel;
import org.eclipse.emf.eef.codegen.EEFCodegenPlugin;
import org.eclipse.emf.eef.codegen.core.launcher.AbstractPropertiesGeneratorLauncher;
import org.eclipse.emf.eef.codegen.core.services.PropertiesGeneratorLaunchersServices;
/**
* Main entry point of the 'Codegen' generation module.
*
* @author <a href="mailto:goulwen.lefur@obeo.fr">Goulwen Le Fur</a>
*/
public class GenerateAll {
/**
* The output folder.
*/
private File targetFolder;
/**
* The Generation PSM
*/
private EEFGenModel eefGenModel;
/**
* A set containing the target folder for generation
*/
private Set<IContainer> generationTargets;
/**
* Constructor.
*
* @param modelURI
* is the URI of the model.
* @param targetFolder
* is the output folder
* @throws IOException
* Thrown when the output cannot be saved.
*/
public GenerateAll(IContainer targetFolder, EEFGenModel eefGenModel) {
if (targetFolder.getLocation() != null) {
this.targetFolder = targetFolder.getLocation().toFile();
} else {
EEFCodegenPlugin.getDefault().logWarning(
new IllegalArgumentException("TargetFolder must specify a correct location"));
}
this.eefGenModel = eefGenModel;
this.generationTargets = new HashSet<IContainer>();
this.generationTargets.add(targetFolder);
}
/**
* @return the generationTargets
*/
public Set<IContainer> getGenerationTargets() {
return generationTargets;
}
/**
* Launches the generation.
*
* @throws IOException
* Thrown when the output cannot be saved.
*/
public void doGenerate(IProgressMonitor monitor) throws IOException {
if (targetFolder == null) {
return;
}
if (!targetFolder.exists()) {
monitor.subTask("Creating target folder");
targetFolder.mkdirs();
monitor.worked(1);
}
List<Object> arguments = new ArrayList<Object>();
monitor.subTask("Loading...");
org.eclipse.emf.eef.codegen.launcher.EEFLauncher launcher = new org.eclipse.emf.eef.codegen.launcher.EEFLauncher(
eefGenModel, targetFolder, arguments);
monitor.worked(1);
monitor.subTask("Generating EEF code using " + eefGenModel.eResource().getURI().lastSegment() + "...");
launcher.doGenerate(BasicMonitor.toMonitor(new SubProgressMonitor(monitor, IProgressMonitor.UNKNOWN)));
monitor.worked(1);
for (AbstractPropertiesGeneratorLauncher abstractPropertiesGeneratorLauncher : PropertiesGeneratorLaunchersServices
.getInstance().getlaunchers()) {
abstractPropertiesGeneratorLauncher.doGenerate(eefGenModel, targetFolder, monitor);
if (!abstractPropertiesGeneratorLauncher.getTargetContainer().isEmpty())
generationTargets.addAll(abstractPropertiesGeneratorLauncher.getTargetContainer());
}
}
}