/*******************************************************************************
* Copyright (c) 2011, 2014 Cristiano Gavião (Brazil), Loetz KG (Heidelberg).
* 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:
* Cristiano Gavião - initial API and implementation
*******************************************************************************/
package org.lunifera.dsl.eclipse.ui.wizards;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.xpand2.XpandExecutionContextImpl;
import org.eclipse.xpand2.XpandFacade;
import org.eclipse.xpand2.output.Outlet;
import org.eclipse.xpand2.output.OutputImpl;
import org.eclipse.xtend.type.impl.java.JavaBeansMetaModel;
import org.eclipse.xtext.ui.util.PluginProjectFactory;
import org.eclipse.xtext.ui.util.ProjectFactory;
import org.eclipse.xtext.ui.wizard.AbstractPluginProjectCreator;
import org.lunifera.dsl.eclipse.ui.utils.LuniferaBundleProjectFactory;
import com.google.common.collect.ImmutableList;
import com.google.inject.Inject;
import com.google.inject.Provider;
public class LuniferaCommonProjectCreator extends AbstractPluginProjectCreator {
private static final String SRC_ROOT = "src";
private static final String SRC_GEN_ROOT = "src-gen";
private final List<String> SRC_FOLDER_LIST = ImmutableList.of(SRC_ROOT,
SRC_GEN_ROOT);
@Inject
private Provider<LuniferaBundleProjectFactory> projectFactoryProvider;
@Override
protected ProjectFactory configureProjectFactory(ProjectFactory factory) {
LuniferaBundleProjectFactory result = (LuniferaBundleProjectFactory) super
.configureProjectFactory(factory);
result.addRequiredBundles(getRequiredBundles());
result.addExportedPackages(getExportedPackages());
result.addImportedPackages(getImportedPackages());
result.setActivatorClassName(getActivatorClassName());
return result;
}
@Override
protected PluginProjectFactory createProjectFactory() {
return projectFactoryProvider.get();
}
protected void enhanceProject(final IProject project,
final IProgressMonitor monitor) throws CoreException {
OutputImpl output = new OutputImpl();
output.addOutlet(new Outlet(false, getEncoding(), null, true, project
.getLocation().makeAbsolute().toOSString()));
XpandExecutionContextImpl execCtx = new XpandExecutionContextImpl(
output, null);
execCtx.getResourceManager().setFileEncoding("UTF-8");
execCtx.registerMetaModel(new JavaBeansMetaModel());
XpandFacade facade = XpandFacade.create(execCtx);
facade.evaluate(
"org::lunifera::eclipse::ui::wizards::LuniferaNewProject::main",
getProjectInfo());
project.refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
@Override
protected List<String> getAllFolders() {
return SRC_FOLDER_LIST;
}
protected String getModelFolderName() {
return SRC_ROOT;
}
@Override
protected LuniferaMainProjectInfo getProjectInfo() {
return (LuniferaMainProjectInfo) super.getProjectInfo();
}
}