| /********************************************************************** |
| * This file is part of "Object Teams Development Tooling"-Software |
| * |
| * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany, |
| * for its Fraunhofer Institute and Computer Architecture and Software |
| * Technology (FIRST), Berlin, Germany and Technical University Berlin, |
| * Germany. |
| * |
| * This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Please visit http://www.eclipse.org/objectteams for updates and contact. |
| * |
| * Contributors: |
| * Fraunhofer FIRST - Initial API and implementation |
| * Technical University Berlin - Initial API and implementation |
| **********************************************************************/ |
| package org.eclipse.objectteams.otdt.ui.tests.util; |
| |
| import java.io.File; |
| |
| 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.IWorkspaceDescription; |
| 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.IProgressMonitor; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.jdt.core.IClasspathEntry; |
| import org.eclipse.jdt.core.IJavaProject; |
| import org.eclipse.jdt.core.JavaCore; |
| import org.eclipse.jdt.internal.ui.util.CoreUtility; |
| import org.eclipse.objectteams.otdt.core.ext.OTDTPlugin; |
| import org.eclipse.objectteams.otdt.core.ext.OTREContainer; |
| import org.eclipse.objectteams.otdt.ui.tests.TestPlugin; |
| |
| /** |
| * Helper methods to set up a IJavaProject. |
| */ |
| public class OTJavaProjectHelper |
| { |
| |
| public static final IPath RT_STUBS = new Path("testresources/rtstubs.jar"); |
| |
| /** |
| * OT: new method: OT specific project creation. |
| * Creates a IJavaProject. |
| */ |
| public static IJavaProject createOTJavaProject(String projectName, |
| String binFolderName) throws CoreException |
| { |
| IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); |
| IProject project = root.getProject(projectName); |
| if (!project.exists()) |
| { |
| project.create(null); |
| } |
| else |
| { |
| project.refreshLocal(IResource.DEPTH_INFINITE, null); |
| } |
| |
| if (!project.isOpen()) |
| { |
| project.open(null); |
| } |
| |
| IPath outputLocation; |
| if (binFolderName != null && binFolderName.length() > 0) |
| { |
| IFolder binFolder = project.getFolder(binFolderName); |
| if (!binFolder.exists()) |
| { |
| CoreUtility.createFolder(binFolder, false, true, null); |
| } |
| outputLocation = binFolder.getFullPath(); |
| } |
| else |
| { |
| outputLocation = project.getFullPath(); |
| } |
| |
| if (!project.hasNature(JavaCore.NATURE_ID) && |
| !project.hasNature(JavaCore.OTJ_NATURE_ID)) |
| { |
| addNatureToProject(project, JavaCore.NATURE_ID, null); |
| //add OT nature to project |
| addNatureToProject(project, JavaCore.OTJ_NATURE_ID, null); |
| } |
| IProjectDescription description = project.getDescription(); |
| //add OT build spec to project |
| description.setBuildSpec(OTDTPlugin.createProjectBuildCommands(description)); |
| project.setDescription(description, null); |
| |
| IJavaProject jproject = JavaCore.create(project); |
| |
| jproject.setOutputLocation(outputLocation, null); |
| jproject.setRawClasspath(new IClasspathEntry[0], null); |
| |
| OTREContainer.initializeOTJProject(project); |
| |
| return jproject; |
| } |
| |
| public static void addNatureToProject(IProject proj, String natureId, IProgressMonitor monitor) throws CoreException { |
| IProjectDescription description = proj.getDescription(); |
| String[] prevNatures= description.getNatureIds(); |
| String[] newNatures= new String[prevNatures.length + 1]; |
| System.arraycopy(prevNatures, 0, newNatures, 0, prevNatures.length); |
| newNatures[prevNatures.length]= natureId; |
| description.setNatureIds(newNatures); |
| proj.setDescription(description, monitor); |
| } |
| |
| /** |
| * OT: use our TestPlugin: |
| * Try to find rt.jar |
| */ |
| public static IPath[] findRtJar() |
| { |
| File rtStubs = TestPlugin.getDefault().getFileInPlugin( |
| RT_STUBS); |
| if (rtStubs != null && rtStubs.exists()) |
| { |
| return new IPath[] { new Path(rtStubs.getPath()), null, null }; |
| } |
| |
| return null; |
| } |
| |
| /** |
| * Additional Method: |
| * Sets autobuilding state for the test workspace. |
| */ |
| public static boolean setAutoBuilding(boolean state) throws CoreException |
| { |
| // disable auto build |
| IWorkspace workspace = ResourcesPlugin.getWorkspace(); |
| IWorkspaceDescription desc = workspace.getDescription(); |
| boolean result = desc.isAutoBuilding(); |
| desc.setAutoBuilding(state); |
| workspace.setDescription(desc); |
| return result; |
| } |
| |
| } |
| |