Package org.jbehave.plugin.eclipse.test

Source Code of org.jbehave.plugin.eclipse.test.TestProject

/*******************************************************************************
* Copyright (c) 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
*     Erich Gamma (erich_gamma@ch.ibm.com) and
*         Kent Beck (kent@threeriversinstitute.org)
*******************************************************************************/
package org.jbehave.plugin.eclipse.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;

public class TestProject {
 
  // 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"
        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;
        }
       
        IFolder createXmlFolder() throws CoreException {
            IFolder xmlFolder= project.getFolder("xml");
            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.jbehave.plugin.eclipse.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.