diff options
Diffstat (limited to 'tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/JavaProjectUtil.java')
-rw-r--r-- | tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/JavaProjectUtil.java | 259 |
1 files changed, 0 insertions, 259 deletions
diff --git a/tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/JavaProjectUtil.java b/tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/JavaProjectUtil.java deleted file mode 100644 index d7e041b7..00000000 --- a/tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/JavaProjectUtil.java +++ /dev/null @@ -1,259 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2001, 2006 IBM Corporation and others. - * 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: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jem.tests; -/* - * $RCSfile: JavaProjectUtil.java,v $ - * $Revision: 1.16 $ $Date: 2007/04/01 03:28:18 $ - */ - - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; - -import org.eclipse.ant.core.AntRunner; -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; -import org.eclipse.core.runtime.jobs.IJobManager; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.jdt.core.*; -import org.osgi.framework.Bundle; - -import org.eclipse.jem.internal.proxy.core.ProxyPlugin; - -/** - * The purpose of this class is to be a utility for manipulating/populating java projects. - * 1) Get a java project as one of the resources. - * 2) Create a project from a directory. The directory needs to be all set up to be a project already. Typically - * from an unzip. - */ - -public class JavaProjectUtil { - public static IProject getProject(String projectName) throws CoreException { - IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); - return (project.exists()) ? project: null; - } - - - /** - * Create a project from the path. The path will be a complete project, including a .project file. - * - * @param workspace - * @param projectPath Needs to be a complete path to a directory within the file system. The directory must be a complete project including .project file. - * @param pm - * @return The new IProject. - * @throws CoreException - */ - public static IProject createProject(IWorkspace workspace, IPath projectPath, final IProgressMonitor pm) throws CoreException { - IProjectDescription newDescription = null; - - File projectFile = new File(projectPath.toFile(), IProjectDescription.DESCRIPTION_FILE_NAME); - if (!projectFile.exists()) - throw new CoreException(new Status(IStatus.ERROR, JavaTestsPlugin.getPlugin().getBundle().getSymbolicName(), 0, "Project file not in project directory. Couldn't create project \""+projectPath.toString()+"\"", null)); - - - IPath projectFilePath = new Path(projectFile.getPath()); - newDescription = workspace.loadProjectDescription(projectFilePath); - - // create the new project operation - final IProject project = workspace.getRoot().getProject(newDescription.getName()); - final IProjectDescription description = newDescription; - ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() { - public void run(IProgressMonitor monitor) throws CoreException { - project.create(description, new SubProgressMonitor(monitor, 1000)); - project.open(new SubProgressMonitor(monitor, 1000)); - } - }, project, 0, pm); - - return project; - } - - /** - * Create an empty project in the workspace root. If there is a .project file already there, then use it. - * @param workspace The workspace to create projec in. - * @param projectPath The name of the project. It should only be one segment long, and that will be the name of the project. - * @param pm - * @return The project. - * @throws CoreException - * - * @since 1.0.0 - */ - public static IProject createEmptyJavaProject(IWorkspace workspace, IPath projectPath, final IProgressMonitor pm) throws CoreException { - projectPath = workspace.getRoot().getFullPath().append(projectPath); // Put it into the workspace relative. - File projectFile = new File(projectPath.toFile(), IProjectDescription.DESCRIPTION_FILE_NAME); - if (projectFile.exists()) - return createProject(workspace, projectPath, pm); // Let it be created normally. - - // create the new project operation - final IProject project = workspace.getRoot().getProject(projectPath.lastSegment()); - ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() { - public void run(IProgressMonitor monitor) throws CoreException { - project.create(new SubProgressMonitor(monitor, 1000)); - project.open(new SubProgressMonitor(monitor, 1000)); - IProjectDescription description = project.getDescription(); - String[] natureids = description.getNatureIds(); - for (int i = 0; i < natureids.length; i++) { - if (natureids[i].equals("org.eclipse.jdt.core.javanature")) - return; // Already has nature. - } - String[] newNatureids = new String[natureids.length+1]; - newNatureids[0] = "org.eclipse.jdt.core.javanature"; - System.arraycopy(natureids, 0, newNatureids, 1, natureids.length); - description.setNatureIds(newNatureids); - project.setDescription(description, new SubProgressMonitor(monitor, 1000)); - // Need to put out a classfile too. We need a src and a bin directory for the classpath. - IFolder sf = project.getFolder("src"); - sf.create(true, true, new SubProgressMonitor(monitor, 1000)); - IFolder bf = project.getFolder("bin"); - bf.create(true, true, new SubProgressMonitor(monitor, 1000)); - IFile cp = project.getFile(".classpath"); - try { - cp.create(getClass().getResource(".classpath").openStream(), true, new SubProgressMonitor(monitor, 1000)); - } catch (IOException e) { - e.printStackTrace(); - } - } - }, workspace.getRoot(), 0, pm); - - return project; - } - - /** - * Delete a project and all files from the project. - * @param project - * @throws CoreException - */ - public static void deleteProject(IProject project) throws CoreException { - if (project != null) { - project.delete(true, false, null); // Get rid of the project and the files themselves. - } - } - - - /** - * This sets the workspace autobuild to the specified state. It returns what - * the state was previously so that it can be later restored. - * @param autoBuild - * @return Previous autoBuild state. - * @throws CoreException - */ - public static boolean setAutoBuild(boolean autoBuild) throws CoreException { - IWorkspace workspace = ResourcesPlugin.getWorkspace(); - if (autoBuild != workspace.isAutoBuilding()) { - IWorkspaceDescription description = workspace.getDescription(); - description.setAutoBuilding(true); - workspace.setDescription(description); - return !autoBuild; // It wasn't this state. - } else - return autoBuild; // It already is this state. - } - - /** - * Import the given projects from the given zipfiles into the current workspace root. - * @param projectNames The array of project names to create - * @param zipFiles The zipfiles containing each project. It must be a complete project. - * The first directory in the zip must be the project directory. - * It must be the same name as from projectNames. Also it must include a .project file - * in that directory. - * @return The array of IProjects that were created. - * @throws CoreException - */ - public static IProject[] importProjects(final String[] projectNames, final String[] zipFiles) throws CoreException { - // Delete/create/populate within a runnable so that the build is done only after all changes have been made. - // Make sure autobuild is on. - final IWorkspace workspace = ResourcesPlugin.getWorkspace(); - final IProject[] result = new IProject[projectNames.length]; - workspace.run(new IWorkspaceRunnable() { - public void run(IProgressMonitor monitor) throws CoreException { - // First import all, then after that, create the projects. - IPath rootLocation = workspace.getRoot().getLocation(); - try { - String antFile = FileLocator.toFileURL(JavaTestsPlugin.getPlugin().getBundle().getEntry("testdata/unzip.xml")).getFile(); - for (int i = 0; i < zipFiles.length; i++) { - // First create/recreate the project. - IProject p = getProject(projectNames[i]); - if (p != null) - p.delete(true, true, new SubProgressMonitor(monitor, 50)); // Get rid of it, we want a clean one for testing. - - // Now import the requested files. - AntRunner ant = new AntRunner(); - ant.setBuildFileLocation(antFile); - ant.setArguments(new String[] { "-Dzipfrom=" + zipFiles[i], "-Dzipto=" + rootLocation.toString()}); - ant.run(new SubProgressMonitor(monitor, 50)); - } - for (int i = 0; i < zipFiles.length; i++) { - result[i] = createProject(workspace, rootLocation.append(projectNames[i]), new SubProgressMonitor(monitor, 50)); - } - } catch (MalformedURLException e) { - } catch (IOException e) { - } - } - }, workspace.getRoot(), 0, null); - - return result; - } - - static int cfSuffix = 0; - /** - * Add a path to plugin jar to the java project's class path. - * @param bundle The plugin where the jar is located. - * @param pathToJar Path to the jar within the above plugin - * @param project java project to add to. - * - * @since 1.0.0 - */ - public static void addBundleJarToPath(Bundle bundle, String pathToJar, final IJavaProject project, IProgressMonitor pm) throws CoreException { - final IPath actualPath = new Path(ProxyPlugin.getPlugin().localizeFromBundleAndFragments(bundle, pathToJar)); - if (actualPath.isEmpty()) - return; // Didn't exist. - - final IWorkspace workspace = ResourcesPlugin.getWorkspace(); - workspace.run(new IWorkspaceRunnable() { - public void run(IProgressMonitor monitor) throws CoreException { - if (actualPath.toFile().isFile()) { - // It is a jar, this will be during runtime - // Create an external jar entry. - IClasspathEntry[] raw = project.getRawClasspath(); - IClasspathEntry[] newRaw = new IClasspathEntry[raw.length+1]; - newRaw[raw.length] = JavaCore.newLibraryEntry(actualPath, null, null); - System.arraycopy(raw, 0, newRaw, 0, raw.length); - project.setRawClasspath(newRaw, new SubProgressMonitor(monitor, 100)); - } else { - // It is a path to class folder, this will be during development time. - // But classfolders MUST exist in the workspace. JDT doesn't understand them outside workspace, - // so we will link it into the project. - IFolder cf = project.getProject().getFolder("linkbin"+(++cfSuffix)); - cf.createLink(actualPath, 0, new SubProgressMonitor(monitor, 100)); - // Create class folder entry. - IClasspathEntry[] raw = project.getRawClasspath(); - IClasspathEntry[] newRaw = new IClasspathEntry[raw.length+1]; - newRaw[raw.length] = JavaCore.newLibraryEntry(cf.getFullPath(), null, null); - System.arraycopy(raw, 0, newRaw, 0, raw.length); - project.setRawClasspath(newRaw, new SubProgressMonitor(monitor, 100)); - } - } - }, workspace.getRoot(), 0, pm); - } - - public static void waitForAutoBuild() throws CoreException { - IJobManager jobManager = Job.getJobManager(); - if (jobManager.find(ResourcesPlugin.FAMILY_AUTO_BUILD).length > 0) { - while (true) { - try { - jobManager.join(ResourcesPlugin.FAMILY_AUTO_BUILD, new NullProgressMonitor()); - break; - } catch (InterruptedException e) { - } - } - } - - } -} |