Package org.springframework.ide.test

Source Code of org.springframework.ide.test.TestProject

/*******************************************************************************
* Copyright (c) 2004, 2007 Spring IDE Developers
* 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:
*     Spring IDE Developers - initial API and implementation
*******************************************************************************/
package org.springframework.ide.test;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

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.IPluginDescriptor;
import org.eclipse.core.runtime.IPluginRegistry;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.search.IJavaSearchConstants;
import org.eclipse.jdt.core.search.ITypeNameRequestor;
import org.eclipse.jdt.core.search.SearchEngine;
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"
* @author Loren Rosen
* @author Torsten Juergeleit
* @author Christian Dupuis
*/
public class TestProject {

  private IProject project;
  private IJavaProject javaProject;
  private IPackageFragmentRoot sourceFolder;

  public TestProject() 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 IProject getProject() {
    return project;
  }

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

  private IFolder createBinFolder() throws CoreException {
    IFolder binFolder = project.getFolder("bin");
    binFolder.create(false, true, null);
    return binFolder;
  }

  public IFolder createXmlFolder() throws CoreException {
    IFolder xmlFolder = project.getFolder("xml");
    if (!xmlFolder.exists()) {
      xmlFolder.create(false, true, null);
    }
    return xmlFolder;
  }

  private void setJavaNature() throws CoreException {
    IProjectDescription description = project.getDescription();
    description.setNatureIds(new String[] { JavaCore.NATURE_ID });
    project.setDescription(description, null);
  }

  private void createOutputFolder(IFolder binFolder)
      throws JavaModelException {
    IPath outputLocation = binFolder.getFullPath();
    javaProject.setOutputLocation(outputLocation, null);
  }

  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 void addSystemLibraries() 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);
  }

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

Related Classes of org.springframework.ide.test.TestProject

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.