blob: 81f25f02aa62ad4a5aff90aa50dd394719e647d4 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.easyant4e.tests;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
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.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.launching.JavaRuntime;
/**
* This is a modified version of the TestProject class written by Erich Gamma
* and Kent Beck and described in their book
* "Contributing to Eclipse: Principles, Patterns, and Plug-Ins" It's largely
* inspired by Spring IDE TestSuite
*/
public class EclipseProjectBuilder {
// private IProject project;
// private IJavaProject javaProject;
// private IPackageFragmentRoot sourceFolder;
public EclipseProjectBuilder() throws CoreException {
// IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
// project = root.getProject("TestProject");
// project.create(null);
// project.open(null);
// javaProject = JavaCore.create(project);
//
// IFolder binFolder = createBinFolder();
//
// setJavaNature();
// javaProject.setRawClasspath(new IClasspathEntry[0], null);
//
// createOutputFolder(binFolder);
// addSystemLibraries();
}
public static IProject createProject(String name) throws CoreException {
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IProject project = root.getProject(name);
project.create(null);
project.open(null);
return project;
}
public static IJavaProject createJavaProject(String name) throws CoreException {
IProject project = createProject(name);
IJavaProject javaProject = JavaCore.create(project);
addJavaNature(project);
javaProject.setRawClasspath(new IClasspathEntry[0], null);
createOutputFolder(javaProject);
addSystemLibraries(javaProject);
return javaProject;
}
private static void addJavaNature(IProject project) throws CoreException {
IProjectDescription description = project.getDescription();
description.setNatureIds(new String[] { JavaCore.NATURE_ID });
project.setDescription(description, null);
}
private static void createOutputFolder(IJavaProject javaProject) throws CoreException {
IFolder binFolder = createBinFolder(javaProject.getProject());
IPath outputLocation = binFolder.getFullPath();
javaProject.setOutputLocation(outputLocation, null);
}
private static IFolder createBinFolder(IProject project) throws CoreException {
IFolder binFolder = project.getFolder("bin");
binFolder.create(false, true, null);
return binFolder;
}
private static void addSystemLibraries(IJavaProject javaProject) throws JavaModelException {
IClasspathEntry[] oldEntries = javaProject.getRawClasspath();
IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1];
System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length);
newEntries[oldEntries.length] = JavaRuntime.getDefaultJREContainerEntry();
javaProject.setRawClasspath(newEntries, null);
}
public static IFile createModuleDescriptorFile(IProject project, String org) throws CoreException {
IFile moduleDescFile = project.getFile("module.ivy");
String content = ""
+ "<ivy-module version=\"2.0\" xmlns:ea=\"http://www.easyant.org\">"
+ " <info organisation=\"" + org + "\" module=\"" + project.getName() + "\" status=\"integration\" >"
+ " <description>project description</description>"
+ " <ea:build type=\"org.apache.easyant.buildtypes#build-std-java;0.2\" />"
+ " </info>"
+ "</ivy-module>";
InputStream in = new ByteArrayInputStream(content.getBytes());
moduleDescFile.create(in, true, null);
return moduleDescFile;
}
public static void deleteProject(IProject project) throws CoreException {
// waitForIndexer();
deleteProject(project, true);
}
public static void deleteProject(IProject project, boolean deleteContent) throws CoreException {
// waitForIndexer();
project.delete(deleteContent, true, new NullProgressMonitor());
}
// public IJavaProject getJavaProject() {
// return javaProject;
// }
// public void addJar(String plugin, String jar) throws
// MalformedURLException,
// IOException, JavaModelException {
// Path result = findFileInPlugin(plugin, jar);
// IClasspathEntry[] oldEntries = javaProject.getRawClasspath();
// IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length +
// 1];
// System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length);
// newEntries[oldEntries.length] = JavaCore.newLibraryEntry(result, null,
// null);
// javaProject.setRawClasspath(newEntries, null);
// }
//
// public IPackageFragment createPackage(String name) throws CoreException {
// if (sourceFolder == null)
// sourceFolder = createSourceFolder();
// return sourceFolder.createPackageFragment(name, false, null);
// }
//
// public IType createType(IPackageFragment pack, String cuName, String
// source)
// throws JavaModelException {
// StringBuffer buf = new StringBuffer();
// buf.append("package " + pack.getElementName() + ";\n");
// buf.append("\n");
// buf.append(source);
// ICompilationUnit cu = pack.createCompilationUnit(cuName,
// buf.toString(), false, null);
// return cu.getTypes()[0];
// }
//
// /**
// * Wait for autobuild notification to occur, that is
// * for the autbuild to finish.
// */
// public void waitForAutoBuild() {
// boolean wasInterrupted = false;
// do {
// try {
// Platform.getJobManager().join(
// ResourcesPlugin.FAMILY_AUTO_BUILD, null);
// wasInterrupted = false;
// } catch (OperationCanceledException e) {
// throw (e);
// } catch (InterruptedException e) {
// wasInterrupted = true;
// }
// } while (wasInterrupted);
// }
//
// public void dispose() throws CoreException {
// waitForIndexer();
// project.delete(true, true, null);
// }
//
//
// public IFolder createXmlFolder() throws CoreException {
// IFolder xmlFolder = project.getFolder("xml");
// if (!xmlFolder.exists()) {
// xmlFolder.create(false, true, null);
// }
// return xmlFolder;
// }
//
//
// private IPackageFragmentRoot createSourceFolder() throws CoreException {
// IFolder folder = project.getFolder("src");
// folder.create(false, true, null);
// IPackageFragmentRoot root = javaProject.getPackageFragmentRoot(folder);
//
// IClasspathEntry[] oldEntries = javaProject.getRawClasspath();
// IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length +
// 1];
// System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length);
// newEntries[oldEntries.length] = JavaCore.newSourceEntry(root.getPath());
// javaProject.setRawClasspath(newEntries, null);
// return root;
// }
//
// private Path findFileInPlugin(String plugin, String file)
// throws MalformedURLException, IOException {
// IPluginRegistry registry = Platform.getPluginRegistry();
// IPluginDescriptor descriptor = registry.getPluginDescriptor(plugin);
// URL pluginURL = descriptor.getInstallURL();
// URL jarURL = new URL(pluginURL, file);
// URL localJarURL = Platform.asLocalURL(jarURL);
// return new Path(localJarURL.getPath());
// }
//
// private void waitForIndexer() throws JavaModelException {
// new SearchEngine().searchAllTypeNames(ResourcesPlugin.getWorkspace(),
// null, null, IJavaSearchConstants.EXACT_MATCH,
// IJavaSearchConstants.CASE_SENSITIVE,
// IJavaSearchConstants.CLASS, SearchEngine
// .createJavaSearchScope(new IJavaElement[0]),
// new ITypeNameRequestor() {
// public void acceptClass(char[] packageName,
// char[] simpleTypeName, char[][] enclosingTypeNames,
// String path) {
// }
//
// public void acceptInterface(char[] packageName,
// char[] simpleTypeName, char[][] enclosingTypeNames,
// String path) {
// }
// }, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, null);
// }
}