package gr.upatras.ece.wcl.ui.wizard; import java.lang.reflect.InvocationTargetException; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; 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.core.runtime.SubMonitor; import org.eclipse.xtend.type.impl.java.JavaBeansMetaModel; import org.eclipse.xtext.ui.wizard.AbstractPluginProjectCreator; import org.eclipse.xpand2.XpandExecutionContextImpl; import org.eclipse.xpand2.XpandFacade; import org.eclipse.xpand2.output.Outlet; import org.eclipse.xpand2.output.OutputImpl; import com.google.common.collect.Lists; import com.google.common.collect.Sets; public class RadlProjectCreator extends AbstractPluginProjectCreator { private static final String DSL_GENERATOR_PROJECT_NAME = "gr.upatras.ece.wcl.radl.generator;resolution:=optional"; private static final String DSL_RALIB_PROJECT_NAME = "gr.upatras.ece.wcl.radl.externalLibs;resolution:=optional"; // private static final String DSL_TIDE_MODEL = "org.panlab.tide.model;resolution:=optional"; private static final String SRC_ROOT = "src"; private static final String SRC_GEN_ROOT = "src-gen"; private final List<String> SRC_FOLDER_LIST = Collections .unmodifiableList(Arrays.asList(SRC_ROOT, SRC_GEN_ROOT)); @Override protected RadlProjectInfo getProjectInfo() { System.out.println("----->> RadlProjectInfo getProjectInfo() = " + super.getProjectInfo().getProjectName()); return (RadlProjectInfo) super.getProjectInfo(); } // @Override // protected void execute(final IProgressMonitor monitor) // throws CoreException, InvocationTargetException, InterruptedException { // SubMonitor subMonitor = SubMonitor.convert(monitor, // "Creating Resource Adapter project " + getProjectInfo().getProjectName(), // 2); // try { // final IProject project = createProject(subMonitor.newChild(1)); // if (project == null) // return; // initializeProject(project, subMonitor.newChild(1)); // IFile modelFile = getModelFile(project); // setResult(modelFile); // } finally { // subMonitor.done(); // } // } // protected IProject createProject(IProgressMonitor monitor) { // final IProject project = EclipseResourceUtil.createProject( // getProjectInfo().getProjectName(), // getSourceFolders(), // getReferencedProjects(), // Sets.newLinkedHashSet(getRequiredBundles()), // getExportedPackages(), // getImportedPackages(), // getActivatorClassName(), // monitor, // null, // getProjectNatures() // ); // return project; // } protected List<String> getSourceFolders() { return SRC_FOLDER_LIST; } protected List<IProject> getReferencedProjects() { return Collections.<IProject> emptyList(); } protected List<String> getExportedPackages() { return Lists.newArrayList(getProjectInfo().getProjectName()); //return null; } protected List<String> getImportedPackages() { //return Lists.newArrayList("org.apache.log4j", "org.apache.commons.logging"); //org.apache.log4j;bundle-version="1.2.15";resolution:=optional return Lists.newArrayList( "com.bct.ptm.core.ral", "com.bct.ral.interfaces", "com.bct.ral.util", "javax.servlet", "com.bct.ral", "com.uop.ssh", "javax.servlet.http", // "javax.wsdl", // "javax.wsdl.extensions", // "javax.wsdl.factory", // "javax.wsdl.xml", "javax.xml.namespace", "javax.xml.rpc", "javax.xml.rpc.handler", "javax.xml.rpc.handler.soap", "javax.xml.rpc.holders", "javax.xml.soap", "org.apache.axis", "org.apache.axis.client", "org.apache.axis.configuration", "org.apache.axis.description", "org.apache.axis.encoding", // "org.apache.axis.enum", "org.apache.axis.soap", "org.apache.axis.types", "org.apache.axis.utils", "org.apache.axis.wsdl", "org.osgi.framework", "org.osgi.service.http" ); } protected String getActivatorClassName() { return getProjectInfo().getProjectName()+".RAActivator" ; //return null; } protected String[] getProjectNatures() { return new String[] { "org.eclipse.jdt.core.javanature", "org.eclipse.pde.PluginNature", "org.eclipse.xtext.ui.shared.xtextNature" }; } protected String getModelFolderName() { return SRC_ROOT; } @Override protected List<String> getAllFolders() { return SRC_FOLDER_LIST; } protected List<String> getRequiredBundles() { return Lists.newArrayList( // "com.ibm.icu", // "org.eclipse.xtext", // "org.eclipse.xtext.generator", // "org.eclipse.xtend", // "org.eclipse.xtend.typesystem.emf", // "org.eclipse.xpand", // "de.itemis.xtext.antlr", // "org.eclipse.xtend.util.stdlib", "org.apache.log4j;resolution:=optional", "org.apache.commons.logging;resolution:=optional", "org.apache.commons.logging;resolution:=optional", "org.eclipse.equinox.common;resolution:=optional", "org.eclipse.jface.text;resolution:=optional", "org.eclipse.jdt.core;resolution:=optional", DSL_GENERATOR_PROJECT_NAME, // DSL_TIDE_MODEL, DSL_RALIB_PROJECT_NAME ); } 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("Cp1253"); execCtx.registerMetaModel(new JavaBeansMetaModel()); XpandFacade facade = XpandFacade.create(execCtx); facade.evaluate("gr::upatras::ece::wcl::ui::wizard::RadlNewProject::main", getProjectInfo(), getProjectInfo().getProjectName()); project.refreshLocal(IResource.DEPTH_INFINITE, monitor); } // protected void initializeProject(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.setFileEncoding("Cp1253"); // execCtx.registerMetaModel(new JavaBeansMetaModel()); // // XpandFacade facade = XpandFacade.create(execCtx); // facade.evaluate("gr::upatras::ece::wcl::ui::wizard::RadlNewProject::main", getProjectInfo(), getProjectInfo().getProjectName()); // // project.refreshLocal(IResource.DEPTH_INFINITE, monitor); // } // // protected IFile getModelFile(IProject project) throws CoreException { // IFolder srcFolder = project.getFolder(SRC_ROOT); // for (IResource resource : srcFolder.members()) { // if (IResource.FILE == resource.getType() && "radl".equals(resource.getFileExtension())) { // return (IFile) resource; // } // } // return null; // } }