// Copyright (c) 2009-2010 by the projectusus.org contributors // This software is released under the terms and conditions // of the Eclipse Public License (EPL) 1.0. // See http://www.eclipse.org/legal/epl-v10.html for details. package org.projectusus.core.internal; import static org.eclipse.core.resources.ResourcesPlugin.getWorkspace; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.launching.IVMInstall; import org.eclipse.jdt.launching.JavaRuntime; import org.eclipse.jdt.launching.LibraryLocation; import org.projectusus.core.project2.IUSUSProject; import org.projectusus.core.statistics.UsusModelProvider; public class TestProjectCreator { private static final String OUTPUT_FOLDER = "bin"; public static final String SOURCE_FOLDER = "src"; private final IProject project; public TestProjectCreator( String name ) throws CoreException { super(); project = createNewProject( name ); addJavaNature( project ); makeUsusProject(); } public IProject getProject() { return project; } private IProject createNewProject( String name ) throws CoreException { IProject regularProject = getWorkspace().getRoot().getProject( name ); regularProject.create( null ); regularProject.open( null ); return regularProject; } private void addJavaNature( IProject project ) throws CoreException { IProjectDescription description = project.getDescription(); description.setNatureIds( new String[] { JavaCore.NATURE_ID } ); project.setDescription( description, null ); IJavaProject javaProject = JavaCore.create( project ); addBinFolder( javaProject ); addJDKToClasspath( javaProject ); addSourceFolder( javaProject ); } private void addJDKToClasspath( IJavaProject javaProject ) throws JavaModelException { List<IClasspathEntry> entries = new ArrayList<IClasspathEntry>(); IVMInstall vmInstall = JavaRuntime.getDefaultVMInstall(); LibraryLocation[] locations = JavaRuntime.getLibraryLocations( vmInstall ); for( LibraryLocation element : locations ) { entries.add( JavaCore.newLibraryEntry( element.getSystemLibraryPath(), null, null ) ); } javaProject.setRawClasspath( entries.toArray( new IClasspathEntry[entries.size()] ), null ); } private void addBinFolder( IJavaProject javaProject ) throws CoreException { IFolder binFolder = javaProject.getProject().getFolder( OUTPUT_FOLDER ); javaProject.setOutputLocation( binFolder.getFullPath(), null ); } private void addSourceFolder( IJavaProject javaProject ) throws CoreException { IFolder sourceFolder = javaProject.getProject().getFolder( SOURCE_FOLDER ); sourceFolder.create( false, true, null ); IPackageFragmentRoot root = javaProject.getPackageFragmentRoot( sourceFolder ); 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 ); } private void makeUsusProject() throws CoreException { makeUsusProject( true, project ); UsusModelProvider.ususModelForAdapter().dropRawData( project ); } static void makeUsusProject( boolean makeUsusProject, IProject project ) throws CoreException { IUSUSProject ususProject = (IUSUSProject)project.getAdapter( IUSUSProject.class ); ususProject.setUsusProject( makeUsusProject ); } }