package blade.migrate.core; import aQute.lib.io.IO; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; public class WorkspaceHelper { private void addNaturesToProject( IProject proj, String[] natureIds, IProgressMonitor monitor ) throws CoreException { IProjectDescription description = proj.getDescription(); String[] prevNatures = description.getNatureIds(); String[] newNatures = new String[prevNatures.length + natureIds.length]; System.arraycopy( prevNatures, 0, newNatures, 0, prevNatures.length ); for( int i = prevNatures.length; i < newNatures.length; i++ ) { newNatures[i] = natureIds[i - prevNatures.length]; } description.setNatureIds( newNatures ); proj.setDescription( description, monitor ); } public IFile createIFile(String projectName, File file) throws CoreException, IOException { IJavaProject project = getJavaProject(projectName); IFile projectFile = project.getProject().getFile(file.getName()); final IProgressMonitor npm = new NullProgressMonitor(); if (projectFile.exists()) { projectFile.delete(IFile.FORCE, npm); } projectFile.create(new ByteArrayInputStream(IO.read(file)), IFile.FORCE, npm); return projectFile; } private IJavaProject getJavaProject(String projectName) throws CoreException { IProject javaProject = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); IProgressMonitor monitor = new NullProgressMonitor(); if (!javaProject.exists()) { IProjectDescription description = ResourcesPlugin.getWorkspace().newProjectDescription(projectName); javaProject.create(monitor); javaProject.open(monitor); javaProject.setDescription(description, monitor); } javaProject.open(monitor); addNaturesToProject(javaProject, new String[] { JavaCore.NATURE_ID }, monitor); return JavaCore.create(javaProject); } }