org.projectusus.core.internal.TestProjectCreator.java Source code

Java tutorial

Introduction

Here is the source code for org.projectusus.core.internal.TestProjectCreator.java

Source

// 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);
    }

}