/*******************************************************************************
* Copyright (c) 2010 Martin Schnabel <mb0@mb0.org>.
* 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
******************************************************************************/
package org.axdt.as3.ui.wizards;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.axdt.core.AxdtCore;
import org.axdt.core.ui.preferences.CorePreferences;
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.internal.xtend.type.baseimpl.BuiltinMetaModel;
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.xtext.ui.XtextProjectHelper;
import org.eclipse.xtext.ui.util.ProjectFactory;
import org.eclipse.xtext.ui.wizard.AbstractProjectCreator;
import com.google.inject.Inject;
import com.google.inject.Injector;
public class As3ProjectCreator extends AbstractProjectCreator {
@Inject
protected CorePreferences corePreference;
@Inject
protected Injector injector;
protected List<String> getAllFolders() {
String string = corePreference.getStore().getString(CorePreferences.SOURCE_PATHS);
return Arrays.asList(string.split("[,; ]"));
}
@Override
protected ProjectFactory createProjectFactory() {
return injector.getInstance(ProjectFactory.class);
}
protected String getModelFolderName() {
String string = corePreference.getStore().getString(CorePreferences.SOURCE_PATHS);
String[] split = string.split("[,; ]");
return split != null && split.length > 0 ?
split[0] : "";
}
@Override
protected String getCreateModelProjectMessage() {
return "Creating as3 project " + getProjectInfo().getProjectName();
}
@Override
protected List<IProject> getReferencedProjects() {
// TODO enable referenced projects
return Collections.emptyList();
}
@Override
protected String[] getBuilders() {
return new String[] { AxdtCore.BUILDER_ID };
}
@Override
protected String[] getProjectNatures() {
return new String[] { AxdtCore.NATURE_ID, XtextProjectHelper.NATURE_ID };
}
@Override
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 BuiltinMetaModel(null));
XpandFacade facade = XpandFacade.create(execCtx);
facade.evaluate("org::axdt::as3::ui::wizards::NewAs3Project::main",
getProjectInfo());
project.refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
}