package org.easyb.eclipse.test.tools; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.eclipse.core.resources.ICommand; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.IncrementalProjectBuilder; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.JavaCore; /** * Tools to help with setting up of project * @author whiteda * */ public class ProjectTool { private ProjectTool(){ } public static String getStoryText(){ return "scenario \"a test\"{}"; } public static IPackageFragment createPackage(IJavaProject proj,String pkgName)throws Exception{ IPackageFragmentRoot[] pckgs = proj.getPackageFragmentRoots(); return pckgs[0].createPackageFragment(pkgName,true,new NullProgressMonitor()); } public static IFile createBehaviourInPackage(IPackageFragment pkgFrag,String fileName,String text) throws Exception{ IFolder folder = (IFolder)pkgFrag.getResource(); IFile file = folder.getFile(fileName); writeToFile(file,text); return file; } //see http://dev.eclipse.org/newslists/news.eclipse.platform/msg75802.html public static IJavaProject setupJavaProject(String projectName)throws Exception{ IWorkspace workspace = ResourcesPlugin.getWorkspace(); IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); IProject project = root.getProject(projectName); if(project.exists()){ // Clean up any old project information. project.delete(true, true,null); } final IJavaProject javaProject = JavaCore.create(project); final IProjectDescription projectDescription = workspace.newProjectDescription(projectName); projectDescription.setLocation(null); project.create(projectDescription,null); final List<IClasspathEntry> classpathEntries = new ArrayList<IClasspathEntry>(); /*if (referencedProjects.size() != 0) { projectDescription.setReferencedProjects(referencedProjects .toArray(new IProject[referencedProjects.size()])); for (final IProject referencedProject : referencedProjects) { final IClasspathEntry referencedProjectClasspathEntry = JavaCore.newProjectEntry(referencedProject .getFullPath()); classpathEntries.add(referencedProjectClasspathEntry); } }*/ projectDescription.setNatureIds(new String[] { JavaCore.NATURE_ID, "org.eclipse.pde.PluginNature" }); final ICommand java = projectDescription.newCommand(); java.setBuilderName(JavaCore.BUILDER_ID); final ICommand manifest = projectDescription.newCommand(); manifest.setBuilderName("org.eclipse.pde.ManifestBuilder"); final ICommand schema = projectDescription.newCommand(); schema.setBuilderName("org.eclipse.pde.SchemaBuilder"); projectDescription.setBuildSpec(new ICommand[] { java, manifest, schema }); project.open(null); project.setDescription(projectDescription,null); List<String> srcFolders = new ArrayList<String>(1); srcFolders.add("src"); createSrcFolders(project,srcFolders, classpathEntries); classpathEntries.add(JavaCore.newContainerEntry(new Path( "org.eclipse.jdt.launching.JRE_CONTAINER"))); classpathEntries.add(JavaCore.newContainerEntry(new Path( "org.eclipse.pde.core.requiredPlugins"))); //Takes ages //javaProject.setRawClasspath(classpathEntries // .toArray(new IClasspathEntry[classpathEntries.size()]),null); javaProject.setOutputLocation( new Path("/" + projectName + "/bin"),null); workspace.build(IncrementalProjectBuilder.FULL_BUILD, null); return javaProject; } public static void createSrcFolders(IProject project,List<String> srcFolders, List<IClasspathEntry > classpathEntries)throws Exception{ Collections.reverse(srcFolders); for (final String src : srcFolders) { final IFolder srcContainer = project.getFolder(src); if (!srcContainer.exists()) { srcContainer.create(false, true,null); } final IClasspathEntry srcClasspathEntry = JavaCore.newSourceEntry(srcContainer.getFullPath()); classpathEntries.add(srcClasspathEntry); } } public static IFile createBehaviourFile(IJavaProject project,String fileName,String text)throws Exception{ IFile file = project.getProject().getFile(fileName); writeToFile(file,text); return file; } public static IFile writeToFile(IFile file,String text)throws Exception{ if(!file.exists()){ InputStream stream = new ByteArrayInputStream(text.getBytes()); file.create(stream,IResource.NONE,null); } return file; } public static IFile setupJavaProjectAndBehaviourFile(String fileName,String project,String text)throws Exception{ IJavaProject rootProj = setupJavaProject(project); return createBehaviourFile(rootProj,fileName,text); } }